def _test_signature_version_4(test_case): test_case = _SignatureTestCase(test_case) request = create_request_from_raw_request(test_case.raw_request) auth = botocore.auth.SigV4Auth(test_case.credentials, "host", "us-east-1") actual_canonical_request = auth.canonical_request(request) assert_equal(actual_canonical_request, test_case.canonical_request, test_case.raw_request, "canonical_request") actual_string_to_sign = auth.string_to_sign(request, actual_canonical_request) assert_equal(actual_string_to_sign, test_case.string_to_sign, test_case.raw_request, "string_to_sign") auth.add_auth(request) actual_auth_header = request.headers["Authorization"] assert_equal(actual_auth_header, test_case.authorization_header, test_case.raw_request, "authheader")
def _test_signature_version_4(test_case): test_case = _SignatureTestCase(test_case) request = create_request_from_raw_request(test_case.raw_request) auth = botocore.auth.SigV4Auth(test_case.credentials, 'host', 'us-east-1') actual_canonical_request = auth.canonical_request(request) assert_equal(actual_canonical_request, test_case.canonical_request, test_case.raw_request, 'canonical_request') actual_string_to_sign = auth.string_to_sign(request, actual_canonical_request) assert_equal(actual_string_to_sign, test_case.string_to_sign, test_case.raw_request, 'string_to_sign') auth.add_auth(request) actual_auth_header = request.headers['Authorization'] assert_equal(actual_auth_header, test_case.authorization_header, test_case.raw_request, 'authheader')
def _test_signature_version_4(test_case): test_case = _SignatureTestCase(test_case) request = create_request_from_raw_request(test_case.raw_request) auth = botocore.auth.SigV4Auth(test_case.credentials, SERVICE, REGION) actual_canonical_request = auth.canonical_request(request) actual_string_to_sign = auth.string_to_sign(request, actual_canonical_request) auth.add_auth(request) actual_auth_header = request.headers['Authorization'] # Some stuff only works right when you go through auth.add_auth() # So don't assert the interim steps unless the end result was wrong. if actual_auth_header != test_case.authorization_header: assert_equal(actual_canonical_request, test_case.canonical_request, test_case.raw_request, 'canonical_request') assert_equal(actual_string_to_sign, test_case.string_to_sign, test_case.raw_request, 'string_to_sign') assert_equal(actual_auth_header, test_case.authorization_header, test_case.raw_request, 'authheader')
def test_thread_safe_timestamp(self): request = AWSRequest() request.url = ( 'https://search-testdomain1-j67dwxlet67gf7ghwfmik2c67i.us-west-2.' 'cloudsearch.amazonaws.com/' '2013-01-01/search?format=sdk&pretty=true&' 'q.options=%7B%22defaultOperator%22%3A%20%22and%22%2C%20%22' 'fields%22%3A%5B%22directors%5E10%22%5D%7D&q=George%20Lucas' ) request.method = 'GET' auth = botocore.auth.SigV4Auth( self.credentials, 'cloudsearchdomain', 'us-west-2') with mock.patch.object( botocore.auth.datetime, 'datetime', mock.Mock(wraps=datetime.datetime)) as mock_datetime: original_utcnow = datetime.datetime(2014, 1, 1, 0, 0) mock_datetime.utcnow.return_value = original_utcnow # Go through the add_auth process once. This will attach # a timestamp to the request at the beginning of auth. auth.add_auth(request) self.assertEqual(request.context['timestamp'], '20140101T000000Z') # Ensure the date is in the Authorization header self.assertIn('20140101', request.headers['Authorization']) # Now suppose the utc time becomes the next day all of a sudden mock_datetime.utcnow.return_value = datetime.datetime( 2014, 1, 2, 0, 0) # Smaller methods like the canonical request and string_to_sign # should have the timestamp attached to the request in their # body and not what the time is now mocked as. This is to ensure # there is no mismatching in timestamps when signing. cr = auth.canonical_request(request) self.assertIn('x-amz-date:20140101T000000Z', cr) self.assertNotIn('x-amz-date:20140102T000000Z', cr) sts = auth.string_to_sign(request, cr) self.assertIn('20140101T000000Z', sts) self.assertNotIn('20140102T000000Z', sts)
def test_thread_safe_timestamp(self): request = AWSRequest() request.url = ( 'https://search-testdomain1-j67dwxlet67gf7ghwfmik2c67i.us-west-2.' 'cloudsearch.amazonaws.com/' '2013-01-01/search?format=sdk&pretty=true&' 'q.options=%7B%22defaultOperator%22%3A%20%22and%22%2C%20%22' 'fields%22%3A%5B%22directors%5E10%22%5D%7D&q=George%20Lucas' ) request.method = 'GET' auth = self.create_signer('cloudsearchdomain', 'us-west-2') with mock.patch.object( botocore.auth.datetime, 'datetime', mock.Mock(wraps=datetime.datetime)) as mock_datetime: original_utcnow = datetime.datetime(2014, 1, 1, 0, 0) mock_datetime.utcnow.return_value = original_utcnow # Go through the add_auth process once. This will attach # a timestamp to the request at the beginning of auth. auth.add_auth(request) self.assertEqual(request.context['timestamp'], '20140101T000000Z') # Ensure the date is in the Authorization header self.assertIn('20140101', request.headers['Authorization']) # Now suppose the utc time becomes the next day all of a sudden mock_datetime.utcnow.return_value = datetime.datetime( 2014, 1, 2, 0, 0) # Smaller methods like the canonical request and string_to_sign # should have the timestamp attached to the request in their # body and not what the time is now mocked as. This is to ensure # there is no mismatching in timestamps when signing. cr = auth.canonical_request(request) self.assertIn('x-amz-date:20140101T000000Z', cr) self.assertNotIn('x-amz-date:20140102T000000Z', cr) sts = auth.string_to_sign(request, cr) self.assertIn('20140101T000000Z', sts) self.assertNotIn('20140102T000000Z', sts)