Merge in RR/pyinfra from storage-data-access-failure-dead-letter-queue-fix to master
Squashed commit of the following:
commit 1f1fcdf0357fe7817b36eac7e369d5ef75ec5af4
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Mon May 2 14:27:29 2022 +0200
fix: storage data access failure now triggers dead letter queue publishing
53 lines
2.3 KiB
Python
53 lines
2.3 KiB
Python
import logging
|
|
|
|
import pytest
|
|
|
|
from pyinfra.exceptions import DataLoadingFailure
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
|
|
@pytest.mark.parametrize("client_name", ["mock", "azure", "s3"], scope="session")
|
|
class TestStorage:
|
|
def test_clearing_bucket_yields_empty_bucket(self, storage, bucket_name):
|
|
storage.clear_bucket(bucket_name)
|
|
data_received = storage.get_all_objects(bucket_name)
|
|
assert not {*data_received}
|
|
|
|
def test_getting_object_put_in_bucket_is_object(self, storage, bucket_name):
|
|
storage.clear_bucket(bucket_name)
|
|
storage.put_object(bucket_name, "file", b"content")
|
|
data_received = storage.get_object(bucket_name, "file")
|
|
assert b"content" == data_received
|
|
|
|
def test_getting_nested_object_put_in_bucket_is_nested_object(self, storage, bucket_name):
|
|
storage.clear_bucket(bucket_name)
|
|
storage.put_object(bucket_name, "folder/file", b"content")
|
|
data_received = storage.get_object(bucket_name, "folder/file")
|
|
assert b"content" == data_received
|
|
|
|
def test_getting_objects_put_in_bucket_are_objects(self, storage, bucket_name):
|
|
storage.clear_bucket(bucket_name)
|
|
storage.put_object(bucket_name, "file1", b"content 1")
|
|
storage.put_object(bucket_name, "folder/file2", b"content 2")
|
|
data_received = storage.get_all_objects(bucket_name)
|
|
assert {b"content 1", b"content 2"} == {*data_received}
|
|
|
|
def test_make_bucket_produces_bucket(self, storage, bucket_name):
|
|
storage.clear_bucket(bucket_name)
|
|
storage.make_bucket(bucket_name)
|
|
assert storage.has_bucket(bucket_name)
|
|
|
|
def test_listing_bucket_files_yields_all_files_in_bucket(self, storage, bucket_name):
|
|
storage.clear_bucket(bucket_name)
|
|
storage.put_object(bucket_name, "file1", b"content 1")
|
|
storage.put_object(bucket_name, "file2", b"content 2")
|
|
full_names_received = storage.get_all_object_names(bucket_name)
|
|
assert {(bucket_name, "file1"), (bucket_name, "file2")} == {*full_names_received}
|
|
|
|
def test_data_loading_failure_raised_if_object_not_present(self, storage, bucket_name):
|
|
storage.clear_bucket(bucket_name)
|
|
with pytest.raises(DataLoadingFailure):
|
|
storage.get_object(bucket_name, "folder/file")
|