def test_unlink_configs_missing_backup(self, exists_mock, isdir_mock): # required for the test to run since the Execute calls need this from resource_management.core.environment import Environment env = Environment(test_mode=True) with env: # Case: missing backup directory isdir_mock.return_value = False ru_execute = UpgradeSetAll() self.assertEqual(len(env.resource_list), 0) # Case: missing symlink isdir_mock.reset_mock() isdir_mock.return_value = True exists_mock.return_value = False ru_execute._unlink_config("/fake/config") self.assertEqual(len(env.resource_list), 2) # Case: missing symlink isdir_mock.reset_mock() isdir_mock.return_value = True exists_mock.reset_mock() exists_mock.return_value = True ru_execute._unlink_config("/fake/config") self.assertEqual(pprint.pformat(env.resource_list), "[Directory['/fake/config'],\n " "Execute[('mv', '/fake/conf.backup', '/fake/config')],\n " "Directory['/fake/config'],\n " "Execute[('mv', '/fake/conf.backup', '/fake/config')]]")
def test_execution_23(self, link_mock, family_mock, get_config_mock, call_mock): # Mock the config objects json_file_path = os.path.join( self.get_custom_actions_dir(), "ru_execute_tasks_namenode_prepare.json") self.assertTrue(os.path.isfile(json_file_path)) with open(json_file_path, "r") as json_file: json_payload = json.load(json_file) json_payload['hostLevelParams']['stack_version'] = "2.3" json_payload['commandParams']['version'] = "2.3.0.0-1234" config_dict = ConfigDictionary(json_payload) family_mock.return_value = True get_config_mock.return_value = config_dict call_mock.side_effect = fake_call # echo the command # Ensure that the json file was actually read. stack_name = default("/hostLevelParams/stack_name", None) stack_version = default("/hostLevelParams/stack_version", None) service_package_folder = default('/roleParams/service_package_folder', None) self.assertEqual(stack_name, "HDP") self.assertEqual(stack_version, 2.3) self.assertEqual(service_package_folder, "common-services/HDFS/2.1.0.2.0/package") # Begin the test ru_execute = UpgradeSetAll() ru_execute.actionexecute(None) self.assertTrue(link_mock.called) call_mock.assert_called_with( ('ambari-python-wrap', '/usr/bin/hdp-select', 'set', 'all', '2.3.0.0-1234'), sudo=True)
def test_downgrade_unlink_configs(self, family_mock, get_config_mock, call_mock, isdir_mock, islink_mock): """ Tests downgrading from 2.3 to 2.2 to ensure that conf symlinks are removed and the backup directories restored. """ isdir_mock.return_value = True # required for the test to run since the Execute calls need this from resource_management.core.environment import Environment env = Environment(test_mode=True) with env: # Mock the config objects json_file_path = os.path.join(self.get_custom_actions_dir(), "ru_execute_tasks_namenode_prepare.json") self.assertTrue(os.path.isfile(json_file_path)) with open(json_file_path, "r") as json_file: json_payload = json.load(json_file) # alter JSON for a downgrade from 2.3 to 2.2 json_payload['commandParams']['version'] = "2.2.0.0-1234" json_payload['commandParams']['downgrade_from_version'] = "2.3.0.0-1234" json_payload['commandParams']['original_stack'] = "HDP-2.2" json_payload['commandParams']['target_stack'] = "HDP-2.3" json_payload['commandParams']['upgrade_direction'] = "downgrade" json_payload['hostLevelParams']['stack_version'] = "2.2" config_dict = ConfigDictionary(json_payload) family_mock.return_value = True get_config_mock.return_value = config_dict call_mock.side_effect = fake_call # echo the command # test the function ru_execute = UpgradeSetAll() ru_execute.unlink_all_configs(None) # verify that os.path.islink was called for each conf self.assertTrue(islink_mock.called) for key, value in conf_select.get_package_dirs().iteritems(): for directory_mapping in value: original_config_directory = directory_mapping['conf_dir'] is_link_called = False for call in islink_mock.call_args_list: call_tuple = call[0] if original_config_directory in call_tuple: is_link_called = True if not is_link_called: self.fail("os.path.islink({0}) was never called".format(original_config_directory)) # alter JSON for a downgrade from 2.3 to 2.3 with open(json_file_path, "r") as json_file: json_payload = json.load(json_file) json_payload['commandParams']['version'] = "2.3.0.0-1234" json_payload['commandParams']['downgrade_from_version'] = "2.3.0.0-5678" json_payload['commandParams']['original_stack'] = "HDP-2.3" json_payload['commandParams']['target_stack'] = "HDP-2.3" json_payload['commandParams']['upgrade_direction'] = "downgrade" json_payload['hostLevelParams']['stack_version'] = "2.3" # reset config config_dict = ConfigDictionary(json_payload) family_mock.return_value = True get_config_mock.return_value = config_dict # reset mock islink_mock.reset_mock() # test the function ru_execute = UpgradeSetAll() ru_execute.unlink_all_configs(None) # ensure it wasn't called this time self.assertFalse(islink_mock.called) with open(json_file_path, "r") as json_file: json_payload = json.load(json_file) # alter JSON for a downgrade from 2.2 to 2.2 json_payload['commandParams']['version'] = "2.2.0.0-1234" json_payload['commandParams']['downgrade_from_version'] = "2.2.0.0-5678" json_payload['commandParams']['original_stack'] = "HDP-2.2" json_payload['commandParams']['target_stack'] = "HDP-2.2" json_payload['commandParams']['upgrade_direction'] = "downgrade" json_payload['hostLevelParams']['stack_version'] = "2.2" # reset config config_dict = ConfigDictionary(json_payload) family_mock.return_value = True get_config_mock.return_value = config_dict # reset mock islink_mock.reset_mock() # test the function ru_execute = UpgradeSetAll() ru_execute.unlink_all_configs(None) # ensure it wasn't called this time self.assertFalse(islink_mock.called)