def test_get_header_expiry_error(caplog): """Tests whether token expiry error is handled as expected when getting header.""" meta = {} mock_resource = MagicMock() mock_resource.load.side_effect = botocore.exceptions.ClientError( {'Error': {'Code': 'ExpiredToken', 'Message': 'Just testing'}}, 'Testing') with mock.patch('snowflake.connector.s3_util.SnowflakeS3Util._get_s3_object', return_value=mock_resource): SnowflakeS3Util.get_file_header(meta, 'file.txt') assert ('snowflake.connector.s3_util', logging.DEBUG, 'AWS Token expired. Renew and retry') in caplog.record_tuples assert meta['result_status'] == ResultStatus.RENEW_TOKEN
def test_get_s3_file_object_http_400_error(): """Tests Get S3 file object with HTTP 400 error. Looks like HTTP 400 is returned when AWS token expires and S3.Object.load is called. """ load_method = MagicMock( side_effect=botocore.exceptions.ClientError( {'Error': {'Code': '400', 'Message': 'Bad Request'}}, operation_name='mock load')) s3object = MagicMock(load=load_method) client = Mock() client.Object.return_value = s3object client.load.return_value = None type(client).s3path = PropertyMock(return_value='s3://testbucket/') meta = { 'client': client, 'stage_info': { 'location': 'sfc-teststage/rwyitestacco/users/1234/', 'locationType': 'S3', } } filename = "/path1/file2.txt" akey = SnowflakeS3Util.get_file_header(meta, filename) assert akey is None assert meta['result_status'] == ResultStatus.RENEW_TOKEN
def test_get_s3_file_object_http_400_error(): """Tests Get S3 file object with HTTP 400 error. Looks like HTTP 400 is returned when AWS token expires and S3.Object.load is called. """ load_method = MagicMock(side_effect=botocore.exceptions.ClientError( {"Error": { "Code": "400", "Message": "Bad Request" }}, operation_name="mock load", )) s3object = MagicMock(load=load_method) client = Mock() client.Object.return_value = s3object client.load.return_value = None type(client).s3path = PropertyMock(return_value="s3://testbucket/") client_meta = { "cloud_client": client, "stage_info": { "location": "sfc-teststage/rwyitestacco/users/1234/", "locationType": "S3", }, } meta = { "name": "data1.txt.gz", "stage_location_type": "S3", "src_file_name": path.join(THIS_DIR, "../data", "put_get_1.txt"), "client_meta": SFResourceMeta(**client_meta), } meta = SnowflakeFileMeta(**meta) filename = "/path1/file2.txt" akey = SnowflakeS3Util.get_file_header(meta, filename) assert akey is None assert meta.result_status == ResultStatus.RENEW_TOKEN
def test_get_header_expiry_error(caplog): """Tests whether token expiry error is handled as expected when getting header.""" caplog.set_level(logging.DEBUG, "snowflake.connector") meta = MINIMAL_METADATA mock_resource = MagicMock() mock_resource.load.side_effect = botocore.exceptions.ClientError( {"Error": { "Code": "ExpiredToken", "Message": "Just testing" }}, "Testing") with mock.patch( "snowflake.connector.s3_util.SnowflakeS3Util._get_s3_object", return_value=mock_resource, ): SnowflakeS3Util.get_file_header(meta, "file.txt") assert ( "snowflake.connector.s3_util", logging.DEBUG, "AWS Token expired. Renew and retry", ) in caplog.record_tuples assert meta.result_status == ResultStatus.RENEW_TOKEN
def test_get_header_unexpected_error(caplog): """Tests whether unexpected errors are handled as expected when getting header.""" meta = {} mock_resource = MagicMock() mock_resource.load.side_effect = botocore.exceptions.ClientError( {'Error': {'Code': '???', 'Message': 'Just testing'}}, 'Testing') mock_resource.bucket_name = "bucket" mock_resource.key = "key" with mock.patch('snowflake.connector.s3_util.SnowflakeS3Util._get_s3_object', return_value=mock_resource): assert SnowflakeS3Util.get_file_header(meta, 'file.txt') is None assert ('snowflake.connector.s3_util', logging.DEBUG, 'Failed to get metadata for bucket, key: An error occurred (???) when calling ' 'the Testing operation: Just testing') in caplog.record_tuples assert meta['result_status'] == ResultStatus.ERROR
def test_get_header_unexpected_error(caplog): """Tests whether unexpected errors are handled as expected when getting header.""" caplog.set_level(logging.DEBUG, "snowflake.connector") meta = MINIMAL_METADATA mock_resource = MagicMock() mock_resource.load.side_effect = botocore.exceptions.ClientError( {"Error": { "Code": "???", "Message": "Just testing" }}, "Testing") mock_resource.bucket_name = "bucket" mock_resource.key = "key" with mock.patch( "snowflake.connector.s3_util.SnowflakeS3Util._get_s3_object", return_value=mock_resource, ): assert SnowflakeS3Util.get_file_header(meta, "file.txt") is None assert ( "snowflake.connector.s3_util", logging.DEBUG, "Failed to get metadata for bucket, key: An error occurred (???) when calling " "the Testing operation: Just testing", ) in caplog.record_tuples assert meta.result_status == ResultStatus.ERROR