root / test / ganeti.cache_unittest.py @ 416eba57
History | View | Annotate | Download (3.6 kB)
1 | 13699e58 | René Nussbaumer | #!/usr/bin/python
|
---|---|---|---|
2 | 13699e58 | René Nussbaumer | #
|
3 | 13699e58 | René Nussbaumer | |
4 | 13699e58 | René Nussbaumer | # Copyright (C) 2011 Google Inc.
|
5 | 13699e58 | René Nussbaumer | #
|
6 | 13699e58 | René Nussbaumer | # This program is free software; you can redistribute it and/or modify
|
7 | 13699e58 | René Nussbaumer | # it under the terms of the GNU General Public License as published by
|
8 | 13699e58 | René Nussbaumer | # the Free Software Foundation; either version 2 of the License, or
|
9 | 13699e58 | René Nussbaumer | # (at your option) any later version.
|
10 | 13699e58 | René Nussbaumer | #
|
11 | 13699e58 | René Nussbaumer | # This program is distributed in the hope that it will be useful, but
|
12 | 13699e58 | René Nussbaumer | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 13699e58 | René Nussbaumer | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | 13699e58 | René Nussbaumer | # General Public License for more details.
|
15 | 13699e58 | René Nussbaumer | #
|
16 | 13699e58 | René Nussbaumer | # You should have received a copy of the GNU General Public License
|
17 | 13699e58 | René Nussbaumer | # along with this program; if not, write to the Free Software
|
18 | 13699e58 | René Nussbaumer | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
19 | 13699e58 | René Nussbaumer | # 02110-1301, USA.
|
20 | 13699e58 | René Nussbaumer | |
21 | 13699e58 | René Nussbaumer | """Script for testing ganeti.cache"""
|
22 | 13699e58 | René Nussbaumer | |
23 | 13699e58 | René Nussbaumer | import testutils |
24 | 13699e58 | René Nussbaumer | import unittest |
25 | 13699e58 | René Nussbaumer | |
26 | 13699e58 | René Nussbaumer | from ganeti import cache |
27 | 13699e58 | René Nussbaumer | |
28 | 13699e58 | René Nussbaumer | |
29 | 13699e58 | René Nussbaumer | class ReturnStub: |
30 | 13699e58 | René Nussbaumer | def __init__(self, values): |
31 | 13699e58 | René Nussbaumer | self.values = values
|
32 | 13699e58 | René Nussbaumer | |
33 | 13699e58 | René Nussbaumer | def __call__(self): |
34 | 13699e58 | René Nussbaumer | assert self.values |
35 | 13699e58 | René Nussbaumer | return self.values.pop(0) |
36 | 13699e58 | René Nussbaumer | |
37 | 13699e58 | René Nussbaumer | |
38 | 13699e58 | René Nussbaumer | class SimpleCacheTest(unittest.TestCase): |
39 | 13699e58 | René Nussbaumer | def setUp(self): |
40 | 13699e58 | René Nussbaumer | self.cache = cache.SimpleCache()
|
41 | 13699e58 | René Nussbaumer | |
42 | 13699e58 | René Nussbaumer | def testNoKey(self): |
43 | 13699e58 | René Nussbaumer | self.assertEqual(self.cache.GetMulti(["i-dont-exist", "neither-do-i", "no"]), |
44 | 13699e58 | René Nussbaumer | [None, None, None]) |
45 | 13699e58 | René Nussbaumer | |
46 | 13699e58 | René Nussbaumer | def testCache(self): |
47 | 13699e58 | René Nussbaumer | value = 0xc0ffee
|
48 | 13699e58 | René Nussbaumer | self.assert_(self.cache.Store("i-exist", value)) |
49 | 13699e58 | René Nussbaumer | self.assertEqual(self.cache.GetMulti(["i-exist"]), [value]) |
50 | 13699e58 | René Nussbaumer | |
51 | 13699e58 | René Nussbaumer | def testMixed(self): |
52 | 13699e58 | René Nussbaumer | value = 0xb4dc0de
|
53 | 13699e58 | René Nussbaumer | self.assert_(self.cache.Store("i-exist", value)) |
54 | 13699e58 | René Nussbaumer | self.assertEqual(self.cache.GetMulti(["i-exist", "i-dont"]), [value, None]) |
55 | 13699e58 | René Nussbaumer | |
56 | 13699e58 | René Nussbaumer | def testTtl(self): |
57 | 13699e58 | René Nussbaumer | my_times = ReturnStub([0, 1, 1, 2, 3, 5]) |
58 | 13699e58 | René Nussbaumer | ttl_cache = cache.SimpleCache(_time_fn=my_times) |
59 | 13699e58 | René Nussbaumer | self.assert_(ttl_cache.Store("test-expire", 0xdeadbeef, ttl=2)) |
60 | 13699e58 | René Nussbaumer | |
61 | 13699e58 | René Nussbaumer | # At this point time will return 2, 1 (start) + 2 (ttl) = 3, still valid
|
62 | 13699e58 | René Nussbaumer | self.assertEqual(ttl_cache.Get("test-expire"), 0xdeadbeef) |
63 | 13699e58 | René Nussbaumer | |
64 | 13699e58 | René Nussbaumer | # At this point time will return 3, 1 (start) + 2 (ttl) = 3, still valid
|
65 | 13699e58 | René Nussbaumer | self.assertEqual(ttl_cache.Get("test-expire"), 0xdeadbeef) |
66 | 13699e58 | René Nussbaumer | |
67 | 13699e58 | René Nussbaumer | # We are at 5, < 3, invalid
|
68 | 13699e58 | René Nussbaumer | self.assertEqual(ttl_cache.Get("test-expire"), None) |
69 | 13699e58 | René Nussbaumer | self.assertFalse(my_times.values)
|
70 | 13699e58 | René Nussbaumer | |
71 | 13699e58 | René Nussbaumer | def testCleanup(self): |
72 | 13699e58 | René Nussbaumer | my_times = ReturnStub([0, 1, 1, 2, 2, 3, 3, 5, 5, |
73 | 13699e58 | René Nussbaumer | 21 + cache.SimpleCache.CLEANUP_ROUND,
|
74 | 13699e58 | René Nussbaumer | 34 + cache.SimpleCache.CLEANUP_ROUND,
|
75 | 13699e58 | René Nussbaumer | 55 + cache.SimpleCache.CLEANUP_ROUND * 2, |
76 | 13699e58 | René Nussbaumer | 89 + cache.SimpleCache.CLEANUP_ROUND * 3]) |
77 | 13699e58 | René Nussbaumer | # Index 0
|
78 | 13699e58 | René Nussbaumer | ttl_cache = cache.SimpleCache(_time_fn=my_times) |
79 | 13699e58 | René Nussbaumer | # Index 1, 2
|
80 | 13699e58 | René Nussbaumer | self.assert_(ttl_cache.Store("foobar", 0x1dea, ttl=6)) |
81 | 13699e58 | René Nussbaumer | # Index 3, 4
|
82 | 13699e58 | René Nussbaumer | self.assert_(ttl_cache.Store("baz", 0xc0dea55, ttl=11)) |
83 | 13699e58 | René Nussbaumer | # Index 6, 7
|
84 | 13699e58 | René Nussbaumer | self.assert_(ttl_cache.Store("long-foobar", "pretty long", |
85 | 13699e58 | René Nussbaumer | ttl=(22 + cache.SimpleCache.CLEANUP_ROUND)))
|
86 | 13699e58 | René Nussbaumer | # Index 7, 8
|
87 | 13699e58 | René Nussbaumer | self.assert_(ttl_cache.Store("foobazbar", "alive forever")) |
88 | 13699e58 | René Nussbaumer | |
89 | 13699e58 | René Nussbaumer | self.assertEqual(set(ttl_cache.cache.keys()), |
90 | 13699e58 | René Nussbaumer | set(["foobar", "baz", "long-foobar", "foobazbar"])) |
91 | 13699e58 | René Nussbaumer | ttl_cache.Cleanup() |
92 | 13699e58 | René Nussbaumer | self.assertEqual(set(ttl_cache.cache.keys()), |
93 | 13699e58 | René Nussbaumer | set(["long-foobar", "foobazbar"])) |
94 | 13699e58 | René Nussbaumer | ttl_cache.Cleanup() |
95 | 13699e58 | René Nussbaumer | self.assertEqual(set(ttl_cache.cache.keys()), |
96 | 13699e58 | René Nussbaumer | set(["long-foobar", "foobazbar"])) |
97 | 13699e58 | René Nussbaumer | ttl_cache.Cleanup() |
98 | 13699e58 | René Nussbaumer | self.assertEqual(set(ttl_cache.cache.keys()), set(["foobazbar"])) |
99 | 13699e58 | René Nussbaumer | ttl_cache.Cleanup() |
100 | 13699e58 | René Nussbaumer | self.assertEqual(set(ttl_cache.cache.keys()), set(["foobazbar"])) |
101 | 13699e58 | René Nussbaumer | |
102 | 13699e58 | René Nussbaumer | |
103 | 13699e58 | René Nussbaumer | if __name__ == "__main__": |
104 | 13699e58 | René Nussbaumer | testutils.GanetiTestProgram() |