def test_upgrade_stack_mpack(self, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock, uninstall_mpack_mock, add_replay_log_mock, get_ambari_properties_mock, get_ambari_version_mock, create_symlink_mock, os_mkdir_mock, shutil_move_mock, os_path_exists_mock): options = self._create_empty_options_mock() options.mpack_path = "/path/to/mystack-1.0.0.1.tar.gz" download_mpack_mock.return_value = "/tmp/mystack-1.0.0.1.tar.gz" expand_mpack_mock.return_value = "mpacks/mystack-ambari-mpack-1.0.0.1" get_ambari_version_mock.return_value = "2.4.0.0" """ os_path_exists_calls = [call('/tmp/mystack-1.0.0.1.tar.gz'), call('mpacks/mystack-ambari-mpack-1.0.0.1/mpack.json'), call('/var/lib/ambari-server/resources/stacks'), call('/var/lib/ambari-server/resources/common-services'), call(mpacks_directory), call(mpacks_directory + '/cache'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1'), call('/var/lib/ambari-server/resources/common-services/SERVICEA'), call('/var/lib/ambari-server/resources/common-services/SERVICEB'), call('/var/lib/ambari-server/resources/common-services/SERVICEC'), call('/var/lib/ambari-server/resources/stacks/MYSTACK'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1/services'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services')] call('/var/lib/ambari-server/resources/stacks/MYSTACK/3.0'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/3.0/services'), call(mpacks_directory), call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/mpack.json')] """ os_path_exists_mock.side_effect = [ True, True, True, True, True, True, False, True, True, False, True, True, True, True, True, True, True, False, False, True, True, True, True ] get_ambari_properties_mock.return_value = configs shutil_move_mock.return_value = True upgrade_mpack(options) stacks_directory = configs[STACK_LOCATION_KEY] common_services_directory = configs[COMMON_SERVICES_PATH_PROPERTY] mpacks_directory = configs[MPACKS_STAGING_PATH_PROPERTY] mpacks_staging_directory = os.path.join( mpacks_directory, "mystack-ambari-mpack-1.0.0.1") os_mkdir_calls = [ call(os.path.join(common_services_directory, "SERVICEC")), call(os.path.join(stacks_directory, "MYSTACK/3.0")), call(os.path.join(stacks_directory, "MYSTACK/3.0/services")) ] create_symlink_calls = [ call( os.path.join(mpacks_staging_directory, "common-services/SERVICEA"), os.path.join(common_services_directory, "SERVICEA"), "1.0", True), call( os.path.join(mpacks_staging_directory, "common-services/SERVICEA"), os.path.join(common_services_directory, "SERVICEA"), "2.0", True), call( os.path.join(mpacks_staging_directory, "common-services/SERVICEB"), os.path.join(common_services_directory, "SERVICEB"), "1.0.0", True), call( os.path.join(mpacks_staging_directory, "common-services/SERVICEB"), os.path.join(common_services_directory, "SERVICEB"), "2.0.0", True), call( os.path.join(mpacks_staging_directory, "common-services/SERVICEC"), os.path.join(common_services_directory, "SERVICEC"), "1.0.0", True), call( os.path.join(mpacks_staging_directory, "common-services/SERVICEC"), os.path.join(common_services_directory, "SERVICEC"), "2.0.0", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.0"), os.path.join(stacks_directory, "MYSTACK/1.0"), "metainfo.xml", True), call( os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.0/services"), os.path.join(stacks_directory, "MYSTACK/1.0/services"), "SERVICEA", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.1"), os.path.join(stacks_directory, "MYSTACK/1.1"), "metainfo.xml", True), call( os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.1/services"), os.path.join(stacks_directory, "MYSTACK/1.1/services"), "SERVICEA", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/2.0"), os.path.join(stacks_directory, "MYSTACK/2.0"), "metainfo.xml", True), call( os.path.join(mpacks_staging_directory, "stacks/MYSTACK/2.0/services"), os.path.join(stacks_directory, "MYSTACK/2.0/services"), "SERVICEA", True), call( os.path.join(mpacks_staging_directory, "stacks/MYSTACK/2.0/services"), os.path.join(stacks_directory, "MYSTACK/2.0/services"), "SERVICEB", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0"), os.path.join(stacks_directory, "MYSTACK/3.0"), "metainfo.xml", True), call( os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services"), os.path.join(stacks_directory, "MYSTACK/3.0/services"), "SERVICEA", True), call( os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services"), os.path.join(stacks_directory, "MYSTACK/3.0/services"), "SERVICEB", True), call( os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services"), os.path.join(stacks_directory, "MYSTACK/3.0/services"), "SERVICEC", True) ] self.assertFalse(purge_stacks_and_mpacks_mock.called) os_mkdir_mock.assert_has_calls(os_mkdir_calls) create_symlink_mock.assert_has_calls(create_symlink_calls) uninstall_mpack_mock.assert_has_calls( [call("mystack-ambari-mpack", "1.0.0.0")]) self.assertTrue(add_replay_log_mock.called)
def test_upgrade_stack_mpack(self, set_file_permissions_mock, run_os_command_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock, _uninstall_mpack_mock, add_replay_log_mock, get_ambari_properties_mock, get_ambari_version_mock, create_symlink_mock, os_mkdir_mock, shutil_move_mock, os_path_exists_mock, create_symlink_using_path_mock): options = self._create_empty_options_mock() options.mpack_path = "/path/to/mystack-1.0.0.1.tar.gz" download_mpack_mock.side_effect = ["/tmp/mystack-1.0.0.1.tar.gz", "/tmp/mystack-1.0.0.1.tar.gz"] expand_mpack_mock.side_effect = ["mpacks/mystack-ambari-mpack-1.0.0.1", "mpacks/mystack-ambari-mpack-1.0.0.1"] get_ambari_version_mock.return_value = "2.4.0.0" run_os_command_mock.return_value = (0, "", "") mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY] os_path_exists_mock.side_effect = [True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, False, True, True, False, False, True, False, False, False, False, False, True, True, True, True, False, True, True, False, True, True, False, False, False, False, False, True, True, True, True, True, True, True, False, True, False, True, True, True, True, True, True, True] get_ambari_properties_mock.return_value = configs shutil_move_mock.return_value = True upgrade_mpack(options) stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY] common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY] mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY] mpacks_staging_directory = os.path.join(mpacks_directory, "mystack-ambari-mpack-1.0.0.1") resources_directory = configs[serverConfiguration.RESOURCES_DIR_PROPERTY] dashboards_directory = os.path.join(resources_directory, "dashboards") os_path_exists_calls = [call('/tmp/mystack-1.0.0.1.tar.gz'), call('mpacks/mystack-ambari-mpack-1.0.0.1/mpack.json'), call('/var/lib/ambari-server/resources'), call(mpacks_directory), call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/mpack.json'), call('/tmp/mystack-1.0.0.1.tar.gz'), call('mpacks/mystack-ambari-mpack-1.0.0.1/mpack.json'), call('mpacks/mystack-ambari-mpack-1.0.0.1/hooks/before_upgrade.py'), call('/var/lib/ambari-server/resources'), call('/var/lib/ambari-server/resources/stacks'), call('/var/lib/ambari-server/resources/extensions'), call('/var/lib/ambari-server/resources/common-services'), call(mpacks_directory), call(mpacks_directory + '/cache'), call('/var/lib/ambari-server/resources/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1'), call('/var/lib/ambari-server/resources'), call('/var/lib/ambari-server/resources/common-services/SERVICEA'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEA/1.0/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEA/2.0/dashboards'), call('/var/lib/ambari-server/resources/common-services/SERVICEB'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEB/1.0.0/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEB/2.0.0/dashboards'), call('/var/lib/ambari-server/resources/common-services/SERVICEC'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEC/1.0.0/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEC/2.0.0/dashboards'), call('/var/lib/ambari-server/resources'), call('/var/lib/ambari-server/resources/stacks/MYSTACK'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/1.0/services/SERVICEA/dashboards'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1/services'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/1.1/services/SERVICEA/dashboards'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEA/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEB/dashboards'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/3.0'), call('/var/lib/ambari-server/resources/stacks/MYSTACK/3.0/services'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEA/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEB/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEB/dashboards/grafana-dashboards'), call('/var/lib/ambari-server/resources/dashboards/grafana-dashboards/SERVICEB'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEB/dashboards/service-metrics/SERVICEB.txt'), call('/var/lib/ambari-server/resources/dashboards/service-metrics/SERVICEB.txt'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards'), call('/var/lib/ambari-server/resources/dashboards/grafana-dashboards/SERVICEC'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/SERVICEC.txt'), call('/var/lib/ambari-server/resources/dashboards/service-metrics/SERVICEC.txt'), call('/var/lib/ambari-server/resources'), call(mpacks_directory), call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/mpack.json'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/mpack.json'), call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/hooks/after_upgrade.py')] run_os_command_calls = [ call([ "/usr/bin/ambari-python-wrap", "mpacks/mystack-ambari-mpack-1.0.0.1/hooks/before_upgrade.py" ]), call([ "/usr/bin/ambari-python-wrap", mpacks_directory + "/mystack-ambari-mpack-1.0.0.1/hooks/after_upgrade.py" ]) ] os_mkdir_calls = [ call(dashboards_directory), call(os.path.join(dashboards_directory, GRAFANA_DASHBOARDS_DIRNAME)), call(os.path.join(dashboards_directory, SERVICE_METRICS_DIRNAME)), call(os.path.join(common_services_directory, "SERVICEC")), call(os.path.join(stacks_directory, "MYSTACK/3.0")), call(os.path.join(stacks_directory, "MYSTACK/3.0/services")) ] create_symlink_calls = [ call(os.path.join(mpacks_staging_directory, "common-services/SERVICEA"), os.path.join(common_services_directory, "SERVICEA"), "1.0", True), call(os.path.join(mpacks_staging_directory, "common-services/SERVICEA"), os.path.join(common_services_directory, "SERVICEA"), "2.0", True), call(os.path.join(mpacks_staging_directory, "common-services/SERVICEB"), os.path.join(common_services_directory, "SERVICEB"), "1.0.0", True), call(os.path.join(mpacks_staging_directory, "common-services/SERVICEB"), os.path.join(common_services_directory, "SERVICEB"), "2.0.0", True), call(os.path.join(mpacks_staging_directory, "common-services/SERVICEC"), os.path.join(common_services_directory, "SERVICEC"), "1.0.0", True), call(os.path.join(mpacks_staging_directory, "common-services/SERVICEC"), os.path.join(common_services_directory, "SERVICEC"), "2.0.0", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.0"), os.path.join(stacks_directory, "MYSTACK/1.0"), "metainfo.xml", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.0/services"), os.path.join(stacks_directory, "MYSTACK/1.0/services"), "SERVICEA", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.1"), os.path.join(stacks_directory, "MYSTACK/1.1"), "metainfo.xml", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/1.1/services"), os.path.join(stacks_directory, "MYSTACK/1.1/services"), "SERVICEA", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/2.0"), os.path.join(stacks_directory, "MYSTACK/2.0"), "metainfo.xml", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/2.0/services"), os.path.join(stacks_directory, "MYSTACK/2.0/services"), "SERVICEA", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/2.0/services"), os.path.join(stacks_directory, "MYSTACK/2.0/services"), "SERVICEB", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0"), os.path.join(stacks_directory, "MYSTACK/3.0"), "metainfo.xml", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services"), os.path.join(stacks_directory, "MYSTACK/3.0/services"), "SERVICEA", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services"), os.path.join(stacks_directory, "MYSTACK/3.0/services"), "SERVICEB", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services"), os.path.join(stacks_directory, "MYSTACK/3.0/services"), "SERVICEC", True), call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics"), os.path.join(dashboards_directory, "service-metrics"), "SERVICEC.txt", True) ] create_symlink_using_path_calls = [ call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards"), os.path.join(dashboards_directory, "grafana-dashboards/SERVICEC"), True) ] os_path_exists_mock.assert_has_calls(os_path_exists_calls) self.assertFalse(purge_stacks_and_mpacks_mock.called) run_os_command_mock.assert_has_calls(run_os_command_calls) os_mkdir_mock.assert_has_calls(os_mkdir_calls) create_symlink_mock.assert_has_calls(create_symlink_calls) self.assertEqual(18, create_symlink_mock.call_count) create_symlink_using_path_mock.assert_has_calls(create_symlink_using_path_calls) self.assertEqual(1, create_symlink_using_path_mock.call_count) _uninstall_mpack_mock.assert_has_calls([call("mystack-ambari-mpack", "1.0.0.0")]) self.assertTrue(add_replay_log_mock.called)