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
예제 #3
0
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
예제 #4
0
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
예제 #6
0
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