mirror of
https://github.com/quay/quay.git
synced 2026-01-27 18:42:52 +03:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
import pytest
|
|
|
|
from mock import patch
|
|
|
|
from data.cache import InMemoryDataModelCache, NoopDataModelCache, MemcachedModelCache
|
|
from data.cache.cache_key import CacheKey
|
|
|
|
|
|
class MockClient(object):
|
|
def __init__(self, server, **kwargs):
|
|
self.data = {}
|
|
|
|
def get(self, key, default=None):
|
|
return self.data.get(key, default)
|
|
|
|
def set(self, key, value, expire=None):
|
|
self.data[key] = value
|
|
|
|
|
|
@pytest.mark.parametrize("cache_type", [(NoopDataModelCache), (InMemoryDataModelCache),])
|
|
def test_caching(cache_type):
|
|
key = CacheKey("foo", "60m")
|
|
cache = cache_type()
|
|
|
|
# Perform two retrievals, and make sure both return.
|
|
assert cache.retrieve(key, lambda: {"a": 1234}) == {"a": 1234}
|
|
assert cache.retrieve(key, lambda: {"a": 1234}) == {"a": 1234}
|
|
|
|
|
|
def test_memcache():
|
|
key = CacheKey("foo", "60m")
|
|
with patch("data.cache.impl.Client", MockClient):
|
|
cache = MemcachedModelCache(("127.0.0.1", "-1"))
|
|
assert cache.retrieve(key, lambda: {"a": 1234}) == {"a": 1234}
|
|
assert cache.retrieve(key, lambda: {"a": 1234}) == {"a": 1234}
|
|
|
|
|
|
def test_memcache_should_cache():
|
|
key = CacheKey("foo", None)
|
|
|
|
def sc(value):
|
|
return value["a"] != 1234
|
|
|
|
with patch("data.cache.impl.Client", MockClient):
|
|
cache = MemcachedModelCache(("127.0.0.1", "-1"))
|
|
assert cache.retrieve(key, lambda: {"a": 1234}, should_cache=sc) == {"a": 1234}
|
|
|
|
# Ensure not cached since it was `1234`.
|
|
assert cache._get_client().get(key.key) is None
|
|
|
|
# Ensure cached.
|
|
assert cache.retrieve(key, lambda: {"a": 2345}, should_cache=sc) == {"a": 2345}
|
|
assert cache._get_client().get(key.key) is not None
|
|
assert cache.retrieve(key, lambda: {"a": 2345}, should_cache=sc) == {"a": 2345}
|