Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.cache_unittest.py @ 415feb2e

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()