|
@@ -0,0 +1,207 @@
|
|
|
|
+'''
|
|
|
|
+Licensed to the Apache Software Foundation (ASF) under one
|
|
|
|
+or more contributor license agreements. See the NOTICE file
|
|
|
|
+distributed with this work for additional information
|
|
|
|
+regarding copyright ownership. The ASF licenses this file
|
|
|
|
+to you under the Apache License, Version 2.0 (the
|
|
|
|
+"License"); you may not use this file except in compliance
|
|
|
|
+with the License. You may obtain a copy of the License at
|
|
|
|
+
|
|
|
|
+ http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
+
|
|
|
|
+Unless required by applicable law or agreed to in writing, software
|
|
|
|
+distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
+See the License for the specific language governing permissions and
|
|
|
|
+limitations under the License.
|
|
|
|
+'''
|
|
|
|
+
|
|
|
|
+from unittest import TestCase
|
|
|
|
+from mock.mock import patch
|
|
|
|
+from resource_management import *
|
|
|
|
+from resource_management.libraries.resources.execute_hadoop\
|
|
|
|
+ import ExecuteHadoop
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class TestExecuteHadoopResource(TestCase):
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_default_args(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test if default arguments are passed to Execute
|
|
|
|
+ '''
|
|
|
|
+ with Environment() as env:
|
|
|
|
+ ExecuteHadoop("command",
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ logoutput=True,
|
|
|
|
+ )
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 1)
|
|
|
|
+ self.assertEqual(execute_mock.call_args[0][0].command,'hadoop --config conf_dir command')
|
|
|
|
+ self.assertEqual(execute_mock.call_args[0][0].arguments,
|
|
|
|
+ {'logoutput': True, 'tries': 1, 'user': 'user', 'try_sleep': 0})
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_unknown_conf(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test when UnknownConfiguration passed
|
|
|
|
+ '''
|
|
|
|
+ with Environment() as env:
|
|
|
|
+ ExecuteHadoop("command",
|
|
|
|
+ kinit_path_local=UnknownConfiguration(name="kinit_path_local"),
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ keytab=UnknownConfiguration(name="keytab"),
|
|
|
|
+ security_enabled=False,
|
|
|
|
+ principal=UnknownConfiguration(name="principal")
|
|
|
|
+ )
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 1)
|
|
|
|
+ self.assertEqual(execute_mock.call_args[0][0].command,'hadoop --config conf_dir command')
|
|
|
|
+ self.assertEqual(execute_mock.call_args[0][0].arguments,
|
|
|
|
+ {'logoutput': False, 'tries': 1, 'user': 'user', 'try_sleep': 0})
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_defined_args(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test if defined arguments are passed to Execute
|
|
|
|
+ '''
|
|
|
|
+ with Environment("/") as env:
|
|
|
|
+ ExecuteHadoop("command",
|
|
|
|
+ action="run",
|
|
|
|
+ kinit_path_local="path",
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ tries=2,
|
|
|
|
+ keytab="keytab",
|
|
|
|
+ security_enabled=False,
|
|
|
|
+ kinit_override=False,
|
|
|
|
+ try_sleep=2,
|
|
|
|
+ logoutput=True,
|
|
|
|
+ principal="principal"
|
|
|
|
+ )
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 1)
|
|
|
|
+ self.assertEqual(execute_mock.call_args[0][0].command,'hadoop --config conf_dir command')
|
|
|
|
+ self.assertEqual(execute_mock.call_args[0][0].arguments,
|
|
|
|
+ {'logoutput': True, 'tries': 2, 'user': 'user', 'try_sleep': 2})
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_command_list(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test for "command" passed as List
|
|
|
|
+ '''
|
|
|
|
+ with Environment("/") as env:
|
|
|
|
+ ExecuteHadoop(["command1","command2"],
|
|
|
|
+ action="run",
|
|
|
|
+ kinit_path_local="path",
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ keytab="keytab"
|
|
|
|
+ )
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 2)
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[0][0][0].command,
|
|
|
|
+ 'hadoop --config conf_dir command1')
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[1][0][0].command,
|
|
|
|
+ 'hadoop --config conf_dir command2')
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[0][0][0].arguments,
|
|
|
|
+ {'logoutput': False, 'tries': 1, 'user': 'user', 'try_sleep': 0})
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[1][0][0].arguments,
|
|
|
|
+ {'logoutput': False, 'tries': 1, 'user': 'user', 'try_sleep': 0})
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_command_tuple(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test for "command" passed as Tuple
|
|
|
|
+ '''
|
|
|
|
+ with Environment("/") as env:
|
|
|
|
+ ExecuteHadoop(("command1","command2","command3"),
|
|
|
|
+ action="run",
|
|
|
|
+ kinit_path_local="path",
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ keytab="keytab"
|
|
|
|
+ )
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 1)
|
|
|
|
+ self.assertEqual(execute_mock.call_args[0][0].command,
|
|
|
|
+ 'hadoop --config conf_dir command1 command2 command3')
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_secured(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test security_enabled=True behaviour
|
|
|
|
+ '''
|
|
|
|
+ with Environment("/") as env:
|
|
|
|
+ ExecuteHadoop("command",
|
|
|
|
+ action="run",
|
|
|
|
+ kinit_path_local="path",
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ tries=1,
|
|
|
|
+ keytab="keytab",
|
|
|
|
+ security_enabled=True,
|
|
|
|
+ kinit_override=False,
|
|
|
|
+ try_sleep=0,
|
|
|
|
+ logoutput=True
|
|
|
|
+ )
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 2)
|
|
|
|
+ self.assertEqual(str(execute_mock.call_args_list[0][0][0]),
|
|
|
|
+ "Execute['path -kt keytab user']")
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[0][0][0].command,
|
|
|
|
+ 'path -kt keytab user')
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[0][0][0].arguments,
|
|
|
|
+ {'path': ['/bin'], 'user': 'user'})
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[1][0][0].command,
|
|
|
|
+ 'hadoop --config conf_dir command')
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[1][0][0].arguments,
|
|
|
|
+ {'logoutput': True, 'tries': 1, 'user': 'user', 'try_sleep': 0})
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_secured_kinit_override(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test security_enabled=True and kinit_override=True behaviour
|
|
|
|
+ '''
|
|
|
|
+ with Environment("/") as env:
|
|
|
|
+ ExecuteHadoop("command",
|
|
|
|
+ action="run",
|
|
|
|
+ kinit_path_local="path",
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ tries=1,
|
|
|
|
+ keytab="keytab",
|
|
|
|
+ security_enabled=True,
|
|
|
|
+ kinit_override=True,
|
|
|
|
+ try_sleep=0,
|
|
|
|
+ logoutput=True
|
|
|
|
+ )
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 1)
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[0][0][0].command,
|
|
|
|
+ 'hadoop --config conf_dir command')
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @patch("resource_management.core.providers.system.ExecuteProvider")
|
|
|
|
+ def test_run_secured_principal(self, execute_mock):
|
|
|
|
+ '''
|
|
|
|
+ Test with "principal" argument
|
|
|
|
+ '''
|
|
|
|
+ with Environment("/") as env:
|
|
|
|
+ ExecuteHadoop("command",
|
|
|
|
+ action="run",
|
|
|
|
+ kinit_path_local="path",
|
|
|
|
+ conf_dir="conf_dir",
|
|
|
|
+ user="user",
|
|
|
|
+ tries=1,
|
|
|
|
+ keytab="keytab",
|
|
|
|
+ security_enabled=True,
|
|
|
|
+ kinit_override=False,
|
|
|
|
+ try_sleep=0,
|
|
|
|
+ logoutput=True,
|
|
|
|
+ principal="principal")
|
|
|
|
+ self.assertEqual(execute_mock.call_count, 2)
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[0][0][0].command,
|
|
|
|
+ 'path -kt keytab principal')
|
|
|
|
+ self.assertEqual(execute_mock.call_args_list[1][0][0].command,
|
|
|
|
+ 'hadoop --config conf_dir command')
|