44from uuid import uuid4
55
66import pytest
7- from boto3 .session import Session
8- from cloudformation_cli_python_lib .boto3_proxy import SessionProxy
97from cloudformation_cli_python_lib .log_delivery import (
108 HookProviderLogHandler ,
119 ProviderFilter ,
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
2328def mock_logger ():
@@ -100,38 +105,36 @@ 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
115116 for method in ["create_log_group" , "create_log_stream" , "put_log_events" ]:
116117 setattr (plh .client , method , Mock (auto_spec = True ))
118+
119+ # set exceptions instead of using Mock
120+ plh .client .exceptions = logs_exceptions
117121 return plh
118122
119123
120124@pytest .fixture
121- def mock_hook_provider_handler ():
125+ def mock_hook_provider_handler (mock_session ):
122126 plh = HookProviderLogHandler (
123127 group = "test-hook-group" ,
124128 stream = "test-hook-stream" ,
125- session = SessionProxy (
126- Session (
127- aws_access_key_id = "" , aws_secret_access_key = "" , aws_session_token = ""
128- )
129- ),
129+ session = mock_session ,
130130 )
131131 # not mocking the whole client because that replaces generated exception classes to
132132 # be replaced with mocks
133133 for method in ["create_log_group" , "create_log_stream" , "put_log_events" ]:
134134 setattr (plh .client , method , Mock (auto_spec = True ))
135+
136+ # set exceptions instead of using Mock
137+ plh .client .exceptions = logs_exceptions
135138 return plh
136139
137140
@@ -286,12 +289,11 @@ def test__put_log_event_success(mock_provider_handler, sequence_token):
286289
287290
288291def test__put_log_event_invalid_token (mock_provider_handler ):
289- exc = mock_provider_handler .client .exceptions
290292 mock_put = mock_provider_handler .client .put_log_events
291293 mock_put .return_value = {"nextSequenceToken" : "some-other-seq" }
292294 mock_put .side_effect = [
293- exc .InvalidSequenceTokenException ({}, operation_name = "Test" ),
294- exc .DataAlreadyAcceptedException ({}, operation_name = "Test" ),
295+ logs_exceptions .InvalidSequenceTokenException ({}, operation_name = "Test" ),
296+ logs_exceptions .DataAlreadyAcceptedException ({}, operation_name = "Test" ),
295297 DEFAULT ,
296298 ]
297299 mock_provider_handler ._put_log_event (
@@ -309,8 +311,7 @@ def test_emit_existing_cwl_group_stream(mock_provider_handler):
309311
310312
311313def test_emit_no_group_stream (mock_provider_handler ):
312- exc = mock_provider_handler .client .exceptions .ResourceNotFoundException
313- group_exc = exc (
314+ group_exc = logs_exceptions .ResourceNotFoundException (
314315 {"Error" : {"Message" : "log group does not exist" }},
315316 operation_name = "PutLogRecords" ,
316317 )
@@ -326,7 +327,7 @@ def test_emit_no_group_stream(mock_provider_handler):
326327 mock_provider_handler ._create_log_stream .assert_called_once ()
327328
328329 # create_group should not be called again if the group already exists
329- stream_exc = exc (
330+ stream_exc = logs_exceptions . ResourceNotFoundException (
330331 {"Error" : {"Message" : "log stream does not exist" }},
331332 operation_name = "PutLogRecords" ,
332333 )
@@ -474,8 +475,9 @@ def test_hook_log_stream_create_success(mock_hook_provider_handler):
474475@pytest .mark .parametrize ("create_method" , ["_create_log_group" , "_create_log_stream" ])
475476def test__hook_create_already_exists (mock_hook_provider_handler , create_method ):
476477 mock_logs_method = getattr (mock_hook_provider_handler .client , create_method [1 :])
477- exc = mock_hook_provider_handler .client .exceptions .ResourceAlreadyExistsException
478- mock_logs_method .side_effect = exc ({}, operation_name = "Test" )
478+ mock_logs_method .side_effect = logs_exceptions .ResourceAlreadyExistsException (
479+ {}, operation_name = "Test"
480+ )
479481 # should not raise an exception if the log group already exists
480482 getattr (mock_hook_provider_handler , create_method )()
481483 mock_logs_method .assert_called_once ()
@@ -493,12 +495,11 @@ def test__hook_put_log_event_success(mock_hook_provider_handler, sequence_token)
493495
494496
495497def test__hook_put_log_event_invalid_token (mock_hook_provider_handler ):
496- exc = mock_hook_provider_handler .client .exceptions
497498 mock_put = mock_hook_provider_handler .client .put_log_events
498499 mock_put .return_value = {"nextSequenceToken" : "some-other-seq" }
499500 mock_put .side_effect = [
500- exc .InvalidSequenceTokenException ({}, operation_name = "Test" ),
501- exc .DataAlreadyAcceptedException ({}, operation_name = "Test" ),
501+ logs_exceptions .InvalidSequenceTokenException ({}, operation_name = "Test" ),
502+ logs_exceptions .DataAlreadyAcceptedException ({}, operation_name = "Test" ),
502503 DEFAULT ,
503504 ]
504505 mock_hook_provider_handler ._put_log_event (
@@ -516,8 +517,7 @@ def test_hook_emit_existing_cwl_group_stream(mock_hook_provider_handler):
516517
517518
518519def test_hook_emit_no_group_stream (mock_hook_provider_handler ):
519- exc = mock_hook_provider_handler .client .exceptions .ResourceNotFoundException
520- group_exc = exc (
520+ group_exc = logs_exceptions .ResourceNotFoundException (
521521 {"Error" : {"Message" : "log group does not exist" }},
522522 operation_name = "PutLogRecords" ,
523523 )
@@ -533,7 +533,7 @@ def test_hook_emit_no_group_stream(mock_hook_provider_handler):
533533 mock_hook_provider_handler ._create_log_stream .assert_called_once ()
534534
535535 # create_group should not be called again if the group already exists
536- stream_exc = exc (
536+ stream_exc = logs_exceptions . ResourceNotFoundException (
537537 {"Error" : {"Message" : "log stream does not exist" }},
538538 operation_name = "PutLogRecords" ,
539539 )
0 commit comments