|
1 # Unit tests for cache framework |
|
2 # Uses whatever cache backend is set in the test settings file. |
|
3 |
|
4 from django.core.cache import cache |
|
5 import time, unittest |
|
6 |
|
7 # functions/classes for complex data type tests |
|
8 def f(): |
|
9 return 42 |
|
10 class C: |
|
11 def m(n): |
|
12 return 24 |
|
13 |
|
14 class Cache(unittest.TestCase): |
|
15 def test_simple(self): |
|
16 # simple set/get |
|
17 cache.set("key", "value") |
|
18 self.assertEqual(cache.get("key"), "value") |
|
19 |
|
20 def test_non_existent(self): |
|
21 # get with non-existent keys |
|
22 self.assertEqual(cache.get("does not exist"), None) |
|
23 self.assertEqual(cache.get("does not exist", "bang!"), "bang!") |
|
24 |
|
25 def test_get_many(self): |
|
26 # get_many |
|
27 cache.set('a', 'a') |
|
28 cache.set('b', 'b') |
|
29 cache.set('c', 'c') |
|
30 cache.set('d', 'd') |
|
31 self.assertEqual(cache.get_many(['a', 'c', 'd']), {'a' : 'a', 'c' : 'c', 'd' : 'd'}) |
|
32 self.assertEqual(cache.get_many(['a', 'b', 'e']), {'a' : 'a', 'b' : 'b'}) |
|
33 |
|
34 def test_delete(self): |
|
35 # delete |
|
36 cache.set("key1", "spam") |
|
37 cache.set("key2", "eggs") |
|
38 self.assertEqual(cache.get("key1"), "spam") |
|
39 cache.delete("key1") |
|
40 self.assertEqual(cache.get("key1"), None) |
|
41 self.assertEqual(cache.get("key2"), "eggs") |
|
42 |
|
43 def test_has_key(self): |
|
44 # has_key |
|
45 cache.set("hello", "goodbye") |
|
46 self.assertEqual(cache.has_key("hello"), True) |
|
47 self.assertEqual(cache.has_key("goodbye"), False) |
|
48 |
|
49 def test_data_types(self): |
|
50 # test data types |
|
51 stuff = { |
|
52 'string' : 'this is a string', |
|
53 'int' : 42, |
|
54 'list' : [1, 2, 3, 4], |
|
55 'tuple' : (1, 2, 3, 4), |
|
56 'dict' : {'A': 1, 'B' : 2}, |
|
57 'function' : f, |
|
58 'class' : C, |
|
59 } |
|
60 for (key, value) in stuff.items(): |
|
61 cache.set(key, value) |
|
62 self.assertEqual(cache.get(key), value) |
|
63 |
|
64 def test_expiration(self): |
|
65 # expiration |
|
66 cache.set('expire', 'very quickly', 1) |
|
67 time.sleep(2) |
|
68 self.assertEqual(cache.get("expire"), None) |
|
69 |
|
70 if __name__ == '__main__': |
|
71 unittest.main() |