def test_fields(self): request = Request() request.url = '/' request.method = 'POST' request.data = {'Foo': u'\u2713'} self.signer.add_auth(request) self.assertEqual(request.data['AWSAccessKeyId'], 'foo') self.assertEqual(request.data['Foo'], u'\u2713') self.assertEqual(request.data['Timestamp'], '2014-06-20T08:40:23Z') self.assertEqual(request.data['Signature'], u'Tiecw+t51tok4dTT8B4bg47zxHEM/KcD55f2/x6K22o=') self.assertEqual(request.data['SignatureMethod'], 'HmacSHA256') self.assertEqual(request.data['SignatureVersion'], '2')
def test_get(self): request = Request() request.url = '/' request.method = 'GET' request.params = {'Foo': u'\u2713'} self.signer.add_auth(request) self.assertEqual(request.params['AWSAccessKeyId'], 'foo') self.assertEqual(request.params['Foo'], u'\u2713') self.assertEqual(request.params['Timestamp'], '2014-06-20T08:40:23Z') self.assertEqual(request.params['Signature'], u'Un97klqZCONP65bA1+Iv4H3AcB2I40I4DBvw5ZERFPw=') self.assertEqual(request.params['SignatureMethod'], 'HmacSHA256') self.assertEqual(request.params['SignatureVersion'], '2')
def test_resign(self): # Make sure that resigning after e.g. retries works request = Request() request.url = '/' request.method = 'POST' params = { 'Foo': u'\u2713', 'Signature': u'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q=' } result = self.signer.calc_signature(request, params) self.assertEqual( result, ('Foo=%E2%9C%93', u'VCtWuwaOL0yMffAT8W4y0AFW3W4KUykBqah9S40rB+Q='))
def test_get_response_nonstreaming_ok(self): http_response = Response() http_response.headers = { 'content-type': 'application/xml', 'date': 'Sun, 09 Mar 2014 02:55:43 GMT', 'server': 'AmazonS3', 'transfer-encoding': 'chunked', 'x-amz-id-2': 'AAAAAAAAAAAAAAAAAAA', 'x-amz-request-id': 'XXXXXXXXXXXXXXXX' } http_response.raw = six.BytesIO(XMLBODY1) http_response.status_code = 403 http_response.reason = 'Forbidden' http_response.request = Request() session = botocore.session.get_session() s3 = session.get_service('s3') operation = s3.get_operation('ListObjects') # non-streaming operation self.assertEqual( response.get_response(operation.model, http_response)[1], { 'ResponseMetadata': { 'RequestId': 'XXXXXXXXXXXXXXXX', 'HostId': 'AAAAAAAAAAAAAAAAAAA', 'HTTPStatusCode': 403 }, 'Error': { 'Message': 'Access Denied', 'Code': 'AccessDenied', } })
def test_4_from_requests_redirect(self): req = Request(method='GET', url='%s/redirect/2' % HTTPBIN_ORIGIN) resp = requests.request(**vars(req)) har_log = harlib.HarLog(resp) self.assertEqual(len(har_log.entries), 3) to_resp = har_log.encode(requests.Response) self.assertEqualResponse(to_resp, resp)
def test_get_response_nonstreaming_ng(self): http_response = Response() http_response.headers = { 'content-type': 'application/xml', 'date': 'Sat, 08 Mar 2014 12:05:44 GMT', 'server': 'AmazonS3', 'transfer-encoding': 'chunked', 'x-amz-id-2': 'AAAAAAAAAAAAAAAAAAA', 'x-amz-request-id': 'XXXXXXXXXXXXXXXX' } http_response.raw = six.BytesIO(XMLBODY2) http_response.status_code = 200 http_response.reason = 'ok' http_response.request = Request() session = botocore.session.get_session() s3 = session.get_service('s3') operation = s3.get_operation('ListObjects') # non-streaming operation self.assertEqual( response.get_response(operation.model, http_response)[1], { u'Contents': [{ u'ETag': '"00000000000000000000000000000000"', u'Key': 'test.png', u'LastModified': datetime.datetime(2014, 3, 1, 17, 6, 40, tzinfo=tzutc()), u'Owner': { u'DisplayName': 'dummy', u'ID': 'AAAAAAAAAAAAAAAAAAA' }, u'Size': 6702, u'StorageClass': 'STANDARD' }], u'IsTruncated': False, u'Marker': "", u'MaxKeys': 1000, u'Name': 'mybucket', u'Prefix': "", 'ResponseMetadata': { 'RequestId': 'XXXXXXXXXXXXXXXX', 'HostId': 'AAAAAAAAAAAAAAAAAAA', 'HTTPStatusCode': 200, } })
def test_3_from_requests_error(self): req = Request(method='GET', url='%s/get' % EXAMPLE_ORIGIN) with self.assertRaises(RequestException): requests.request(**vars(req))