def test_generate_presign_url_with_expire_time(self): signed_url = self.signer.generate_presigned_url( 'http://test.com/foo.txt', date_less_than=datetime.datetime(2016, 1, 1)) expected = ( 'http://test.com/foo.txt?Expires=1451606400&Signature=c2lnbmVk' '&Key-Pair-Id=MY_KEY_ID') assert_url_equal(signed_url, expected)
def test_generate_presign_url_with_expire_time(self): signed_url = self.signer.generate_presigned_url( 'http://test.com/foo.txt', date_less_than=datetime.datetime(2016, 1, 1)) expected = ( 'http://test.com/foo.txt?Expires=1451606400&Signature=c2lnbmVk' '&Key-Pair-Id=MY_KEY_ID') assert_url_equal(signed_url, expected)
def test_presigned_url_contains_no_content_type(self): timestamp = datetime(2017, 3, 22, 0, 0) with mock.patch('botocore.auth.datetime') as _datetime: _datetime.datetime.utcnow.return_value = timestamp url = self.client.generate_presigned_url('get_caller_identity', {}) # There should be no 'content-type' in x-amz-signedheaders expected_url = ( 'https://sts.amazonaws.com/?Action=GetCallerIdentity&' 'Version=2011-06-15&X-Amz-Algorithm=AWS4-HMAC-SHA256&' 'X-Amz-Credential=access_key%2F20170322%2Fus-east-1%2Fsts%2F' 'aws4_request&X-Amz-Date=20170322T000000Z&X-Amz-Expires=3600&' 'X-Amz-SignedHeaders=host&X-Amz-Signature=767845d2ee858069a598d5f' '8b497b75c7d57356885b1b3dba46dbbc0fc62bf5a') assert_url_equal(url, expected_url)
def test_generate_presign_url_with_custom_policy(self): policy = self.signer.build_policy('foo', datetime.datetime(2016, 1, 1), date_greater_than=datetime.datetime( 2015, 12, 1), ip_address='12.34.56.78/9') signed_url = self.signer.generate_presigned_url( 'http://test.com/index.html?foo=bar', policy=policy) expected = ('http://test.com/index.html?foo=bar' '&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiZm9vIiwiQ29uZ' 'Gl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIj' 'oxNDUxNjA2NDAwfSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI' '6IjEyLjM0LjU2Ljc4LzkifSwiRGF0ZUdyZWF0ZXJUaGFuIjp7IkFX' 'UzpFcG9jaFRpbWUiOjE0NDg5MjgwMDB9fX1dfQ__' '&Signature=c2lnbmVk&Key-Pair-Id=MY_KEY_ID') assert_url_equal(signed_url, expected)
def test_presigned_url_contains_no_content_type(self): timestamp = datetime(2017, 3, 22, 0, 0) with mock.patch('botocore.auth.datetime') as _datetime: _datetime.datetime.utcnow.return_value = timestamp url = self.client.generate_presigned_url('get_caller_identity', {}) # There should be no 'content-type' in x-amz-signedheaders expected_url = ( 'https://sts.amazonaws.com/?Action=GetCallerIdentity&' 'Version=2011-06-15&X-Amz-Algorithm=AWS4-HMAC-SHA256&' 'X-Amz-Credential=access_key%2F20170322%2Fus-east-1%2Fsts%2F' 'aws4_request&X-Amz-Date=20170322T000000Z&X-Amz-Expires=3600&' 'X-Amz-SignedHeaders=host&X-Amz-Signature=767845d2ee858069a598d5f' '8b497b75c7d57356885b1b3dba46dbbc0fc62bf5a' ) assert_url_equal(url, expected_url)
def test_generate_presign_url_with_custom_policy(self): policy = self.signer.build_policy( 'foo', datetime.datetime(2016, 1, 1), date_greater_than=datetime.datetime(2015, 12, 1), ip_address='12.34.56.78/9') signed_url = self.signer.generate_presigned_url( 'http://test.com/index.html?foo=bar', policy=policy) expected = ( 'http://test.com/index.html?foo=bar' '&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiZm9vIiwiQ29uZ' 'Gl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIj' 'oxNDUxNjA2NDAwfSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI' '6IjEyLjM0LjU2Ljc4LzkifSwiRGF0ZUdyZWF0ZXJUaGFuIjp7IkFX' 'UzpFcG9jaFRpbWUiOjE0NDg5MjgwMDB9fX1dfQ__' '&Signature=c2lnbmVk&Key-Pair-Id=MY_KEY_ID') assert_url_equal(signed_url, expected)
def test_generate_db_auth_token(self): hostname = 'prod-instance.us-east-1.rds.amazonaws.com' port = 3306 username = '******' clock = datetime.datetime(2016, 11, 7, 17, 39, 33, tzinfo=tzutc()) with mock.patch('datetime.datetime') as dt: dt.utcnow.return_value = clock result = generate_db_auth_token(self.client, hostname, port, username) expected_result = ( 'prod-instance.us-east-1.rds.amazonaws.com:3306/?Action=connect' '&DBUser=someusername&X-Amz-Algorithm=AWS4-HMAC-SHA256' '&X-Amz-Date=20161107T173933Z&X-Amz-SignedHeaders=host' '&X-Amz-Expires=900&X-Amz-Credential=akid%2F20161107%2F' 'us-east-1%2Frds-db%2Faws4_request&X-Amz-Signature' '=d1138cdbc0ca63eec012ec0fc6c2267e03642168f5884a7795320d4c18374c61' ) # A scheme needs to be appended to the beginning or urlsplit may fail # on certain systems. assert_url_equal('https://' + result, 'https://' + expected_result)
def test_generate_db_auth_token(self): hostname = 'prod-instance.us-east-1.rds.amazonaws.com' port = 3306 username = '******' clock = datetime.datetime(2016, 11, 7, 17, 39, 33, tzinfo=tzutc()) with mock.patch('datetime.datetime') as dt: dt.utcnow.return_value = clock result = generate_db_auth_token( self.client, hostname, port, username) expected_result = ( 'prod-instance.us-east-1.rds.amazonaws.com:3306/?Action=connect' '&DBUser=someusername&X-Amz-Algorithm=AWS4-HMAC-SHA256' '&X-Amz-Date=20161107T173933Z&X-Amz-SignedHeaders=host' '&X-Amz-Expires=900&X-Amz-Credential=akid%2F20161107%2F' 'us-east-1%2Frds-db%2Faws4_request&X-Amz-Signature' '=d1138cdbc0ca63eec012ec0fc6c2267e03642168f5884a7795320d4c18374c61' ) # A scheme needs to be appended to the beginning or urlsplit may fail # on certain systems. assert_url_equal( 'https://' + result, 'https://' + expected_result)