Path: blob/develop/tests/unit/customizations/emr/test_config.py
1569 views
from awscli.testutils import mock1from awscli.customizations.emr.createcluster import CreateCluster2from awscli.customizations.emr.exceptions import InvalidBooleanConfigError3from awscli.customizations.emr.ssh import Get4from awscli.customizations.emr.ssh import Put5from awscli.customizations.emr.ssh import SSH6from awscli.customizations.emr.ssh import Socks7from awscli.testutils import BaseAWSHelpOutputTest8from tests.unit.customizations.emr import EMRBaseAWSCommandParamsTest as \9BaseAWSCommandParamsTest101112INSTANCE_GROUPS_ARG = (13'InstanceGroupType=MASTER,Name=MASTER,'14'InstanceCount=1,InstanceType=m1.large ')1516CREATE_CLUSTER_CMD = (17"emr create-cluster --ami-version 3.1.0 --instance-groups %s" %18INSTANCE_GROUPS_ARG)1920DEFAULT_CONFIGS = {21'service_role': 'my_default_emr_role',22'instance_profile': 'my_default_ec2_role',23'log_uri': 's3://my_default_logs',24'enable_debugging': 'True',25'key_name': 'my_default_key',26'key_pair_file': '/home/my_default_key_pair.pem'27}2829DEBUG_FALSE_CONFIGS = {30'enable_debugging': 'False'31}3233BAD_BOOLEAN_VALUE_CONFIGS = {34'enable_debugging': 'False1'35}3637BAD_CONFIGS = {38'service_role1': 'my_default_emr_role',39'instance_profiile': 'my_default_ec2_role',40'log_uri_': 's3://my_default_logs',41'enable_debugging*': 'True',42'keyname': 'my_default_key',43'key_pairrr_file': '/home/my_default_key_pair.pem'44}4546TEST_CLUSTER_ID = "j-227H3PFKLBOBP"47TEST_SRC_PATH = "/home/my_src"4849SSH_CMD = ('emr ssh --cluster-id %s' % TEST_CLUSTER_ID)50SOCKS_CMD = ('emr socks --cluster-id %s' % TEST_CLUSTER_ID)51GET_CMD = ('emr get --cluster-id %s --src %s' % (TEST_CLUSTER_ID,52TEST_SRC_PATH))53PUT_CMD = ('emr put --cluster-id %s --src %s' % (TEST_CLUSTER_ID,54TEST_SRC_PATH))5556CREATE_DEFAULT_ROLES_CMD = 'emr create-default-roles'575859class TestCreateCluster(BaseAWSCommandParamsTest):6061@mock.patch.object(CreateCluster, '_run_main_command')62def test_with_configs(self, mock_run_main_command):63self.set_configs(DEFAULT_CONFIGS)64self._run_cmd_w_mock(mock_run_main_command, CREATE_CLUSTER_CMD)65parsed_args = mock_run_main_command.call_args[0][0]66self._assert_args_for_default_configs(parsed_args)6768@mock.patch.object(CreateCluster, '_run_main_command')69def test_with_configs_and_other_ec2_attributes(self,70mock_run_main_command):71self.set_configs(DEFAULT_CONFIGS)72cmd = CREATE_CLUSTER_CMD \73+ ' --ec2-attributes AvailabilityZone=us-east-1e'74self._run_cmd_w_mock(mock_run_main_command, cmd)75parsed_args = mock_run_main_command.call_args[0][0]76self._assert_args_for_default_configs(parsed_args)7778@mock.patch.object(CreateCluster, '_run_main_command')79def test_enable_debugging_false(self, mock_run_main_command):80self.set_configs(DEBUG_FALSE_CONFIGS)81self._run_cmd_w_mock(mock_run_main_command, CREATE_CLUSTER_CMD)82parsed_args = mock_run_main_command.call_args[0][0]83self._assert_enable_debugging(parsed_args, False)8485@mock.patch.object(CreateCluster, '_run_main_command')86def test_with_bad_configs(self, mock_run_main_command):87self.set_configs(BAD_CONFIGS)88self._run_cmd_w_mock(mock_run_main_command, CREATE_CLUSTER_CMD)89parsed_args = mock_run_main_command.call_args[0][0]90self.assertFalse(getattr(parsed_args, 'service_role', None))91self.assertFalse(getattr(parsed_args, 'log_uri', None))92self.assertFalse(parsed_args.enable_debugging)93self.assertFalse(parsed_args.no_enable_debugging)94self.assertFalse(getattr(parsed_args, 'ec2-attributes', None))9596def test_with_bad_boolean_value(self):97self.set_configs(BAD_BOOLEAN_VALUE_CONFIGS)98cmd = CREATE_CLUSTER_CMD99expect_error_msg = ("\n%s\n" % InvalidBooleanConfigError.fmt.format(100config_value='False1', config_key='enable_debugging',101profile_var_name='default'))102result = self.run_cmd(cmd, 255)103self.assertEqual(expect_error_msg, result[1])104105@mock.patch.object(CreateCluster, '_run_main_command')106def test_ignore_role_configs_when_use_default_roles(self,107mock_run_main_command):108self.set_configs(DEFAULT_CONFIGS)109cmd = CREATE_CLUSTER_CMD + '--use-default-roles'110self._run_cmd_w_mock(mock_run_main_command, cmd)111parsed_args = mock_run_main_command.call_args[0][0]112self._assert_enable_debugging(parsed_args, True)113self._assert_log_uri(parsed_args, 's3://my_default_logs')114self._assert_ec2_attributes(parsed_args, 'my_default_key')115116@mock.patch.object(CreateCluster, '_run_main_command')117def test_with_configs_and_overriding_options(self, mock_run_main_command):118self.set_configs(DEFAULT_CONFIGS)119cmd = CREATE_CLUSTER_CMD + \120' --service-role my_emr_role --log-uri s3://my_logs' \121' --ec2-attributes KeyName=my_key,' \122'InstanceProfile=my_ec2_role --no-enable-debugging'123self._run_cmd_w_mock(mock_run_main_command, cmd)124parsed_args = mock_run_main_command.call_args[0][0]125self._assert_enable_debugging(parsed_args, False)126self._assert_log_uri(parsed_args, 's3://my_logs')127self._assert_service_role(parsed_args, 'my_emr_role')128self._assert_ec2_attributes(parsed_args, 'my_key', 'my_ec2_role')129130@mock.patch.object(CreateCluster, '_run_main_command')131def test_with_configs_and_overriding_ec2_attributes(self,132mock_run_main_command):133self.set_configs(DEFAULT_CONFIGS)134cmd = CREATE_CLUSTER_CMD \135+ ' --ec2-attributes AvailabilityZone=us-east-1e,'\136'KeyName=my_key'137self._run_cmd_w_mock(mock_run_main_command, cmd)138parsed_args = mock_run_main_command.call_args[0][0]139self._assert_enable_debugging(parsed_args, True)140self._assert_log_uri(parsed_args, 's3://my_default_logs')141self._assert_service_role(parsed_args, 'my_default_emr_role')142self._assert_ec2_attributes(143parsed_args, 'my_key', 'my_default_ec2_role')144145def _run_cmd_w_mock(self, mock_run_main_command, cmd, return_value=0):146mock_run_main_command.return_value = return_value147self.run_cmd(cmd, return_value)148149def _assert_args_for_default_configs(self, parsed_args):150self._assert_enable_debugging(parsed_args, True)151self._assert_log_uri(parsed_args, 's3://my_default_logs')152self._assert_service_role(parsed_args, 'my_default_emr_role')153self._assert_ec2_attributes(154parsed_args, 'my_default_key', 'my_default_ec2_role')155156def _assert_enable_debugging(self, parsed_args, value):157if value:158self.assertTrue(parsed_args.enable_debugging)159self.assertFalse(parsed_args.no_enable_debugging)160else:161self.assertFalse(parsed_args.enable_debugging)162self.assertTrue(parsed_args.no_enable_debugging)163164def _assert_ec2_attributes(self, parsed_args, key_name=None,165instance_profile=None):166if key_name:167self.assertEqual(168parsed_args.ec2_attributes['KeyName'], key_name)169if instance_profile:170self.assertEqual(171parsed_args.ec2_attributes['InstanceProfile'],172instance_profile)173174def _assert_log_uri(self, parsed_args, value):175self.assertEqual(parsed_args.log_uri, value)176177def _assert_service_role(self, parsed_args, value):178self.assertEqual(parsed_args.service_role, value)179180181class TestSSHBasedCommands(BaseAWSCommandParamsTest):182183@mock.patch.object(SSH, '_run_main_command')184def test_ssh_with_configs(self, mock_run_main_command):185self._test_cmd_with_configs(mock_run_main_command, SSH_CMD)186187@mock.patch.object(Socks, '_run_main_command')188def test_socks_with_configs(self, mock_run_main_command):189self._test_cmd_with_configs(mock_run_main_command, SOCKS_CMD)190191@mock.patch.object(Get, '_run_main_command')192def test_get_with_configs(self, mock_run_main_command):193self._test_cmd_with_configs(mock_run_main_command, GET_CMD)194195@mock.patch.object(Put, '_run_main_command')196def test_put_with_configs(self, mock_run_main_command):197self._test_cmd_with_configs(mock_run_main_command, PUT_CMD)198199@mock.patch.object(SSH, '_run_main_command')200def test_ssh_with_configs_and_overriding_key(self, mock_run_main_command):201cmd = SSH_CMD + " --key-pair-file /home/my_key_pair.pem"202self._test_cmd_with_configs(mock_run_main_command, cmd,203'/home/my_key_pair.pem')204205def _test_cmd_with_configs(self, mock_run_main_command, cmd,206key_pair_file_to_assert=''207'/home/my_default_key_pair.pem'):208self.set_configs(DEFAULT_CONFIGS)209mock_run_main_command.return_value = 0210self.run_cmd(cmd, 0)211call_args = mock_run_main_command.call_args212self.assertEqual(213call_args[0][0].key_pair_file, key_pair_file_to_assert)214215216class TestHelpOutput(BaseAWSHelpOutputTest):217218def test_not_override_required_options(self):219scoped_config = self.session.get_scoped_config()220scoped_config['emr'] = DEFAULT_CONFIGS221self.driver.main(['emr', 'ssh', 'help'])222self.assert_contains('--key-pair-file <value>')223self.assert_not_contains('[--key-pair-file <value>]')224225226class TestCreateDefaultRoles(BaseAWSCommandParamsTest):227228def test_roles_updated_if_not_present(self):229self.run_cmd(CREATE_DEFAULT_ROLES_CMD, expected_rc=0)230231call_args_list = self.mock_update_config.call_args_list232233keys = [x[0][0] for x in call_args_list]234self.assertTrue('instance_profile' in keys)235self.assertTrue('service_role' in keys)236237def test_roles_not_updated_if_present(self):238self.set_configs(DEFAULT_CONFIGS)239self.run_cmd(CREATE_DEFAULT_ROLES_CMD, expected_rc=0)240241call_args_list = self.mock_update_config.call_args_list242243self.assertFalse(call_args_list)244245if __name__ == "__main__":246unittest.main()247248249