|
| 1 | +import shutil |
1 | 2 | import unittest |
2 | 3 | from unittest.mock import patch |
3 | 4 |
|
4 | 5 | from gimme_aws_creds import errors |
5 | 6 | from gimme_aws_creds.common import RoleSet |
6 | 7 | from gimme_aws_creds.main import GimmeAWSCreds |
| 8 | +from tests.user_interface_mock import MockUserInterface |
7 | 9 |
|
8 | 10 |
|
9 | 11 | class TestMain(unittest.TestCase): |
@@ -312,3 +314,70 @@ def test_get_profile_name_else(self): |
312 | 314 | include_path = True |
313 | 315 | self.assertEqual(creds.get_profile_name(cred_profile, include_path, naming_data, resolve_alias, role), |
314 | 316 | 'foo') |
| 317 | + |
| 318 | + |
| 319 | +class TestCredProfilePrecedence(unittest.TestCase): |
| 320 | + """Tests for --aws-cred-profile CLI flag precedence over env var and config file. |
| 321 | +
|
| 322 | + Expected precedence: CLI flag > env var > config file |
| 323 | + """ |
| 324 | + |
| 325 | + CONFIG_TEMPLATE = """[DEFAULT] |
| 326 | +client_id = test-client |
| 327 | +okta_org_url = https://test.okta.com |
| 328 | +cred_profile = {cred_profile} |
| 329 | +""" |
| 330 | + |
| 331 | + def setUp(self): |
| 332 | + self._temp_dirs = [] |
| 333 | + |
| 334 | + def tearDown(self): |
| 335 | + for d in self._temp_dirs: |
| 336 | + shutil.rmtree(d, ignore_errors=True) |
| 337 | + |
| 338 | + def _build_and_generate(self, argv=None, environ=None, config_cred_profile='file-profile'): |
| 339 | + test_ui = MockUserInterface( |
| 340 | + argv=argv or [], |
| 341 | + environ=environ or {}, |
| 342 | + ) |
| 343 | + self._temp_dirs.append(test_ui.HOME) |
| 344 | + with open(test_ui.HOME + "/.okta_aws_login_config", "w") as f: |
| 345 | + f.write(self.CONFIG_TEMPLATE.format(cred_profile=config_cred_profile)) |
| 346 | + |
| 347 | + creds = GimmeAWSCreds(ui=test_ui) |
| 348 | + creds.generate_config() |
| 349 | + return creds |
| 350 | + |
| 351 | + def test_cli_flag_overrides_config_file(self): |
| 352 | + """--aws-cred-profile should override the cred_profile from config file""" |
| 353 | + creds = self._build_and_generate( |
| 354 | + argv=['gimme-aws-creds', '--aws-cred-profile', 'cli-profile'], |
| 355 | + config_cred_profile='file-profile', |
| 356 | + ) |
| 357 | + self.assertEqual(creds.conf_dict['cred_profile'], 'cli-profile') |
| 358 | + |
| 359 | + def test_cli_flag_overrides_env_var(self): |
| 360 | + """--aws-cred-profile should override GIMME_AWS_CREDS_CRED_PROFILE env var""" |
| 361 | + creds = self._build_and_generate( |
| 362 | + argv=['gimme-aws-creds', '--aws-cred-profile', 'cli-profile'], |
| 363 | + environ={'GIMME_AWS_CREDS_CRED_PROFILE': 'env-profile'}, |
| 364 | + config_cred_profile='file-profile', |
| 365 | + ) |
| 366 | + self.assertEqual(creds.conf_dict['cred_profile'], 'cli-profile') |
| 367 | + |
| 368 | + def test_env_var_overrides_config_file_when_no_cli_flag(self): |
| 369 | + """Without --aws-cred-profile, GIMME_AWS_CREDS_CRED_PROFILE should override config file""" |
| 370 | + creds = self._build_and_generate( |
| 371 | + argv=['gimme-aws-creds'], |
| 372 | + environ={'GIMME_AWS_CREDS_CRED_PROFILE': 'env-profile'}, |
| 373 | + config_cred_profile='file-profile', |
| 374 | + ) |
| 375 | + self.assertEqual(creds.conf_dict['cred_profile'], 'env-profile') |
| 376 | + |
| 377 | + def test_config_file_used_when_no_cli_flag_or_env_var(self): |
| 378 | + """Without --aws-cred-profile or env var, config file value should be used""" |
| 379 | + creds = self._build_and_generate( |
| 380 | + argv=['gimme-aws-creds'], |
| 381 | + config_cred_profile='file-profile', |
| 382 | + ) |
| 383 | + self.assertEqual(creds.conf_dict['cred_profile'], 'file-profile') |
0 commit comments