- introduce storage cache to make every unique storage connection only once - add functionality to pass optional processing kwargs in queue message like the operation key to the processing function
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
from dataclasses import asdict
|
|
|
|
import pytest
|
|
|
|
from pyinfra.storage.storage_info import AzureStorageInfo, StorageInfo, DefaultStorageCache
|
|
|
|
|
|
@pytest.fixture
|
|
def storage_infos():
|
|
return [
|
|
AzureStorageInfo(connection_string="first", bucket_name="Thorsten"),
|
|
AzureStorageInfo(connection_string="first", bucket_name="Klaus"),
|
|
AzureStorageInfo(connection_string="second", bucket_name="Thorsten"),
|
|
AzureStorageInfo(connection_string="third", bucket_name="Klaus"),
|
|
]
|
|
|
|
|
|
@pytest.fixture
|
|
def storage_cache(max_size):
|
|
def get_connection_from_storage_info_mock(storage_info: StorageInfo):
|
|
return asdict(storage_info)
|
|
|
|
return DefaultStorageCache(max_size=max_size, get_value=get_connection_from_storage_info_mock)
|
|
|
|
|
|
class TestStorageCache:
|
|
def test_same_storage_info_has_same_hash(self, storage_infos):
|
|
assert storage_infos[0].__hash__() == storage_infos[1].__hash__()
|
|
|
|
@pytest.mark.parametrize("max_size", [4])
|
|
def test_same_connection_different_bucket_does_not_create_new_connection(self, storage_cache, storage_infos):
|
|
value = storage_cache[storage_infos[0]]
|
|
assert value == asdict((storage_infos[0]))
|
|
|
|
value = storage_cache[storage_infos[1]]
|
|
assert value == asdict((storage_infos[0]))
|
|
|
|
@pytest.mark.parametrize("max_size", [2])
|
|
def test_max_size_breached_removes_oldest_key(self, storage_cache, storage_infos):
|
|
storage_cache.set_key(storage_infos[0])
|
|
storage_cache.set_key(storage_infos[2])
|
|
storage_cache.set_key(storage_infos[3])
|
|
|
|
assert len(storage_cache) == 2
|
|
assert storage_infos[0] not in storage_cache
|
|
assert storage_infos[2] in storage_cache
|
|
assert storage_infos[3] in storage_cache
|