def test_create_retry_handler_with_socket_errors(self): handler = retryhandler.create_retry_handler( self.retry_config, operation_name='OperationBar') with self.assertRaises(ConnectionError): handler(response=None, attempts=10, caught_exception=ConnectionError()) # No connection error raised because attempts < max_attempts. sleep_time = handler(response=None, attempts=1, caught_exception=ConnectionError()) self.assertEqual(sleep_time, 1) # But any other exception should be raised even if # attempts < max_attempts. with self.assertRaises(ValueError): sleep_time = handler(response=None, attempts=1, caught_exception=ValueError())
def test_make_request_injects_better_dns_error_msg(self): fake_request = Mock(url='https://ec2.us-west-2.amazonaws.com') self.http_session.send.side_effect = ConnectionError( "Fake gaierror(8, node or host not known)", request=fake_request) with self.assertRaisesRegexp(EndpointConnectionError, 'Could not connect'): self.endpoint.make_request(self.op, request_dict())
def test_retry_on_socket_errors(self): op = self._operation op.name = 'DescribeInstances' op.has_event_stream_output = False self.event_emitter.emit.side_effect = [ [(None, None)], # Request created. [(None, None)], # Request sent. [(None, 0)], # Check if retry needed. Retry needed. [(None, None)], # Request created [(None, None)], # Request sent. [(None, None)] # Check if retry needed. Retry not needed. ] self.http_session.send.side_effect = ConnectionError() with self.assertRaises(ConnectionError): self.endpoint.make_request(op, request_dict()) call_args = self.event_emitter.emit.call_args_list self.assertEqual(self.event_emitter.emit.call_count, 6) # Check that all of the events are as expected. self.assertEqual(call_args[0][0][0], 'request-created.ec2.DescribeInstances') self.assertEqual(call_args[1][0][0], 'before-send.ec2.DescribeInstances') self.assertEqual(call_args[2][0][0], 'needs-retry.ec2.DescribeInstances') self.assertEqual(call_args[3][0][0], 'request-created.ec2.DescribeInstances') self.assertEqual(call_args[4][0][0], 'before-send.ec2.DescribeInstances') self.assertEqual(call_args[5][0][0], 'needs-retry.ec2.DescribeInstances')
def test_make_request_injects_better_bad_status_line_error_msg(self): fake_request = Mock(url='https://ec2.us-west-2.amazonaws.com') self.http_session.send.side_effect = ConnectionError( """'Connection aborted.', BadStatusLine("''",)""", request=fake_request) with self.assertRaisesRegexp(ConnectionClosedError, 'Connection was closed'): self.endpoint.make_request(self.op, request_dict())
def test_retry_on_socket_errors(self): self.session.register('needs-retry.ec2.DescribeInstances', self.connection_error_handler) op = Mock() op.name = 'DescribeInstances' self.http_session.send.side_effect = ConnectionError() self.endpoint.make_request(op, {}) self.assertEqual(self.total_calls, 3)
def test_make_request_injects_better_dns_error_msg(self): self.endpoint = Endpoint('us-west-2', 'https://ec2.us-west-2.amazonaws.com/', user_agent='botoore', endpoint_prefix='ec2', event_emitter=self.event_emitter) self.endpoint.http_session = self.http_session fake_request = Mock(url='https://ec2.us-west-2.amazonaws.com') self.http_session.send.side_effect = ConnectionError( "Fake gaierror(8, node or host not known)", request=fake_request) with self.assertRaisesRegexp(EndpointConnectionError, 'Could not connect'): self.endpoint.make_request(self.op, request_dict())
def test_retry_on_socket_errors(self): self.event_emitter.emit.side_effect = self.get_emitter_responses( num_retries=1) self.http_session.send.side_effect = ConnectionError() with self.assertRaises(ConnectionError): self.endpoint.make_request(self._operation, request_dict()) self.assert_events_emitted( self.event_emitter, expected_events=[ 'request-created.ec2.DescribeInstances', 'before-send.ec2.DescribeInstances', 'response-received.ec2.DescribeInstances', 'needs-retry.ec2.DescribeInstances', ] * 2)
def test_retry_on_socket_errors(self): op = Mock() op.name = 'DescribeInstances' self.event_emitter.emit.side_effect = [ [], # For initially preparing request [(None, 0)], # Check if retry needed. Retry needed. [], # For preparing the request again [(None, None)] # Check if retry needed. Retry not needed. ] self.http_session.send.side_effect = ConnectionError() self.endpoint.make_request(op, request_dict()) call_args = self.event_emitter.emit.call_args_list self.assertEqual(self.event_emitter.emit.call_count, 4) # Check that all of the events are as expected. self.assertEqual(call_args[0][0][0], 'before-auth.ec2') self.assertEqual(call_args[1][0][0], 'needs-retry.ec2.DescribeInstances') self.assertEqual(call_args[2][0][0], 'before-auth.ec2') self.assertEqual(call_args[3][0][0], 'needs-retry.ec2.DescribeInstances')