Skip to content

Commit 4c76276

Browse files
committed
tests: increase coverage to 100%
1 parent 285ac95 commit 4c76276

File tree

1 file changed

+186
-0
lines changed

1 file changed

+186
-0
lines changed

tests/functional/test_utilities_parameters.py

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,34 @@ def test_dynamodb_provider_get(mock_name, mock_value):
5656
stubber.deactivate()
5757

5858

59+
def test_dynamodb_provider_get_default_region(monkeypatch, mock_name, mock_value):
60+
"""
61+
Test DynamoDBProvider.get() without setting a region
62+
"""
63+
64+
monkeypatch.setenv("AWS_DEFAULT_REGION", "us-east-1")
65+
66+
table_name = "TEST_TABLE"
67+
68+
# Create a new provider
69+
provider = parameters.DynamoDBProvider(table_name)
70+
71+
# Stub the boto3 client
72+
stubber = stub.Stubber(provider.table.meta.client)
73+
response = {"Item": {"id": {"S": mock_name}, "value": {"S": mock_value}}}
74+
expected_params = {"TableName": table_name, "Key": {"id": mock_name}}
75+
stubber.add_response("get_item", response, expected_params)
76+
stubber.activate()
77+
78+
try:
79+
value = provider.get(mock_name)
80+
81+
assert value == mock_value
82+
stubber.assert_no_pending_responses()
83+
finally:
84+
stubber.deactivate()
85+
86+
5987
def test_dynamodb_provider_get_cached(mock_name, mock_value):
6088
"""
6189
Test DynamoDBProvider.get() with a cached value
@@ -235,6 +263,43 @@ def test_ssm_provider_get(mock_name, mock_value, mock_version):
235263
stubber.deactivate()
236264

237265

266+
def test_ssm_provider_get_default_region(monkeypatch, mock_name, mock_value, mock_version):
267+
"""
268+
Test SSMProvider.get() without specifying the region
269+
"""
270+
271+
monkeypatch.setenv("AWS_DEFAULT_REGION", "us-east-1")
272+
273+
# Create a new provider
274+
provider = parameters.SSMProvider()
275+
276+
# Stub the boto3 client
277+
stubber = stub.Stubber(provider.client)
278+
response = {
279+
"Parameter": {
280+
"Name": mock_name,
281+
"Type": "String",
282+
"Value": mock_value,
283+
"Version": mock_version,
284+
"Selector": f"{mock_name}:{mock_version}",
285+
"SourceResult": "string",
286+
"LastModifiedDate": datetime(2015, 1, 1),
287+
"ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}",
288+
}
289+
}
290+
expected_params = {"Name": mock_name, "WithDecryption": False}
291+
stubber.add_response("get_parameter", response, expected_params)
292+
stubber.activate()
293+
294+
try:
295+
value = provider.get(mock_name)
296+
297+
assert value == mock_value
298+
stubber.assert_no_pending_responses()
299+
finally:
300+
stubber.deactivate()
301+
302+
238303
def test_ssm_provider_get_cached(mock_name, mock_value):
239304
"""
240305
Test SSMProvider.get() with a cached value
@@ -341,6 +406,50 @@ def test_ssm_provider_get_multiple(mock_name, mock_value, mock_version):
341406
stubber.deactivate()
342407

343408

409+
def test_ssm_provider_get_multiple_different_path(mock_name, mock_value, mock_version):
410+
"""
411+
Test SSMProvider.get_multiple() with a non-cached path and names that don't start with the path
412+
"""
413+
414+
mock_param_names = ["A", "B", "C"]
415+
416+
# Create a new provider
417+
provider = parameters.SSMProvider(region="us-east-1")
418+
419+
# Stub the boto3 client
420+
stubber = stub.Stubber(provider.client)
421+
response = {
422+
"Parameters": [
423+
{
424+
"Name": f"{name}",
425+
"Type": "String",
426+
"Value": f"{mock_value}/{name}",
427+
"Version": mock_version,
428+
"Selector": f"{mock_name}/{name}:{mock_version}",
429+
"SourceResult": "string",
430+
"LastModifiedDate": datetime(2015, 1, 1),
431+
"ARN": f"arn:aws:ssm:us-east-2:111122223333:parameter/{mock_name}/{name}",
432+
}
433+
for name in mock_param_names
434+
]
435+
}
436+
expected_params = {"Path": mock_name, "Recursive": False, "WithDecryption": False}
437+
stubber.add_response("get_parameters_by_path", response, expected_params)
438+
stubber.activate()
439+
440+
try:
441+
values = provider.get_multiple(mock_name)
442+
443+
stubber.assert_no_pending_responses()
444+
445+
assert len(values) == len(mock_param_names)
446+
for name in mock_param_names:
447+
assert name in values
448+
assert values[name] == f"{mock_value}/{name}"
449+
finally:
450+
stubber.deactivate()
451+
452+
344453
def test_ssm_provider_get_multiple_next_token(mock_name, mock_value, mock_version):
345454
"""
346455
Test SSMProvider.get_multiple() with a non-cached path with multiple calls
@@ -437,6 +546,38 @@ def test_secrets_provider_get(mock_name, mock_value):
437546
stubber.deactivate()
438547

439548

549+
def test_secrets_provider_get_default_region(monkeypatch, mock_name, mock_value):
550+
"""
551+
Test SecretsProvider.get() without specifying a region
552+
"""
553+
554+
monkeypatch.setenv("AWS_DEFAULT_REGION", "us-east-1")
555+
556+
# Create a new provider
557+
provider = parameters.SecretsProvider()
558+
559+
# Stub the boto3 client
560+
stubber = stub.Stubber(provider.client)
561+
response = {
562+
"ARN": f"arn:aws:secretsmanager:us-east-1:132456789012:secret/{mock_name}",
563+
"Name": mock_name,
564+
"VersionId": "7a9155b8-2dc9-466e-b4f6-5bc46516c84d",
565+
"SecretString": mock_value,
566+
"CreatedDate": datetime(2015, 1, 1),
567+
}
568+
expected_params = {"SecretId": mock_name}
569+
stubber.add_response("get_secret_value", response, expected_params)
570+
stubber.activate()
571+
572+
try:
573+
value = provider.get(mock_name)
574+
575+
assert value == mock_value
576+
stubber.assert_no_pending_responses()
577+
finally:
578+
stubber.deactivate()
579+
580+
440581
def test_secrets_provider_get_cached(mock_name, mock_value):
441582
"""
442583
Test SecretsProvider.get() with a cached value
@@ -631,6 +772,51 @@ def _get_multiple(self, path: str, **kwargs) -> Dict[str, str]:
631772
assert value["A"] == mock_binary
632773

633774

775+
def test_base_provider_get_multiple_cached(mock_name, mock_value):
776+
"""
777+
Test BaseProvider.get_multiple() with cached values
778+
"""
779+
780+
class TestProvider(BaseProvider):
781+
def _get(self, name: str, **kwargs) -> str:
782+
raise NotImplementedError()
783+
784+
def _get_multiple(self, path: str, **kwargs) -> Dict[str, str]:
785+
raise NotImplementedError()
786+
787+
provider = TestProvider()
788+
789+
provider.store[(mock_name, None)] = ExpirableValue({"A": mock_value}, datetime.now() + timedelta(seconds=60))
790+
791+
value = provider.get_multiple(mock_name)
792+
793+
assert isinstance(value, dict)
794+
assert value["A"] == mock_value
795+
796+
797+
def test_base_provider_get_multiple_expired(mock_name, mock_value):
798+
"""
799+
Test BaseProvider.get_multiple() with expired values
800+
"""
801+
802+
class TestProvider(BaseProvider):
803+
def _get(self, name: str, **kwargs) -> str:
804+
raise NotImplementedError()
805+
806+
def _get_multiple(self, path: str, **kwargs) -> Dict[str, str]:
807+
assert path == mock_name
808+
return {"A": mock_value}
809+
810+
provider = TestProvider()
811+
812+
provider.store[(mock_name, None)] = ExpirableValue({"B": mock_value}, datetime.now() - timedelta(seconds=60))
813+
814+
value = provider.get_multiple(mock_name)
815+
816+
assert isinstance(value, dict)
817+
assert value["A"] == mock_value
818+
819+
634820
def test_get_parameter(monkeypatch, mock_name, mock_value):
635821
"""
636822
Test get_parameter()

0 commit comments

Comments
 (0)