pyinfra/tests/storage_cache_test.py
Julius Unverfehrt 97309fe580 update PayloadProcessor
- 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
2023-03-24 11:18:44 +01:00

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