AMBARI-12331. on non-root agent RU Oozie restart fails (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6ea0b83c Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6ea0b83c Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6ea0b83c Branch: refs/heads/branch-2.1 Commit: 6ea0b83c84bcd23a84577996d6e5b7e7a4af98ba Parents: 58fc42e Author: Andrew Onishuk <aonis...@hortonworks.com> Authored: Wed Jul 8 17:48:03 2015 +0300 Committer: Andrew Onishuk <aonis...@hortonworks.com> Committed: Wed Jul 8 17:48:03 2015 +0300 ---------------------------------------------------------------------- .../libraries/functions/tar_archive.py | 40 ++--- .../1.4.0.2.0/package/scripts/flume_upgrade.py | 5 +- .../0.5.0.2.2/package/scripts/knox_gateway.py | 6 +- .../package/scripts/oozie_server_upgrade.py | 23 +-- .../stacks/2.0.6/HDFS/test_hdfs_client.py | 3 + .../stacks/2.0.6/OOZIE/test_oozie_server.py | 124 +++++++++------ .../stacks/2.1/FALCON/test_falcon_server.py | 158 ++++++++++++++++++- .../python/stacks/2.2/KNOX/test_knox_gateway.py | 85 ++++++---- 8 files changed, 309 insertions(+), 135 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-common/src/main/python/resource_management/libraries/functions/tar_archive.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/tar_archive.py b/ambari-common/src/main/python/resource_management/libraries/functions/tar_archive.py index f1fb597..49caf88 100644 --- a/ambari-common/src/main/python/resource_management/libraries/functions/tar_archive.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/tar_archive.py @@ -18,16 +18,12 @@ See the License for the specific language governing permissions and limitations under the License. ''' -import os -import tarfile -from contextlib import closing +from resource_management.core.resources.system import Execute def archive_dir(output_filename, input_dir): - with closing(tarfile.open(output_filename, "w:gz")) as tar: - try: - tar.add(input_dir, arcname=os.path.basename(".")) - finally: - tar.close() + Execute(('tar', '-zcvf', output_filename, input_dir), + sudo = True, + ) def archive_directory_dereference(archive, directory): @@ -38,19 +34,15 @@ def archive_directory_dereference(archive, directory): :param directory: the directory to include :return: None """ - tarball = None - try: - # !!! dereference must be TRUE since the conf is a symlink and we want - # its contents instead of the actual symlink - tarball = tarfile.open(archive, mode="w", dereference=True) - - # tar the files, chopping off everything in front of directory - # /foo/bar/conf/a, /foo/bar/conf/b, /foo/bar/conf/dir/c - # becomes - # a - # b - # dir/c - tarball.add(directory, arcname=os.path.relpath(directory, start=directory)) - finally: - if tarball: - tarball.close() \ No newline at end of file + + Execute(('tar', '-zcvhf', archive, directory), + sudo = True, + ) + +def untar_archive(archive, directory): + """ + :param directory: can be a symlink and is followed + """ + Execute(('tar','-xvf',archive,'-C',directory+"/"), + sudo = True, + ) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume_upgrade.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume_upgrade.py b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume_upgrade.py index 32cc1b9..7743619 100644 --- a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume_upgrade.py +++ b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume_upgrade.py @@ -70,10 +70,7 @@ def pre_start_restore(): directoryMappings[directory]) if os.path.isfile(archive): - Logger.info('Extracting {0} to {1}'.format(archive, directory)) - Execute(('tar','-xvf',archive,'-C',directory+"/"), - sudo = True, - ) + tar_archive.untar_archive(archive, directory) # cleanup if os.path.exists(os.path.join(tempfile.gettempdir(), BACKUP_TEMP_DIR)): http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_gateway.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_gateway.py b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_gateway.py index 38a55bc..8117312 100644 --- a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_gateway.py +++ b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_gateway.py @@ -21,7 +21,7 @@ import os import tarfile from resource_management.libraries.script.script import Script -from resource_management.libraries.functions import conf_select +from resource_management.libraries.functions import conf_select, tar_archive from resource_management.libraries.functions import hdp_select from resource_management.libraries.functions.check_process_status import check_process_status from resource_management.libraries.functions import format @@ -134,9 +134,7 @@ class KnoxGatewayDefault(KnoxGateway): sudo = True, ) - Execute(('tar','-xvf',conf_tar_source_path,'-C',extract_dir), - sudo = True, - ) + tar_archive.untar_archive(conf_tar_source_path, extract_dir) File(conf_tar_dest_path, action = "delete", http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_server_upgrade.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_server_upgrade.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_server_upgrade.py index fb19ddf..6225eae 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_server_upgrade.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_server_upgrade.py @@ -25,7 +25,7 @@ import tempfile from resource_management.core import shell from resource_management.core.logger import Logger from resource_management.core.exceptions import Fail -from resource_management.core.resources.system import Execute +from resource_management.core.resources.system import Execute, Directory from resource_management.libraries.functions import Direction from resource_management.libraries.functions import format from resource_management.libraries.functions import compare_versions @@ -87,17 +87,12 @@ class OozieUpgrade(Script): Logger.info('Extracting {0} to {1}'.format(archive, directory)) - tarball = None - try: - tarball = tarfile.open(archive, "r") - tarball.extractall(directory) - finally: - if tarball: - tarball.close() + tar_archive.untar_archive(archive, directory) # cleanup - shutil.rmtree(os.path.join(tempfile.gettempdir(), BACKUP_TEMP_DIR)) - + Directory(os.path.join(tempfile.gettempdir(), BACKUP_TEMP_DIR), + action="delete", + ) @staticmethod def prepare_libext_directory(): @@ -112,11 +107,9 @@ class OozieUpgrade(Script): target_version_needs_compression_libraries = compare_versions( format_hdp_stack_version(params.version), '2.2.1.0') >= 0 - if not os.path.isdir(params.oozie_libext_customer_dir): - os.makedirs(params.oozie_libext_customer_dir, 0o777) - - # ensure that it's rwx for all - os.chmod(params.oozie_libext_customer_dir, 0o777) + Directory(params.oozie_libext_customer_dir, + mode = 0777, + ) # get all hadooplzo* JAR files # hdp-select set hadoop-client has not run yet, therefore we cannot use http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py b/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py index 41fd771..06d94e9 100644 --- a/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py +++ b/ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py @@ -64,6 +64,9 @@ class Test(RMFTestCase): self.assertResourceCalled('PropertiesFile', '/tmp/123/startup.properties', properties = UnknownConfigurationMock(), ) + self.assertResourceCalled('Execute', ('tar', '-zcvf', u'/tmp/HDFS_CLIENT-configs.tar.gz', '/tmp/123'), + sudo = True, + ) self.assertResourceCalled('Directory', '/tmp/123', action = ['delete'], ) http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py index 71744c3..39fd14b 100644 --- a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py +++ b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py @@ -26,6 +26,7 @@ from resource_management.core.exceptions import Fail from resource_management.libraries import functions from resource_management.libraries.providers.hdfs_resource import WebHDFSUtil import hashlib +import tempfile md5_mock = MagicMock() md5_mock.hexdigest.return_value = "abc123hash" @@ -33,6 +34,7 @@ md5_mock.hexdigest.return_value = "abc123hash" @patch("platform.linux_distribution", new = MagicMock(return_value="Linux")) @patch.object(hashlib, "md5", new=MagicMock(return_value=md5_mock)) @patch.object(WebHDFSUtil, "run_command", new=MagicMock(return_value={})) +@patch.object(tempfile, "gettempdir", new=MagicMock(return_value="/tmp")) class TestOozieServer(RMFTestCase): COMMON_SERVICES_PACKAGE_DIR = "OOZIE/4.0.0.2.0/package" STACK_VERSION = "2.0.6" @@ -913,17 +915,15 @@ class TestOozieServer(RMFTestCase): put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"}) - @patch("tarfile.open") @patch("os.path.isdir") @patch("os.path.exists") @patch("os.path.isfile") @patch("os.remove") - @patch("os.chmod") @patch("shutil.rmtree", new = MagicMock()) @patch("glob.iglob") @patch("shutil.copy2", new = MagicMock()) - def test_upgrade(self, glob_mock, chmod_mock, remove_mock, - isfile_mock, exists_mock, isdir_mock, tarfile_open_mock): + def test_upgrade(self, glob_mock, remove_mock, + isfile_mock, exists_mock, isdir_mock): def exists_mock_side_effect(path): if path == '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar': @@ -945,23 +945,7 @@ class TestOozieServer(RMFTestCase): target = RMFTestCase.TARGET_COMMON_SERVICES, call_mocks = [(0, prepare_war_stdout)] ) - - # 2 calls to tarfile.open (1 directories, read + write) - self.assertTrue(tarfile_open_mock.called) - self.assertEqual(tarfile_open_mock.call_count,2) - - # check the call args for creation of the tarfile - call_args = tarfile_open_mock.call_args_list[0] - call_argument_tarfile = call_args[0][0] - call_kwargs = call_args[1] - - self.assertTrue("oozie-upgrade-backup/oozie-conf-backup.tar" in call_argument_tarfile) - self.assertEquals(True, call_kwargs["dereference"]) - - self.assertTrue(chmod_mock.called) - self.assertEqual(chmod_mock.call_count,1) - chmod_mock.assert_called_once_with('/usr/hdp/current/oozie-server/libext-customer', 511) - + self.assertTrue(isfile_mock.called) self.assertEqual(isfile_mock.call_count,3) isfile_mock.assert_called_with('/usr/share/HDP-oozie/ext-2.2.zip') @@ -970,20 +954,39 @@ class TestOozieServer(RMFTestCase): self.assertEqual(glob_mock.call_count,1) glob_mock.assert_called_with('/usr/hdp/2.2.1.0-2135/hadoop/lib/hadoop-lzo*.jar') - self.assertResourceCalled('Execute', ('hdp-select', 'set', 'oozie-server', '2.2.1.0-2135'), sudo=True,) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar', + '/usr/hdp/current/oozie-server/conf/'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('hdp-select', 'set', 'oozie-server', u'2.2.1.0-2135'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('tar', + '-xvf', + '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar', + '-C', + '/usr/hdp/current/oozie-server/conf//'), + sudo = True, + ) + self.assertResourceCalled('Directory', '/tmp/oozie-upgrade-backup', + action = ['delete'], + ) + self.assertResourceCalled('Directory', '/usr/hdp/current/oozie-server/libext-customer', + mode = 0777, + ) self.assertNoMoreResources() - @patch("tarfile.open") @patch("os.path.isdir") @patch("os.path.exists") @patch("os.path.isfile") @patch("os.remove") - @patch("os.chmod") @patch("shutil.rmtree", new = MagicMock()) @patch("glob.iglob") @patch("shutil.copy2", new = MagicMock()) - def test_upgrade_23(self, glob_mock, chmod_mock, remove_mock, - isfile_mock, exists_mock, isdir_mock, tarfile_open_mock): + def test_upgrade_23(self, glob_mock, remove_mock, + isfile_mock, exists_mock, isdir_mock): def exists_mock_side_effect(path): if path == '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar': @@ -1016,14 +1019,6 @@ class TestOozieServer(RMFTestCase): mocks_dict = mocks_dict ) - # 2 calls to tarfile.open (1 directories, read + write) - self.assertTrue(tarfile_open_mock.called) - self.assertEqual(tarfile_open_mock.call_count,2) - - self.assertTrue(chmod_mock.called) - self.assertEqual(chmod_mock.call_count,1) - chmod_mock.assert_called_once_with('/usr/hdp/current/oozie-server/libext-customer', 511) - self.assertTrue(isfile_mock.called) self.assertEqual(isfile_mock.call_count,3) isfile_mock.assert_called_with('/usr/share/HDP-oozie/ext-2.2.zip') @@ -1032,7 +1027,28 @@ class TestOozieServer(RMFTestCase): self.assertEqual(glob_mock.call_count,1) glob_mock.assert_called_with('/usr/hdp/2.3.0.0-1234/hadoop/lib/hadoop-lzo*.jar') - self.assertResourceCalled('Execute', ('hdp-select', 'set', 'oozie-server', '2.3.0.0-1234'), sudo=True) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar', + '/usr/hdp/current/oozie-server/conf/'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('hdp-select', 'set', 'oozie-server', '2.3.0.0-1234'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('tar', + '-xvf', + '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar', + '-C', + '/usr/hdp/current/oozie-server/conf//'), + sudo = True, + ) + self.assertResourceCalled('Directory', '/tmp/oozie-upgrade-backup', + action = ['delete'], + ) + self.assertResourceCalled('Directory', '/usr/hdp/current/oozie-server/libext-customer', + mode = 0777, + ) self.assertNoMoreResources() self.assertEquals(2, mocks_dict['call'].call_count) @@ -1045,16 +1061,14 @@ class TestOozieServer(RMFTestCase): mocks_dict['call'].call_args_list[0][0][0]) - @patch("tarfile.open") @patch("os.path.isdir") @patch("os.path.exists") @patch("os.path.isfile") @patch("os.remove") - @patch("os.chmod") @patch("shutil.rmtree", new = MagicMock()) @patch("shutil.copy2", new = MagicMock()) - def test_downgrade_no_compression_library_copy(self, chmod_mock, remove_mock, - isfile_mock, exists_mock, isdir_mock, tarfile_open_mock): + def test_downgrade_no_compression_library_copy(self, remove_mock, + isfile_mock, exists_mock, isdir_mock): isdir_mock.return_value = True exists_mock.return_value = False @@ -1069,19 +1083,31 @@ class TestOozieServer(RMFTestCase): target = RMFTestCase.TARGET_COMMON_SERVICES, call_mocks = [(0, prepare_war_stdout)]) - # 2 calls to tarfile.open (1 directories, read + write) - self.assertTrue(tarfile_open_mock.called) - self.assertEqual(tarfile_open_mock.call_count,2) - - self.assertTrue(chmod_mock.called) - self.assertEqual(chmod_mock.call_count,1) - chmod_mock.assert_called_once_with('/usr/hdp/current/oozie-server/libext-customer', 511) - self.assertTrue(isfile_mock.called) self.assertEqual(isfile_mock.call_count,2) isfile_mock.assert_called_with('/usr/share/HDP-oozie/ext-2.2.zip') - - self.assertResourceCalled('Execute', ('hdp-select', 'set', 'oozie-server', '2.2.0.0-0000'), sudo=True) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar', + '/usr/hdp/current/oozie-server/conf/'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('hdp-select', 'set', 'oozie-server', u'2.2.0.0-0000'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('tar', + '-xvf', + '/tmp/oozie-upgrade-backup/oozie-conf-backup.tar', + '-C', + '/usr/hdp/current/oozie-server/conf//'), + sudo = True, + ) + self.assertResourceCalled('Directory', '/tmp/oozie-upgrade-backup', + action = ['delete'], + ) + self.assertResourceCalled('Directory', '/usr/hdp/current/oozie-server/libext-customer', + mode = 0777, + ) self.assertNoMoreResources() http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py b/ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py index 087b72c..ba2c026 100644 --- a/ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py +++ b/ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py @@ -23,9 +23,10 @@ from mock.mock import MagicMock, patch import shutil from stacks.utils.RMFTestCase import * import tarfile - +import tempfile @patch("platform.linux_distribution", new = MagicMock(return_value="Linux")) +@patch.object(tempfile, "gettempdir", new=MagicMock(return_value="/tmp")) class TestFalconServer(RMFTestCase): COMMON_SERVICES_PACKAGE_DIR = "FALCON/0.5.0.2.1/package" STACK_VERSION = "2.1" @@ -191,7 +192,7 @@ class TestFalconServer(RMFTestCase): tarfile_open_mock): isdir_mock.return_value = True - exists_mock.side_effect = [False,False,True] + exists_mock.side_effect = [False,False,True, True] isfile_mock.return_value = True self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/falcon_server.py", @@ -207,11 +208,159 @@ class TestFalconServer(RMFTestCase): self.assertResourceCalled('File', '/var/run/falcon/falcon.pid', action = ['delete']) - self.assertResourceCalled('Execute', ('hdp-select', 'set', 'falcon-server', '2.2.1.0-2135'), sudo=True) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/falcon-upgrade-backup/falcon-conf-backup.tar', + '/usr/hdp/current/falcon-server/conf'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/falcon-upgrade-backup/falcon-local-backup.tar', + u'/hadoop/falcon'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('hdp-select', 'set', 'falcon-server', u'2.2.1.0-2135'), + sudo = True, + ) + self.assertResourceCalled('Directory', '/var/run/falcon', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('Directory', '/var/log/falcon', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('Directory', '/usr/hdp/current/falcon-server/webapp', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('Directory', '/usr/hdp/current/falcon-server', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('Directory', '/etc/falcon', + recursive = True, + mode = 0755, + ) + self.assertResourceCalled('Directory', '/usr/hdp/current/falcon-server/conf', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('File', '/usr/hdp/current/falcon-server/conf/falcon-env.sh', + owner = 'falcon', + content = InlineTemplate(self.getConfig()['configurations']['falcon-env']['content']), + ) + self.assertResourceCalled('File', '/usr/hdp/current/falcon-server/conf/client.properties', + owner = 'falcon', + content = Template('client.properties.j2'), + mode = 0644, + ) + self.assertResourceCalled('PropertiesFile', '/usr/hdp/current/falcon-server/conf/runtime.properties', + owner = 'falcon', + mode = 0644, + properties = {u'*.domain': u'${falcon.app.type}', + u'*.log.cleanup.frequency.days.retention': u'days(7)', + u'*.log.cleanup.frequency.hours.retention': u'minutes(1)', + u'*.log.cleanup.frequency.minutes.retention': u'hours(6)', + u'*.log.cleanup.frequency.months.retention': u'months(3)'}, + ) + self.assertResourceCalled('PropertiesFile', '/usr/hdp/current/falcon-server/conf/startup.properties', + owner = 'falcon', + mode = 0644, + properties = self.getConfig()['configurations']['falcon-startup.properties'], + ) + self.assertResourceCalled('Directory', '/hadoop/falcon/data/lineage/graphdb', + owner = 'falcon', + recursive = True, + group = 'hadoop', + mode = 0775, + cd_access = 'a', + ) + self.assertResourceCalled('Directory', '/hadoop/falcon/data/lineage', + owner = 'falcon', + recursive = True, + group = 'hadoop', + mode = 0775, + cd_access = 'a', + ) + self.assertResourceCalled('Directory', '/hadoop/falcon/store', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('HdfsResource', '/apps/falcon', + security_enabled = False, + hadoop_bin_dir = '/usr/hdp/current/hadoop-client/bin', + keytab = UnknownConfigurationMock(), + default_fs = 'hdfs://c6401.ambari.apache.org:8020', + hdfs_site = self.getConfig()['configurations']['hdfs-site'], + kinit_path_local = '/usr/bin/kinit', + principal_name = UnknownConfigurationMock(), + user = 'hdfs', + owner = 'falcon', + hadoop_conf_dir = '/usr/hdp/current/hadoop-client/conf', + type = 'directory', + action = ['create_on_execute'], + mode = 0777, + ) + self.assertResourceCalled('Directory', '/hadoop/falcon/store', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('HdfsResource', '/apps/data-mirroring', + security_enabled = False, + hadoop_bin_dir = '/usr/hdp/current/hadoop-client/bin', + keytab = UnknownConfigurationMock(), + source = '/usr/hdp/current/falcon-server/data-mirroring', + default_fs = 'hdfs://c6401.ambari.apache.org:8020', + user = 'hdfs', + hdfs_site = self.getConfig()['configurations']['hdfs-site'], + kinit_path_local = '/usr/bin/kinit', + principal_name = UnknownConfigurationMock(), + recursive_chmod = True, + recursive_chown = True, + owner = 'falcon', + group = 'users', + hadoop_conf_dir = '/usr/hdp/current/hadoop-client/conf', + type = 'directory', + action = ['create_on_execute'], + mode = 0770, + ) + self.assertResourceCalled('HdfsResource', None, + security_enabled = False, + hadoop_bin_dir = '/usr/hdp/current/hadoop-client/bin', + keytab = UnknownConfigurationMock(), + default_fs = 'hdfs://c6401.ambari.apache.org:8020', + hdfs_site = self.getConfig()['configurations']['hdfs-site'], + kinit_path_local = '/usr/bin/kinit', + principal_name = UnknownConfigurationMock(), + user = 'hdfs', + action = ['execute'], + hadoop_conf_dir = '/usr/hdp/current/hadoop-client/conf', + ) + self.assertResourceCalled('Directory', '/hadoop/falcon', + owner = 'falcon', + recursive = True, + cd_access = 'a', + ) + self.assertResourceCalled('Directory', '/hadoop/falcon/embeddedmq', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('Directory', '/hadoop/falcon/embeddedmq/data', + owner = 'falcon', + recursive = True, + ) + self.assertResourceCalled('Execute', '/usr/hdp/current/falcon-server/bin/falcon-start -port 15000', + environment = {'HADOOP_HOME': '/usr/hdp/current/hadoop-client'}, + path = ['/usr/hdp/current/hadoop-client/bin'], + user = 'falcon', + ) + self.assertNoMoreResources() # 4 calls to tarfile.open (2 directories * read + write) self.assertTrue(tarfile_open_mock.called) - self.assertEqual(tarfile_open_mock.call_count,4) + self.assertEqual(tarfile_open_mock.call_count,2) # check the call args for creation of the tarfile call_args = tarfile_open_mock.call_args_list[0] @@ -219,7 +368,6 @@ class TestFalconServer(RMFTestCase): call_kwargs = call_args[1] self.assertTrue("falcon-upgrade-backup/falcon-conf-backup.tar" in call_argument_tarfile) - self.assertEquals(True, call_kwargs["dereference"]) @patch("resource_management.libraries.functions.security_commons.build_expectations") @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem") http://git-wip-us.apache.org/repos/asf/ambari/blob/6ea0b83c/ambari-server/src/test/python/stacks/2.2/KNOX/test_knox_gateway.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.2/KNOX/test_knox_gateway.py b/ambari-server/src/test/python/stacks/2.2/KNOX/test_knox_gateway.py index 0c4b292..5ca5251 100644 --- a/ambari-server/src/test/python/stacks/2.2/KNOX/test_knox_gateway.py +++ b/ambari-server/src/test/python/stacks/2.2/KNOX/test_knox_gateway.py @@ -18,31 +18,13 @@ See the License for the specific language governing permissions and limitations under the License. ''' import json +import tempfile from resource_management import * from stacks.utils.RMFTestCase import * from mock.mock import patch from mock.mock import MagicMock - -class TarfileFake: - """ - Dummy class to mock the calls to tarfile module. - """ - def __init__(self): - self.extractall_count = 0 - self.add_count = 0 - self.close_count = 0 - - def extractall(self, path=".", members=None): - self.extractall_count += 1 - - def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): - self.add_count += 1 - - def close(self): - self.close_count += 1 - - +@patch.object(tempfile, "gettempdir", new=MagicMock(return_value="/tmp")) @patch("platform.linux_distribution", new = MagicMock(return_value="Linux")) class TestKnoxGateway(RMFTestCase): COMMON_SERVICES_PACKAGE_DIR = "KNOX/0.5.0.2.2/package" @@ -238,9 +220,8 @@ class TestKnoxGateway(RMFTestCase): ) put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"}) - @patch("tarfile.open") @patch("os.path.isdir") - def test_pre_rolling_restart(self, isdir_mock, tarfile_open_mock): + def test_pre_rolling_restart(self, isdir_mock): isdir_mock.return_value = True config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/knox_upgrade.json" with open(config_file, "r") as f: @@ -255,16 +236,28 @@ class TestKnoxGateway(RMFTestCase): hdp_stack_version = self.STACK_VERSION, target = RMFTestCase.TARGET_COMMON_SERVICES) - self.assertTrue(tarfile_open_mock.called) - - self.assertResourceCalled("Execute", ('hdp-select', 'set', 'knox-server', version), sudo=True) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/knox-upgrade-backup/knox-conf-backup.tar', + '/usr/hdp/current/knox-server/conf/'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/knox-upgrade-backup/knox-data-backup.tar', + '/var/lib/knox/data'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('hdp-select', 'set', 'knox-server', '2.2.1.0-3242'), + sudo = True, + ) + self.assertNoMoreResources() @patch("os.remove") @patch("os.path.exists") - @patch("tarfile.open") @patch("os.path.isdir") @patch("resource_management.core.shell.call") - def test_pre_rolling_restart_23(self, call_mock, isdir_mock, tarfile_open_mock, path_exists_mock, remove_mock): + def test_pre_rolling_restart_23(self, call_mock, isdir_mock, path_exists_mock, remove_mock): isdir_mock.return_value = True config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/knox_upgrade.json" with open(config_file, "r") as f: @@ -273,8 +266,6 @@ class TestKnoxGateway(RMFTestCase): json_content['commandParams']['version'] = version path_exists_mock.return_value = True - knox_conf_tarfile = TarfileFake() - tarfile_open_mock.return_value = knox_conf_tarfile mocks_dict = {} self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/knox_gateway.py", @@ -286,9 +277,37 @@ class TestKnoxGateway(RMFTestCase): call_mocks = [(0, None), (0, None)], mocks_dict = mocks_dict) - self.assertTrue(tarfile_open_mock.called) - - self.assertResourceCalled("Execute", ('hdp-select', 'set', 'knox-server', version), sudo=True) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/knox-upgrade-backup/knox-conf-backup.tar', + '/usr/hdp/current/knox-server/conf/'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('tar', + '-zcvhf', + '/tmp/knox-upgrade-backup/knox-data-backup.tar', + '/var/lib/knox/data'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('hdp-select', 'set', 'knox-server', '2.3.0.0-1234'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('cp', + '/tmp/knox-upgrade-backup/knox-conf-backup.tar', + '/usr/hdp/current/knox-server/conf/knox-conf-backup.tar'), + sudo = True, + ) + self.assertResourceCalled('Execute', ('tar', + '-xvf', + '/tmp/knox-upgrade-backup/knox-conf-backup.tar', + '-C', + '/usr/hdp/current/knox-server/conf/'), + sudo = True, + ) + self.assertResourceCalled('File', '/usr/hdp/current/knox-server/conf/knox-conf-backup.tar', + action = ['delete'], + ) + self.assertNoMoreResources() self.assertEquals(1, mocks_dict['call'].call_count) self.assertEquals(1, mocks_dict['checked_call'].call_count) @@ -299,8 +318,6 @@ class TestKnoxGateway(RMFTestCase): ('conf-select', 'create-conf-dir', '--package', 'knox', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'), mocks_dict['call'].call_args_list[0][0][0]) - self.assertTrue(2, knox_conf_tarfile.close_count) - @patch("os.path.islink") @patch("os.path.realpath") @patch("os.unlink")