# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You # may not use this file except in compliance with the License. A copy of # the License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. from tests import mock, BaseSessionTest class RecordingHandler(object): def __init__(self): self.recorded_events = [] def record(self, event_name, **kwargs): self.recorded_events.append((event_name, kwargs)) class TestClientEvents(BaseSessionTest): def setUp(self): super(TestClientEvents, self).setUp() self.region = 'us-west-2' self.client = self.session.create_client( 'ec2', self.region) def test_emit_response_received(self): recording_handler = RecordingHandler() self.client.meta.events.register( 'response-received.ec2.DescribeRegions', recording_handler.record) with mock.patch( 'botocore.httpsession.URLLib3Session.send') as mock_send: response_body = ( b'' b'' b'' ) mock_send.return_value = mock.Mock( status_code=200, headers={}, content=response_body) self.client.describe_regions() self.assertEqual( recording_handler.recorded_events, [ ('response-received.ec2.DescribeRegions', { 'exception': None, 'response_dict': { 'body': response_body, 'headers': {}, 'context': mock.ANY, 'status_code': 200 }, 'parsed_response': { 'ResponseMetadata': mock.ANY}, 'context': mock.ANY }) ] ) def test_emit_response_received_for_exception(self): recording_handler = RecordingHandler() self.client.meta.events.register( 'response-received.ec2.DescribeRegions', recording_handler.record) with mock.patch( 'botocore.httpsession.URLLib3Session.send') as mock_send: raised_exception = RuntimeError('Unexpected exception') mock_send.side_effect = raised_exception with self.assertRaises(RuntimeError): self.client.describe_regions() self.assertEqual( recording_handler.recorded_events, [ ('response-received.ec2.DescribeRegions', { 'exception': raised_exception, 'response_dict': None, 'parsed_response': None, 'context': mock.ANY }) ] )