Skip to content

Commit fccaa23

Browse files
committed
Clean up tests
1 parent 5255e9d commit fccaa23

File tree

4 files changed

+60
-54
lines changed

4 files changed

+60
-54
lines changed

tests/lib/boto3_proxy_test.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
from cloudformation_cli_python_lib.boto3_proxy import SessionProxy, _get_boto_session
33
from cloudformation_cli_python_lib.utils import Credentials
44

5-
import botocore # pylint: disable=C0411
6-
75

86
def test_get_boto_session_returns_proxy():
97
proxy = _get_boto_session(Credentials("", "", ""))
@@ -15,14 +13,6 @@ def test_get_boto_session_returns_none():
1513
assert proxy is None
1614

1715

18-
def test_can_create_boto_client():
19-
proxy = _get_boto_session(Credentials("", "", ""))
20-
client = proxy.client(
21-
"s3", region_name="us-west-2"
22-
) # just in case AWS_REGION not set in test environment
23-
assert isinstance(client, botocore.client.BaseClient)
24-
25-
2616
def test_can_retrieve_boto_session():
2717
proxy = _get_boto_session(Credentials("", "", ""))
2818
session = proxy.session

tests/lib/cipher_test.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def test_create_kms_cipher():
1717
with patch(
1818
"cloudformation_cli_python_lib.cipher.aws_encryption_sdk.StrictAwsKmsMasterKeyProvider",
1919
autospec=True,
20-
):
20+
), patch("boto3.client", autospec=True):
2121
cipher = KmsCipher("encryptionKeyArn", "encryptionKeyRole")
2222
assert cipher
2323

@@ -35,7 +35,9 @@ def test_decrypt_credentials_success():
3535
autospec=True,
3636
), patch(
3737
"cloudformation_cli_python_lib.cipher.aws_encryption_sdk.EncryptionSDKClient.decrypt"
38-
) as mock_decrypt:
38+
) as mock_decrypt, patch(
39+
"boto3.client", autospec=True
40+
):
3941
mock_decrypt.return_value = (
4042
b'{"accessKeyId": "IASAYK835GAIFHAHEI23", "secretAccessKey": "66iOGPN5LnpZorcLr8Kh25u8AbjHVllv5poh2O0", "sessionToken": "lameHS2vQOknSHWhdFYTxm2eJc1JMn9YBNI4nV4mXue945KPL6DHfW8EsUQT5zwssYEC1NvYP9yD6Y5s5lKR3chflOHPFsIe6eqg"}', # noqa: B950
4143
Mock(),
@@ -56,7 +58,9 @@ def test_decrypt_credentials_fail():
5658
"cloudformation_cli_python_lib.cipher.aws_encryption_sdk.EncryptionSDKClient.decrypt"
5759
) as mock_decrypt, pytest.raises(
5860
_EncryptionError
59-
) as excinfo:
61+
) as excinfo, patch(
62+
"boto3.client", autospec=True
63+
):
6064
mock_decrypt.side_effect = AWSEncryptionSDKClientError()
6165
cipher = KmsCipher("encryptionKeyArn", "encryptionKeyRole")
6266
cipher.decrypt_credentials(
@@ -73,7 +77,9 @@ def test_decrypt_credentials_returns_null_fail():
7377
"cloudformation_cli_python_lib.cipher.aws_encryption_sdk.EncryptionSDKClient.decrypt"
7478
) as mock_decrypt, pytest.raises(
7579
_EncryptionError
76-
) as excinfo:
80+
) as excinfo, patch(
81+
"boto3.client", autospec=True
82+
):
7783
mock_decrypt.return_value = (
7884
b"null",
7985
Mock(),

tests/lib/log_delivery_test.py

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
from uuid import uuid4
55

66
import pytest
7-
from boto3.session import Session
8-
from cloudformation_cli_python_lib.boto3_proxy import SessionProxy
97
from cloudformation_cli_python_lib.log_delivery import (
108
HookProviderLogHandler,
119
ProviderFilter,
@@ -18,6 +16,13 @@
1816
RequestData,
1917
)
2018

19+
import botocore.errorfactory
20+
import botocore.session
21+
22+
logs_model = botocore.session.get_session().get_service_model("logs")
23+
factory = botocore.errorfactory.ClientExceptionsFactory()
24+
logs_exceptions = factory.create_client_exceptions(logs_model)
25+
2126

2227
@pytest.fixture
2328
def mock_logger():
@@ -100,15 +105,11 @@ def mock_handler_set_formatter():
100105

101106

102107
@pytest.fixture
103-
def mock_provider_handler():
108+
def mock_provider_handler(mock_session):
104109
plh = ProviderLogHandler(
105110
group="test-group",
106111
stream="test-stream",
107-
session=SessionProxy(
108-
Session(
109-
aws_access_key_id="", aws_secret_access_key="", aws_session_token=""
110-
)
111-
),
112+
session=mock_session,
112113
)
113114
# not mocking the whole client because that replaces generated exception classes to
114115
# be replaced with mocks
@@ -118,15 +119,11 @@ def mock_provider_handler():
118119

119120

120121
@pytest.fixture
121-
def mock_hook_provider_handler():
122+
def mock_hook_provider_handler(mock_session):
122123
plh = HookProviderLogHandler(
123124
group="test-hook-group",
124125
stream="test-hook-stream",
125-
session=SessionProxy(
126-
Session(
127-
aws_access_key_id="", aws_secret_access_key="", aws_session_token=""
128-
)
129-
),
126+
session=mock_session,
130127
)
131128
# not mocking the whole client because that replaces generated exception classes to
132129
# be replaced with mocks
@@ -286,12 +283,12 @@ def test__put_log_event_success(mock_provider_handler, sequence_token):
286283

287284

288285
def test__put_log_event_invalid_token(mock_provider_handler):
289-
exc = mock_provider_handler.client.exceptions
286+
mock_provider_handler.client.exceptions = logs_exceptions
290287
mock_put = mock_provider_handler.client.put_log_events
291288
mock_put.return_value = {"nextSequenceToken": "some-other-seq"}
292289
mock_put.side_effect = [
293-
exc.InvalidSequenceTokenException({}, operation_name="Test"),
294-
exc.DataAlreadyAcceptedException({}, operation_name="Test"),
290+
logs_exceptions.InvalidSequenceTokenException({}, operation_name="Test"),
291+
logs_exceptions.DataAlreadyAcceptedException({}, operation_name="Test"),
295292
DEFAULT,
296293
]
297294
mock_provider_handler._put_log_event(
@@ -309,8 +306,8 @@ def test_emit_existing_cwl_group_stream(mock_provider_handler):
309306

310307

311308
def test_emit_no_group_stream(mock_provider_handler):
312-
exc = mock_provider_handler.client.exceptions.ResourceNotFoundException
313-
group_exc = exc(
309+
mock_provider_handler.client.exceptions = logs_exceptions
310+
group_exc = logs_exceptions.ResourceNotFoundException(
314311
{"Error": {"Message": "log group does not exist"}},
315312
operation_name="PutLogRecords",
316313
)
@@ -326,7 +323,7 @@ def test_emit_no_group_stream(mock_provider_handler):
326323
mock_provider_handler._create_log_stream.assert_called_once()
327324

328325
# create_group should not be called again if the group already exists
329-
stream_exc = exc(
326+
stream_exc = logs_exceptions.ResourceNotFoundException(
330327
{"Error": {"Message": "log stream does not exist"}},
331328
operation_name="PutLogRecords",
332329
)
@@ -493,12 +490,12 @@ def test__hook_put_log_event_success(mock_hook_provider_handler, sequence_token)
493490

494491

495492
def test__hook_put_log_event_invalid_token(mock_hook_provider_handler):
496-
exc = mock_hook_provider_handler.client.exceptions
493+
mock_hook_provider_handler.client.exceptions = logs_exceptions
497494
mock_put = mock_hook_provider_handler.client.put_log_events
498495
mock_put.return_value = {"nextSequenceToken": "some-other-seq"}
499496
mock_put.side_effect = [
500-
exc.InvalidSequenceTokenException({}, operation_name="Test"),
501-
exc.DataAlreadyAcceptedException({}, operation_name="Test"),
497+
logs_exceptions.InvalidSequenceTokenException({}, operation_name="Test"),
498+
logs_exceptions.DataAlreadyAcceptedException({}, operation_name="Test"),
502499
DEFAULT,
503500
]
504501
mock_hook_provider_handler._put_log_event(
@@ -516,8 +513,8 @@ def test_hook_emit_existing_cwl_group_stream(mock_hook_provider_handler):
516513

517514

518515
def test_hook_emit_no_group_stream(mock_hook_provider_handler):
519-
exc = mock_hook_provider_handler.client.exceptions.ResourceNotFoundException
520-
group_exc = exc(
516+
mock_hook_provider_handler.client.exceptions = logs_exceptions
517+
group_exc = logs_exceptions.ResourceNotFoundException(
521518
{"Error": {"Message": "log group does not exist"}},
522519
operation_name="PutLogRecords",
523520
)
@@ -533,7 +530,7 @@ def test_hook_emit_no_group_stream(mock_hook_provider_handler):
533530
mock_hook_provider_handler._create_log_stream.assert_called_once()
534531

535532
# create_group should not be called again if the group already exists
536-
stream_exc = exc(
533+
stream_exc = logs_exceptions.ResourceNotFoundException(
537534
{"Error": {"Message": "log stream does not exist"}},
538535
operation_name="PutLogRecords",
539536
)

tests/lib/metrics_test.py

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from datetime import datetime
44
from unittest.mock import Mock, call, patch
55

6-
import boto3
76
import pytest
87
from cloudformation_cli_python_lib.interface import (
98
Action,
@@ -18,7 +17,13 @@
1817
format_dimensions,
1918
)
2019

21-
from botocore.stub import Stubber # pylint: disable=C0411
20+
import botocore.errorfactory
21+
import botocore.session
22+
23+
cloudwatch_model = botocore.session.get_session().get_service_model("cloudwatch")
24+
factory = botocore.errorfactory.ClientExceptionsFactory()
25+
cloudwatch_exceptions = factory.create_client_exceptions(cloudwatch_model)
26+
2227

2328
ACCOUNT_ID = "123456789012"
2429
RESOURCE_TYPE = "Aa::Bb::Cc"
@@ -42,11 +47,16 @@ def test_format_dimensions():
4247

4348

4449
def test_put_metric_catches_error(mock_session):
45-
client = boto3.client("cloudwatch")
46-
stubber = Stubber(client)
47-
48-
stubber.add_client_error("put_metric_data", "InternalServiceError")
49-
stubber.activate()
50+
client = mock_session.client("cloudwatch")
51+
client.exceptions = cloudwatch_exceptions
52+
mock_put = client.put_metric_data
53+
mock_put.return_value = {}
54+
mock_put.side_effect = [
55+
cloudwatch_exceptions.InternalServiceFault(
56+
{"Error": {"Code": "InternalServiceError", "Message": ""}},
57+
operation_name="PutMetricData",
58+
),
59+
]
5060

5161
mock_session.client.return_value = client
5262

@@ -67,7 +77,6 @@ def test_put_metric_catches_error(mock_session):
6777
datetime.now(),
6878
)
6979

70-
stubber.deactivate()
7180
expected_calls = [
7281
call.error(
7382
"An error occurred while publishing metrics: %s",
@@ -197,11 +206,16 @@ def test_publish_log_delivery_exception_metric(mock_session):
197206

198207

199208
def test_put_hook_metric_catches_error(mock_session):
200-
client = boto3.client("cloudwatch")
201-
stubber = Stubber(client)
202-
203-
stubber.add_client_error("put_metric_data", "InternalServiceError")
204-
stubber.activate()
209+
client = mock_session.client("cloudwatch")
210+
client.exceptions = cloudwatch_exceptions
211+
mock_put = client.put_metric_data
212+
mock_put.return_value = {}
213+
mock_put.side_effect = [
214+
cloudwatch_exceptions.InternalServiceFault(
215+
{"Error": {"Code": "InternalServiceError", "Message": ""}},
216+
operation_name="PutMetricData",
217+
),
218+
]
205219

206220
mock_session.client.return_value = client
207221

@@ -222,7 +236,6 @@ def test_put_hook_metric_catches_error(mock_session):
222236
datetime.now(),
223237
)
224238

225-
stubber.deactivate()
226239
expected_calls = [
227240
call.error(
228241
"An error occurred while publishing metrics: %s",

0 commit comments

Comments
 (0)