Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aws
GitHub Repository: aws/aws-cli
Path: blob/develop/tests/functional/configure/test_configure.py
1567 views
1
# Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License"). You
4
# may not use this file except in compliance with the License. A copy of
5
# the License is located at
6
#
7
# http://aws.amazon.com/apache2.0/
8
#
9
# or in the "license" file accompanying this file. This file is
10
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
# ANY KIND, either express or implied. See the License for the specific
12
# language governing permissions and limitations under the License.
13
from awscli.testutils import (
14
mock,
15
unittest,
16
BaseAWSCommandParamsTest,
17
create_clidriver,
18
FileCreator,
19
)
20
from awscli.customizations.configure.configure import ConfigureCommand
21
22
23
class TestConfigureCommand(BaseAWSCommandParamsTest):
24
def setUp(self):
25
super().setUp()
26
self.files = FileCreator()
27
self.config_filename = self.files.full_path("configure")
28
self.environ["AWS_CONFIG_FILE"] = self.config_filename
29
self.environ["AWS_SHARED_CREDENTIALS_FILE"] = "asdf-does-not-exist"
30
31
def tearDown(self):
32
super().tearDown()
33
self.files.remove_all()
34
35
def set_config_file_contents(self, contents):
36
self.files.create_file(self.config_filename, contents)
37
# Reset the session to pick up the new config file.
38
self.driver = create_clidriver()
39
40
def get_config_file_contents(self):
41
with open(self.config_filename, "r") as f:
42
return f.read()
43
44
def test_list_command(self):
45
self.set_config_file_contents(
46
"\n"
47
"[default]\n"
48
"aws_access_key_id=12345\n"
49
"aws_secret_access_key=12345\n"
50
"region=us-west-2\n"
51
)
52
self.environ.pop("AWS_DEFAULT_REGION", None)
53
self.environ.pop("AWS_ACCESS_KEY_ID", None)
54
self.environ.pop("AWS_SECRET_ACCESS_KEY", None)
55
stdout, _, _ = self.run_cmd("configure list")
56
self.assertRegex(stdout, r"access_key.+config-file")
57
self.assertRegex(stdout, r"secret_key.+config-file")
58
self.assertRegex(stdout, r"region\s+us-west-2\s+config-file")
59
60
def test_get_command(self):
61
self.driver = create_clidriver()
62
self.set_config_file_contents(
63
"\n"
64
"[default]\n"
65
"aws_access_key_id=access_key\n"
66
"aws_secret_access_key=secret_key\n"
67
"region=us-west-2\n"
68
)
69
stdout, _, _ = self.run_cmd("configure get aws_access_key_id")
70
self.assertEqual(stdout.strip(), "access_key")
71
72
def test_get_command_with_profile_set(self):
73
self.set_config_file_contents(
74
"\n"
75
"[default]\n"
76
"aws_access_key_id=default_access_key\n"
77
"\n"
78
"[profile testing]\n"
79
"aws_access_key_id=testing_access_key\n"
80
)
81
stdout, _, _ = self.run_cmd(
82
"configure get aws_access_key_id --profile testing",
83
)
84
self.assertEqual(stdout.strip(), "testing_access_key")
85
86
def test_get_with_fq_name(self):
87
# test get configs with fully qualified name.
88
self.set_config_file_contents(
89
"\n"
90
"[default]\n"
91
"aws_access_key_id=default_access_key\n"
92
"\n"
93
"[profile testing]\n"
94
"aws_access_key_id=testing_access_key\n"
95
)
96
stdout, _, _ = self.run_cmd(
97
"configure get default.aws_access_key_id --profile testing",
98
)
99
self.assertEqual(stdout.strip(), "default_access_key")
100
101
def test_get_with_fq_profile_name(self):
102
self.set_config_file_contents(
103
"\n"
104
"[default]\n"
105
"aws_access_key_id=default_access_key\n"
106
"\n"
107
"[profile testing]\n"
108
"aws_access_key_id=testing_access_key\n"
109
)
110
stdout, _, _ = self.run_cmd(
111
"configure get profile.testing.aws_access_key_id "
112
"--profile default",
113
)
114
self.assertEqual(stdout.strip(), "testing_access_key")
115
116
def test_get_fq_with_quoted_profile_name(self):
117
self.set_config_file_contents(
118
"\n"
119
"[default]\n"
120
"aws_access_key_id=default_access_key\n"
121
"\n"
122
'[profile "testing"]\n'
123
"aws_access_key_id=testing_access_key\n"
124
)
125
stdout, _, _ = self.run_cmd(
126
"configure get profile.testing.aws_access_key_id "
127
"--profile default",
128
)
129
self.assertEqual(stdout.strip(), "testing_access_key")
130
131
def test_get_fq_for_non_profile_configs(self):
132
self.set_config_file_contents(
133
"\n"
134
"[default]\n"
135
"aws_access_key_id=default_access_key\n"
136
"\n"
137
"[profile testing]\n"
138
"aws_access_key_id=testing_access_key\n"
139
"[preview]\n"
140
"emr=true"
141
)
142
stdout, _, _ = self.run_cmd(
143
"configure get preview.emr --profile default",
144
)
145
self.assertEqual(stdout.strip(), "true")
146
147
def test_set_with_config_file_no_exist(self):
148
self.run_cmd("configure set region us-west-1")
149
self.assertEqual(
150
"[default]\n"
151
"region = us-west-1\n",
152
self.get_config_file_contents()
153
)
154
155
def test_set_with_a_url(self):
156
self.run_cmd(
157
"configure set endpoint http://www.example.com",
158
)
159
self.assertEqual(
160
"[default]\n"
161
"endpoint = http://www.example.com\n",
162
self.get_config_file_contents(),
163
)
164
165
def test_set_with_empty_config_file(self):
166
with open(self.config_filename, "w"):
167
pass
168
169
self.run_cmd("configure set region us-west-1")
170
self.assertEqual(
171
"[default]\n"
172
"region = us-west-1\n",
173
self.get_config_file_contents()
174
)
175
176
def test_set_with_updating_value(self):
177
self.set_config_file_contents(
178
"[default]\n"
179
"region = us-west-2\n"
180
)
181
self.run_cmd("configure set region us-west-1")
182
self.assertEqual(
183
"[default]\n"
184
"region = us-west-1\n",
185
self.get_config_file_contents()
186
)
187
188
def test_set_with_profile_spaces(self):
189
self.run_cmd(
190
[
191
"configure",
192
"set",
193
"region",
194
"us-west-1",
195
"--profile",
196
"test with spaces",
197
]
198
)
199
self.assertEqual(
200
"[profile 'test with spaces']\n"
201
"region = us-west-1\n",
202
self.get_config_file_contents(),
203
)
204
205
def test_set_with_profile_unknown_nested_key(self):
206
self.run_cmd(
207
[
208
"configure",
209
"set",
210
"un.known",
211
"us-west-1",
212
"--profile",
213
"space test",
214
]
215
)
216
self.assertEqual(
217
"[profile 'space test']\n"
218
"un =\n"
219
" known = us-west-1\n",
220
self.get_config_file_contents(),
221
)
222
223
def test_set_with_profile_spaces_scoped(self):
224
self.run_cmd(
225
[
226
"configure",
227
"set",
228
"profile.test with spaces.region",
229
"us-west-1",
230
]
231
)
232
self.assertEqual(
233
"[profile 'test with spaces']\n"
234
"region = us-west-1\n",
235
self.get_config_file_contents(),
236
)
237
238
def test_set_with_profile(self):
239
self.run_cmd(
240
"configure set region us-west-1 --profile testing",
241
)
242
self.assertEqual(
243
"[profile testing]\n"
244
"region = us-west-1\n",
245
self.get_config_file_contents(),
246
)
247
248
def test_set_with_fq_single_dot(self):
249
self.run_cmd("configure set preview.cloudsearch true")
250
self.assertEqual(
251
"[preview]\n"
252
"cloudsearch = true\n",
253
self.get_config_file_contents()
254
)
255
256
def test_set_with_fq_double_dot(self):
257
self.run_cmd(
258
"configure set profile.testing.region us-west-2",
259
)
260
self.assertEqual(
261
"[profile testing]\n"
262
"region = us-west-2\n",
263
self.get_config_file_contents(),
264
)
265
266
def test_set_with_commented_out_field(self):
267
self.set_config_file_contents(
268
"#[preview]\n"
269
";cloudsearch = true\n"
270
)
271
self.run_cmd("configure set preview.cloudsearch true")
272
self.assertEqual(
273
"#[preview]\n"
274
";cloudsearch = true\n"
275
"[preview]\n"
276
"cloudsearch = true\n",
277
self.get_config_file_contents(),
278
)
279
280
def test_set_with_triple_nesting(self):
281
self.run_cmd(
282
"configure set default.s3.signature_version s3v4",
283
)
284
self.assertEqual(
285
"[default]\n"
286
"s3 =\n"
287
" signature_version = s3v4\n",
288
self.get_config_file_contents(),
289
)
290
291
def test_set_with_existing_config(self):
292
self.set_config_file_contents(
293
"[default]\n"
294
"region = us-west-2\n"
295
"ec2 =\n"
296
" signature_version = v4\n"
297
)
298
self.run_cmd(
299
"configure set default.s3.signature_version s3v4",
300
)
301
self.assertEqual(
302
"[default]\n"
303
"region = us-west-2\n"
304
"ec2 =\n"
305
" signature_version = v4\n"
306
"s3 =\n"
307
" signature_version = s3v4\n",
308
self.get_config_file_contents(),
309
)
310
311
def test_set_with_new_profile(self):
312
self.set_config_file_contents(
313
"[default]\n"
314
"s3 =\n"
315
" signature_version = s3v4\n"
316
)
317
self.run_cmd(
318
"configure set profile.dev.s3.signature_version s3v4",
319
)
320
self.assertEqual(
321
"[default]\n"
322
"s3 =\n"
323
" signature_version = s3v4\n"
324
"[profile dev]\n"
325
"s3 =\n"
326
" signature_version = s3v4\n",
327
self.get_config_file_contents(),
328
)
329
330
def test_override_existing_value(self):
331
self.set_config_file_contents(
332
"[default]\n" "s3 =\n"
333
" signature_version = v4\n"
334
)
335
self.run_cmd(
336
"configure set default.s3.signature_version NEWVALUE",
337
)
338
self.assertEqual(
339
"[default]\n"
340
"s3 =\n"
341
" signature_version = NEWVALUE\n",
342
self.get_config_file_contents(),
343
)
344
345
def test_get_nested_attribute(self):
346
self.set_config_file_contents(
347
"[default]\n"
348
"s3 =\n"
349
" signature_version = v4\n"
350
)
351
stdout, _, _ = self.run_cmd(
352
"configure get default.s3.signature_version"
353
)
354
355
self.assertEqual(stdout.strip(), "v4")
356
stdout, _, _ = self.run_cmd(
357
"configure get default.bad.doesnotexist", expected_rc=1
358
)
359
self.assertEqual(stdout, "")
360
361
def test_can_handle_empty_section(self):
362
self.set_config_file_contents("[default]\n")
363
self.run_cmd(
364
"configure set preview.cloudfront true",
365
)
366
self.run_cmd(
367
"configure set region us-west-2",
368
)
369
self.assertEqual(
370
"[default]\n"
371
"region = us-west-2\n"
372
"[preview]\n"
373
"cloudfront = true\n",
374
self.get_config_file_contents(),
375
)
376
377
378
class TestConfigureHasArgTable(unittest.TestCase):
379
def test_configure_command_has_arg_table(self):
380
m = mock.Mock()
381
command = ConfigureCommand(m)
382
self.assertEqual(command.arg_table, {})
383
384