1import itertools
2from unittest import TestCase
3
4from dogpile.cache.api import NO_VALUE
5from . import eq_
6from ._fixtures import _GenericBackendFixture
7
8
9class NullBackendTest(_GenericBackendFixture, TestCase):
10    backend = "dogpile.cache.null"
11
12    def test_get(self):
13        reg = self._region()
14
15        eq_(reg.get("some key"), NO_VALUE)
16
17    def test_set(self):
18        reg = self._region()
19        reg.set("some key", "some value")
20        eq_(reg.get("some key"), NO_VALUE)
21
22    def test_delete(self):
23        reg = self._region()
24        reg.delete("some key")
25        eq_(reg.get("some key"), NO_VALUE)
26
27    def test_get_multi(self):
28        reg = self._region()
29
30        eq_(reg.get_multi(["a", "b", "c"]), [NO_VALUE, NO_VALUE, NO_VALUE])
31
32    def test_set_multi(self):
33        reg = self._region()
34        reg.set_multi({"a": 1, "b": 2, "c": 3})
35        eq_(reg.get_multi(["a", "b", "c"]), [NO_VALUE, NO_VALUE, NO_VALUE])
36
37    def test_delete_multi(self):
38        reg = self._region()
39        reg.delete_multi(["a", "b", "c"])
40        eq_(reg.get_multi(["a", "b", "c"]), [NO_VALUE, NO_VALUE, NO_VALUE])
41
42    def test_decorator(self):
43        reg = self._region()
44
45        counter = itertools.count(1)
46
47        @reg.cache_on_arguments()
48        def go(a, b):
49            val = next(counter)
50            return val, a, b
51
52        eq_(go(1, 2), (1, 1, 2))
53        eq_(go(1, 2), (2, 1, 2))
54        eq_(go(1, 3), (3, 1, 3))
55
56    def test_mutex(self):
57        backend = self._backend()
58        mutex = backend.get_mutex("foo")
59
60        ac = mutex.acquire()
61        assert ac
62        mutex.release()
63
64        ac2 = mutex.acquire(False)
65        assert ac2
66        mutex.release()
67
68    def test_mutex_doesnt_actually_lock(self):
69        backend = self._backend()
70        mutex = backend.get_mutex("foo")
71
72        ac = mutex.acquire()
73        assert ac
74
75        ac2 = mutex.acquire(False)
76        assert ac2
77        mutex.release()
78