1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
from time import sleep
import pytest
from conftest import TestData
from conftest import under_uwsgi
class CommonTests(TestData):
"""A base set of tests to be run for all cache types"""
def test_set_get(self):
cache = self.cache_factory()
for k, v in self.sample_pairs.items():
assert cache.set(k, v)
assert cache.get(k) == v
def test_set_get_many(self):
cache = self.cache_factory()
result = cache.set_many(self.sample_pairs)
assert result == list(self.sample_pairs.keys())
values = cache.get_many(*self.sample_pairs)
assert values == list(self.sample_pairs.values())
def test_get_dict(self):
cache = self.cache_factory()
cache.set_many(self.sample_pairs)
d = cache.get_dict(*self.sample_pairs)
assert d == self.sample_pairs
def test_delete(self):
cache = self.cache_factory()
for k, v in self.sample_pairs.items():
cache.set(k, v)
assert cache.delete(k)
assert not cache.get(k)
def test_delete_many(self):
cache = self.cache_factory()
cache.set_many(self.sample_pairs)
result = cache.delete_many(*self.sample_pairs)
assert result == list(self.sample_pairs.keys())
assert not any(cache.get_many(*self.sample_pairs))
def test_delete_many_ignore_errors(self):
cache = self.cache_factory()
cache.set("bacon", "spam")
cache.delete_many("eggs", "bacon")
assert cache.get("bacon") is None
def test_add(self):
cache = self.cache_factory()
cache.set_many(self.sample_pairs)
for k in self.sample_pairs:
assert not cache.add(k, "updated")
assert cache.get_many(*self.sample_pairs) == list(self.sample_pairs.values())
for k, v in self.sample_pairs.items():
assert cache.add(f"{k}-new", v)
assert cache.get(f"{k}-new") == v
def test_inc_dec(self):
cache = self.cache_factory()
for n in self.sample_numbers:
assert not cache.get(f"{n}-key-inc")
assert cache.inc(f"{n}-key-inc", n) == n
assert cache.get(f"{n}-key-inc") == n
assert cache.dec(f"{n}-key-dec", n) == -n
assert cache.get(f"{n}-key-dec") == -n
assert cache.dec(f"{n}-key-inc", 5) == n - 5
def test_expiration(self):
if under_uwsgi():
pytest.skip(
"uwsgi uses a separate sweeper thread to clean"
" expired chache entries, thus the testing"
" of such feature must be handled differently"
" from other cache types."
)
cache = self.cache_factory()
for k, v in self.sample_pairs.items():
cache.set(f"{k}-t0", v, timeout=0)
cache.set(f"{k}-t1", v, timeout=1)
sleep(4)
for k, v in self.sample_pairs.items():
assert cache.get(f"{k}-t0") == v
assert not cache.get(f"{k}-t1")
|