Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: appengine/monorail/services/test/caches_test.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is govered by a BSD-style
3 # license that can be found in the LICENSE file or at
4 # https://developers.google.com/open-source/licenses/bsd
5
6 """Tests for the cache classes."""
7
8 import unittest
9
10 from google.appengine.ext import testbed
11
12 from services import caches
13 from testing import fake
14
15
16 class RamCacheTest(unittest.TestCase):
17
18 def setUp(self):
19 self.cnxn = 'fake connection'
20 self.cache_manager = fake.CacheManager()
21 self.ram_cache = caches.RamCache(self.cache_manager, 'issue', max_size=3)
22
23 def testCacheItem(self):
24 self.ram_cache.CacheItem(123, 'foo')
25 self.assertEqual('foo', self.ram_cache.cache[123])
26
27 def testCacheItem_DropsOldItems(self):
28 self.ram_cache.CacheItem(123, 'foo')
29 self.ram_cache.CacheItem(234, 'foo')
30 self.ram_cache.CacheItem(345, 'foo')
31 self.ram_cache.CacheItem(456, 'foo')
32 # The cache does not get bigger than its limit.
33 self.assertEqual(3, len(self.ram_cache.cache))
34 # An old value is dropped, not the newly added one.
35 self.assertIn(456, self.ram_cache.cache)
36
37 def testCacheAll(self):
38 self.ram_cache.CacheAll({123: 'foo'})
39 self.assertEqual('foo', self.ram_cache.cache[123])
40
41 def testCacheAll_DropsOldItems(self):
42 self.ram_cache.CacheAll({1: 'a', 2: 'b', 3: 'c'})
43 self.ram_cache.CacheAll({4: 'x', 5: 'y'})
44 # The cache does not get bigger than its limit.
45 self.assertEqual(3, len(self.ram_cache.cache))
46 # An old value is dropped, not the newly added one.
47 self.assertIn(4, self.ram_cache.cache)
48 self.assertIn(5, self.ram_cache.cache)
49 self.assertEqual('y', self.ram_cache.cache[5])
50
51 def testHasItem(self):
52 self.ram_cache.CacheItem(123, 'foo')
53 self.assertTrue(self.ram_cache.HasItem(123))
54 self.assertFalse(self.ram_cache.HasItem(999))
55
56 def testGetAll(self):
57 self.ram_cache.CacheItem(123, 'foo')
58 self.ram_cache.CacheItem(124, 'bar')
59 hits, misses = self.ram_cache.GetAll([123, 124, 999])
60 self.assertEqual({123: 'foo', 124: 'bar'}, hits)
61 self.assertEqual([999], misses)
62
63 def testLocalInvalidate(self):
64 self.ram_cache.CacheAll({123: 'a', 124: 'b', 125: 'c'})
65 self.ram_cache.LocalInvalidate(124)
66 self.assertEqual(2, len(self.ram_cache.cache))
67 self.assertNotIn(124, self.ram_cache.cache)
68
69 self.ram_cache.LocalInvalidate(999)
70 self.assertEqual(2, len(self.ram_cache.cache))
71
72 def testInvalidateKeys(self):
73 self.ram_cache.CacheAll({123: 'a', 124: 'b', 125: 'c'})
74 self.ram_cache.InvalidateKeys(self.cnxn, [124])
75 self.assertEqual(2, len(self.ram_cache.cache))
76 self.assertNotIn(124, self.ram_cache.cache)
77 self.assertEqual(self.cache_manager.last_call,
78 ('StoreInvalidateRows', self.cnxn, 'issue', [124]))
79
80 def testLocalInvalidateAll(self):
81 self.ram_cache.CacheAll({123: 'a', 124: 'b', 125: 'c'})
82 self.ram_cache.LocalInvalidateAll()
83 self.assertEqual(0, len(self.ram_cache.cache))
84
85 def testInvalidateAll(self):
86 self.ram_cache.CacheAll({123: 'a', 124: 'b', 125: 'c'})
87 self.ram_cache.InvalidateAll(self.cnxn)
88 self.assertEqual(0, len(self.ram_cache.cache))
89 self.assertEqual(self.cache_manager.last_call,
90 ('StoreInvalidateAll', self.cnxn, 'issue'))
91
92
93 class TestableTwoLevelCache(caches.AbstractTwoLevelCache):
94
95 def __init__(self, cache_manager, kind, max_size=None):
96 super(TestableTwoLevelCache, self).__init__(
97 cache_manager, kind, 'testable:', None, max_size=max_size)
98
99 # pylint: disable=unused-argument
100 def FetchItems(self, cnxn, keys, **kwargs):
101 """On RAM and memcache miss, hit the database."""
102 return {key: key for key in keys if key < 900}
103
104
105 class AbstractTwoLevelCacheTest(unittest.TestCase):
106
107 def setUp(self):
108 self.testbed = testbed.Testbed()
109 self.testbed.activate()
110 self.testbed.init_memcache_stub()
111
112 self.cnxn = 'fake connection'
113 self.cache_manager = fake.CacheManager()
114 self.testable_cache = TestableTwoLevelCache(
115 self.cache_manager, 'issue', max_size=3)
116
117 def testCacheItem(self):
118 self.testable_cache.CacheItem(123, 'foo')
119 self.assertEqual('foo', self.testable_cache.cache.cache[123])
120
121 def testHasItem(self):
122 self.testable_cache.CacheItem(123, 'foo')
123 self.assertTrue(self.testable_cache.HasItem(123))
124 self.assertFalse(self.testable_cache.HasItem(444))
125 self.assertFalse(self.testable_cache.HasItem(999))
126
127 def testGetAll_FetchGetsItFromDB(self):
128 self.testable_cache.CacheItem(123, 'foo')
129 self.testable_cache.CacheItem(124, 'bar')
130 hits, misses = self.testable_cache.GetAll(
131 self.cnxn, [123, 124, 333, 444])
132 self.assertEqual({123: 'foo', 124: 'bar', 333: 333, 444: 444}, hits)
133 self.assertEqual([], misses)
134
135 def testGetAll_FetchDoesNotFindIt(self):
136 self.testable_cache.CacheItem(123, 'foo')
137 self.testable_cache.CacheItem(124, 'bar')
138 hits, misses = self.testable_cache.GetAll(
139 self.cnxn, [123, 124, 999])
140 self.assertEqual({123: 'foo', 124: 'bar'}, hits)
141 self.assertEqual([999], misses)
142
143 def testInvalidateKeys(self):
144 self.testable_cache.CacheItem(123, 'a')
145 self.testable_cache.CacheItem(124, 'b')
146 self.testable_cache.CacheItem(125, 'c')
147 self.testable_cache.InvalidateKeys(self.cnxn, [124])
148 self.assertEqual(2, len(self.testable_cache.cache.cache))
149 self.assertNotIn(124, self.testable_cache.cache.cache)
150 self.assertEqual(self.cache_manager.last_call,
151 ('StoreInvalidateRows', self.cnxn, 'issue', [124]))
152
153 def testGetAllAlreadyInRam(self):
154 self.testable_cache.CacheItem(123, 'foo')
155 self.testable_cache.CacheItem(124, 'bar')
156 hits, misses = self.testable_cache.GetAllAlreadyInRam(
157 [123, 124, 333, 444, 999])
158 self.assertEqual({123: 'foo', 124: 'bar'}, hits)
159 self.assertEqual([333, 444, 999], misses)
160
161 def testInvalidateAllRamEntries(self):
162 self.testable_cache.CacheItem(123, 'foo')
163 self.testable_cache.CacheItem(124, 'bar')
164 self.testable_cache.InvalidateAllRamEntries(self.cnxn)
165 self.assertFalse(self.testable_cache.HasItem(123))
166 self.assertFalse(self.testable_cache.HasItem(124))
167
168
169 if __name__ == '__main__':
170 unittest.main()
OLDNEW
« no previous file with comments | « appengine/monorail/services/test/cachemanager_svc_test.py ('k') | appengine/monorail/services/test/client_config_svc_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698