Path: blob/develop/tests/functional/configure/test_configure.py
1567 views
# Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.1#2# Licensed under the Apache License, Version 2.0 (the "License"). You3# may not use this file except in compliance with the License. A copy of4# the License is located at5#6# http://aws.amazon.com/apache2.0/7#8# or in the "license" file accompanying this file. This file is9# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF10# ANY KIND, either express or implied. See the License for the specific11# language governing permissions and limitations under the License.12from awscli.testutils import (13mock,14unittest,15BaseAWSCommandParamsTest,16create_clidriver,17FileCreator,18)19from awscli.customizations.configure.configure import ConfigureCommand202122class TestConfigureCommand(BaseAWSCommandParamsTest):23def setUp(self):24super().setUp()25self.files = FileCreator()26self.config_filename = self.files.full_path("configure")27self.environ["AWS_CONFIG_FILE"] = self.config_filename28self.environ["AWS_SHARED_CREDENTIALS_FILE"] = "asdf-does-not-exist"2930def tearDown(self):31super().tearDown()32self.files.remove_all()3334def set_config_file_contents(self, contents):35self.files.create_file(self.config_filename, contents)36# Reset the session to pick up the new config file.37self.driver = create_clidriver()3839def get_config_file_contents(self):40with open(self.config_filename, "r") as f:41return f.read()4243def test_list_command(self):44self.set_config_file_contents(45"\n"46"[default]\n"47"aws_access_key_id=12345\n"48"aws_secret_access_key=12345\n"49"region=us-west-2\n"50)51self.environ.pop("AWS_DEFAULT_REGION", None)52self.environ.pop("AWS_ACCESS_KEY_ID", None)53self.environ.pop("AWS_SECRET_ACCESS_KEY", None)54stdout, _, _ = self.run_cmd("configure list")55self.assertRegex(stdout, r"access_key.+config-file")56self.assertRegex(stdout, r"secret_key.+config-file")57self.assertRegex(stdout, r"region\s+us-west-2\s+config-file")5859def test_get_command(self):60self.driver = create_clidriver()61self.set_config_file_contents(62"\n"63"[default]\n"64"aws_access_key_id=access_key\n"65"aws_secret_access_key=secret_key\n"66"region=us-west-2\n"67)68stdout, _, _ = self.run_cmd("configure get aws_access_key_id")69self.assertEqual(stdout.strip(), "access_key")7071def test_get_command_with_profile_set(self):72self.set_config_file_contents(73"\n"74"[default]\n"75"aws_access_key_id=default_access_key\n"76"\n"77"[profile testing]\n"78"aws_access_key_id=testing_access_key\n"79)80stdout, _, _ = self.run_cmd(81"configure get aws_access_key_id --profile testing",82)83self.assertEqual(stdout.strip(), "testing_access_key")8485def test_get_with_fq_name(self):86# test get configs with fully qualified name.87self.set_config_file_contents(88"\n"89"[default]\n"90"aws_access_key_id=default_access_key\n"91"\n"92"[profile testing]\n"93"aws_access_key_id=testing_access_key\n"94)95stdout, _, _ = self.run_cmd(96"configure get default.aws_access_key_id --profile testing",97)98self.assertEqual(stdout.strip(), "default_access_key")99100def test_get_with_fq_profile_name(self):101self.set_config_file_contents(102"\n"103"[default]\n"104"aws_access_key_id=default_access_key\n"105"\n"106"[profile testing]\n"107"aws_access_key_id=testing_access_key\n"108)109stdout, _, _ = self.run_cmd(110"configure get profile.testing.aws_access_key_id "111"--profile default",112)113self.assertEqual(stdout.strip(), "testing_access_key")114115def test_get_fq_with_quoted_profile_name(self):116self.set_config_file_contents(117"\n"118"[default]\n"119"aws_access_key_id=default_access_key\n"120"\n"121'[profile "testing"]\n'122"aws_access_key_id=testing_access_key\n"123)124stdout, _, _ = self.run_cmd(125"configure get profile.testing.aws_access_key_id "126"--profile default",127)128self.assertEqual(stdout.strip(), "testing_access_key")129130def test_get_fq_for_non_profile_configs(self):131self.set_config_file_contents(132"\n"133"[default]\n"134"aws_access_key_id=default_access_key\n"135"\n"136"[profile testing]\n"137"aws_access_key_id=testing_access_key\n"138"[preview]\n"139"emr=true"140)141stdout, _, _ = self.run_cmd(142"configure get preview.emr --profile default",143)144self.assertEqual(stdout.strip(), "true")145146def test_set_with_config_file_no_exist(self):147self.run_cmd("configure set region us-west-1")148self.assertEqual(149"[default]\n"150"region = us-west-1\n",151self.get_config_file_contents()152)153154def test_set_with_a_url(self):155self.run_cmd(156"configure set endpoint http://www.example.com",157)158self.assertEqual(159"[default]\n"160"endpoint = http://www.example.com\n",161self.get_config_file_contents(),162)163164def test_set_with_empty_config_file(self):165with open(self.config_filename, "w"):166pass167168self.run_cmd("configure set region us-west-1")169self.assertEqual(170"[default]\n"171"region = us-west-1\n",172self.get_config_file_contents()173)174175def test_set_with_updating_value(self):176self.set_config_file_contents(177"[default]\n"178"region = us-west-2\n"179)180self.run_cmd("configure set region us-west-1")181self.assertEqual(182"[default]\n"183"region = us-west-1\n",184self.get_config_file_contents()185)186187def test_set_with_profile_spaces(self):188self.run_cmd(189[190"configure",191"set",192"region",193"us-west-1",194"--profile",195"test with spaces",196]197)198self.assertEqual(199"[profile 'test with spaces']\n"200"region = us-west-1\n",201self.get_config_file_contents(),202)203204def test_set_with_profile_unknown_nested_key(self):205self.run_cmd(206[207"configure",208"set",209"un.known",210"us-west-1",211"--profile",212"space test",213]214)215self.assertEqual(216"[profile 'space test']\n"217"un =\n"218" known = us-west-1\n",219self.get_config_file_contents(),220)221222def test_set_with_profile_spaces_scoped(self):223self.run_cmd(224[225"configure",226"set",227"profile.test with spaces.region",228"us-west-1",229]230)231self.assertEqual(232"[profile 'test with spaces']\n"233"region = us-west-1\n",234self.get_config_file_contents(),235)236237def test_set_with_profile(self):238self.run_cmd(239"configure set region us-west-1 --profile testing",240)241self.assertEqual(242"[profile testing]\n"243"region = us-west-1\n",244self.get_config_file_contents(),245)246247def test_set_with_fq_single_dot(self):248self.run_cmd("configure set preview.cloudsearch true")249self.assertEqual(250"[preview]\n"251"cloudsearch = true\n",252self.get_config_file_contents()253)254255def test_set_with_fq_double_dot(self):256self.run_cmd(257"configure set profile.testing.region us-west-2",258)259self.assertEqual(260"[profile testing]\n"261"region = us-west-2\n",262self.get_config_file_contents(),263)264265def test_set_with_commented_out_field(self):266self.set_config_file_contents(267"#[preview]\n"268";cloudsearch = true\n"269)270self.run_cmd("configure set preview.cloudsearch true")271self.assertEqual(272"#[preview]\n"273";cloudsearch = true\n"274"[preview]\n"275"cloudsearch = true\n",276self.get_config_file_contents(),277)278279def test_set_with_triple_nesting(self):280self.run_cmd(281"configure set default.s3.signature_version s3v4",282)283self.assertEqual(284"[default]\n"285"s3 =\n"286" signature_version = s3v4\n",287self.get_config_file_contents(),288)289290def test_set_with_existing_config(self):291self.set_config_file_contents(292"[default]\n"293"region = us-west-2\n"294"ec2 =\n"295" signature_version = v4\n"296)297self.run_cmd(298"configure set default.s3.signature_version s3v4",299)300self.assertEqual(301"[default]\n"302"region = us-west-2\n"303"ec2 =\n"304" signature_version = v4\n"305"s3 =\n"306" signature_version = s3v4\n",307self.get_config_file_contents(),308)309310def test_set_with_new_profile(self):311self.set_config_file_contents(312"[default]\n"313"s3 =\n"314" signature_version = s3v4\n"315)316self.run_cmd(317"configure set profile.dev.s3.signature_version s3v4",318)319self.assertEqual(320"[default]\n"321"s3 =\n"322" signature_version = s3v4\n"323"[profile dev]\n"324"s3 =\n"325" signature_version = s3v4\n",326self.get_config_file_contents(),327)328329def test_override_existing_value(self):330self.set_config_file_contents(331"[default]\n" "s3 =\n"332" signature_version = v4\n"333)334self.run_cmd(335"configure set default.s3.signature_version NEWVALUE",336)337self.assertEqual(338"[default]\n"339"s3 =\n"340" signature_version = NEWVALUE\n",341self.get_config_file_contents(),342)343344def test_get_nested_attribute(self):345self.set_config_file_contents(346"[default]\n"347"s3 =\n"348" signature_version = v4\n"349)350stdout, _, _ = self.run_cmd(351"configure get default.s3.signature_version"352)353354self.assertEqual(stdout.strip(), "v4")355stdout, _, _ = self.run_cmd(356"configure get default.bad.doesnotexist", expected_rc=1357)358self.assertEqual(stdout, "")359360def test_can_handle_empty_section(self):361self.set_config_file_contents("[default]\n")362self.run_cmd(363"configure set preview.cloudfront true",364)365self.run_cmd(366"configure set region us-west-2",367)368self.assertEqual(369"[default]\n"370"region = us-west-2\n"371"[preview]\n"372"cloudfront = true\n",373self.get_config_file_contents(),374)375376377class TestConfigureHasArgTable(unittest.TestCase):378def test_configure_command_has_arg_table(self):379m = mock.Mock()380command = ConfigureCommand(m)381self.assertEqual(command.arg_table, {})382383384