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