class TestEndpointFeatures(TestEndpointBase): def test_timeout_can_be_specified(self): timeout_override = 120 self.endpoint.timeout = timeout_override self.endpoint.make_request(self.op, request_dict()) kwargs = self.http_session.send.call_args[1] self.assertEqual(kwargs['timeout'], timeout_override) def test_make_request_with_proxies(self): proxies = {'http': 'http://localhost:8888'} self.endpoint.proxies = proxies self.endpoint.make_request(self.op, request_dict()) prepared_request = self.http_session.send.call_args[0][0] self.http_session.send.assert_called_with(prepared_request, verify=True, stream=False, proxies=proxies, timeout=DEFAULT_TIMEOUT) def test_make_request_with_no_auth(self): self.endpoint.auth = None self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers) def test_make_request_no_signature_version(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 self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers) 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_make_request_injects_better_dns_error_msg(self): self.endpoint = Endpoint('https://ec2.us-west-2.amazonaws.com/', 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_make_request_no_signature_version(self): self.endpoint = Endpoint('https://ec2.us-west-2.amazonaws.com/', endpoint_prefix='ec2', event_emitter=self.event_emitter) self.endpoint.http_session = self.http_session self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers)
class TestEndpointFeatures(TestEndpointBase): def test_timeout_can_be_specified(self): timeout_override = 120 self.endpoint.timeout = timeout_override self.endpoint.make_request(self.op, request_dict()) kwargs = self.http_session.send.call_args[1] self.assertEqual(kwargs['timeout'], timeout_override) def test_make_request_with_proxies(self): proxies = {'http': 'http://localhost:8888'} self.endpoint.proxies = proxies self.endpoint.make_request(self.op, request_dict()) prepared_request = self.http_session.send.call_args[0][0] self.http_session.send.assert_called_with( prepared_request, verify=True, stream=False, proxies=proxies, timeout=DEFAULT_TIMEOUT) def test_make_request_with_no_auth(self): self.endpoint.auth = None self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers) def test_make_request_no_signature_version(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 self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers) 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_can_specify_proxies(self): proxies = {'http': 'http://foo.bar:1234'} endpoint = Endpoint('https://ec2.us-west-2.amazonaws.com', 'ec2', self.event_emitter, proxies=proxies) self.assertEqual(endpoint.proxies, proxies)
def setUp(self): self.service = Mock() self.service.session.user_agent.return_value = 'botocore-test' self.service.session.emit_first_non_none_response.return_value = None self.op = Mock() self.op.has_streaming_output = False self.op.metadata = {'protocol': 'json'} self.signature_version = True self.auth = Mock() self.event_emitter = Mock() self.event_emitter.emit.return_value = [] self.factory_patch = patch('botocore.parsers.ResponseParserFactory') self.factory = self.factory_patch.start() self.endpoint = Endpoint('us-west-2', 'https://ec2.us-west-2.amazonaws.com/', auth=self.auth, user_agent='botoore', signature_version='v4', endpoint_prefix='ec2', event_emitter=self.event_emitter) self.http_session = Mock() self.http_session.send.return_value = Mock( status_code=200, headers={}, content=b'{"Foo": "bar"}', ) self.endpoint.http_session = self.http_session
def test_can_specify_max_pool_connections(self): endpoint = Endpoint('https://ec2.us-west-2.amazonaws.com', 'ec2', self.event_emitter, max_pool_connections=50) # We can look in endpoint.http_session.adapters[0]._pool_maxsize, # but that feels like testing too much implementation detail. self.assertEqual(endpoint.max_pool_connections, 50)
class TestEndpointFeatures(TestEndpointBase): def test_timeout_can_be_specified(self): timeout_override = 120 self.endpoint.timeout = timeout_override self.endpoint.make_request(self.op, request_dict()) kwargs = self.http_session.send.call_args[1] self.assertEqual(kwargs['timeout'], timeout_override) def test_make_request_with_proxies(self): proxies = {'http': 'http://localhost:8888'} self.endpoint.proxies = proxies self.endpoint.make_request(self.op, request_dict()) prepared_request = self.http_session.send.call_args[0][0] self.http_session.send.assert_called_with(prepared_request, verify=True, stream=False, proxies=proxies, timeout=DEFAULT_TIMEOUT) def test_make_request_with_no_auth(self): self.endpoint.auth = None self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers) def test_make_request_no_signature_version(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 self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers)
def test_make_request_injects_better_dns_error_msg(self): self.endpoint = Endpoint( 'https://ec2.us-west-2.amazonaws.com/', 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_make_request_no_signature_version(self): self.endpoint = Endpoint( 'https://ec2.us-west-2.amazonaws.com/', endpoint_prefix='ec2', event_emitter=self.event_emitter) self.endpoint.http_session = self.http_session self.endpoint.make_request(self.op, request_dict()) # http_session should be used to send the request. self.assertTrue(self.http_session.send.called) prepared_request = self.http_session.send.call_args[0][0] self.assertNotIn('Authorization', prepared_request.headers)
def setUp(self): self.op = Mock() self.op.has_streaming_output = False self.op.metadata = {'protocol': 'json'} self.event_emitter = Mock() self.event_emitter.emit.return_value = [] self.factory_patch = patch( 'botocore.parsers.ResponseParserFactory') self.factory = self.factory_patch.start() self.endpoint = Endpoint( 'https://ec2.us-west-2.amazonaws.com/', endpoint_prefix='ec2', event_emitter=self.event_emitter) self.http_session = Mock() self.http_session.send.return_value = Mock( status_code=200, headers={}, content=b'{"Foo": "bar"}', ) self.endpoint.http_session = self.http_session
def test_recreate_request(self): client = Lambda().client() operation_model = client._service_model.operation_model('Invoke') self.result = operation_model payload = {"name": "bbbbaaaa"} request_dict= {'url_path': '/2015-03-31/functions/temp_lambda_HL58KB/invocations', 'query_string': {}, 'method': 'POST', 'headers': {}, 'body': json.dumps(payload)} endpoint_url = 'https://lambda.eu-west-1.amazonaws.com' user_agent='Boto3/1.12.5 Python/3.8.1 Darwin/18.7.0 Botocore/1.15.5' from botocore.awsrequest import prepare_request_dict prepare_request_dict(request_dict=request_dict,endpoint_url=endpoint_url,user_agent=user_agent) request = client._endpoint.create_request(request_dict, operation_model) headers = {'User-Agent': b'Boto3/1.12.5 Python/3.8.1 Darwin/18.7.0 Botocore/1.15.5', 'X-Amz-Date': b'20200224T010440Z', 'Authorization': b'AWS4-HMAC-SHA256 Credential=AKIAURGGJDT3TXD5DCXK/20200224/eu-west-1/lambda/aws4_request, SignedHeaders=host;x-amz-date, Signature=3ea5c19cc097466202e71c4e3b4e306327709442138bfd6443b27a25cfd89c91', 'Content-Length': '15'} self.result = requests.post(request.url,json=payload,headers=request.headers).text #self.result = request.url #http_session = URLLib3Session() #self.result = http_session.send(request).text #self.result = request.headers.items() return from botocore.endpoint import Endpoint endpoint = Endpoint() self.params = { 'url_path': '/2015-03-31/functions/temp_lambda_HL58KB/invocations', 'query_string': {}, 'method' : 'POST', 'headers' : {'User-Agent': 'Boto3/1.12.5 Python/3.8.1 Darwin/18.7.0 Botocore/1.15.5'}, 'body' : b'{"name": "123"}', 'url' : 'https://lambda.eu-west-1.amazonaws.com/2015-03-31/functions/temp_lambda_HL58KB/invocations', 'context' : {'client_region': 'eu-west-1', 'client_config': None, 'has_streaming_input': True, 'auth_type': None}} #< botocore.config.Config object at0x10f5802e0 > self.result =42