Index: chrome/common/extensions/docs/server2/cache_chain_object_store_test.py |
diff --git a/chrome/common/extensions/docs/server2/cache_chain_object_store_test.py b/chrome/common/extensions/docs/server2/cache_chain_object_store_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..a2fa22467b7c29fac8cabcc2f96ca77c9a855cfb |
--- /dev/null |
+++ b/chrome/common/extensions/docs/server2/cache_chain_object_store_test.py |
@@ -0,0 +1,162 @@ |
+#!/usr/bin/env python |
+# Copyright 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+from cache_chain_object_store import CacheChainObjectStore |
+from test_object_store import TestObjectStore |
+import unittest |
+ |
+class CacheChainObjectStoreTest(unittest.TestCase): |
+ def setUp(self): |
+ self._first = TestObjectStore('first', init={ |
+ 'storage.html': 'storage', |
+ }) |
+ self._second = TestObjectStore('second', init={ |
+ 'runtime.html': 'runtime', |
+ 'storage.html': 'storage', |
+ }) |
+ self._third = TestObjectStore('third', init={ |
+ 'commands.html': 'commands', |
+ 'runtime.html': 'runtime', |
+ 'storage.html': 'storage', |
+ }) |
+ self._store = CacheChainObjectStore( |
+ (self._first, self._second, self._third)) |
+ |
+ def testGetFromFirstLayer(self): |
+ self.assertEqual('storage', self._store.Get('storage.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1)) |
+ # Found in first layer, stop. |
+ self.assertTrue(*self._second.CheckAndReset()) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ # Cached in memory, won't re-query. |
+ self.assertEqual('storage', self._store.Get('storage.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset()) |
+ self.assertTrue(*self._second.CheckAndReset()) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ |
+ def testGetFromSecondLayer(self): |
+ self.assertEqual('runtime', self._store.Get('runtime.html').Get()) |
+ # Not found in first layer but found in second. |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ # First will now have it cached. |
+ self.assertEqual('runtime', self._first.Get('runtime.html').Get()) |
+ self._first.Reset() |
+ # Cached in memory, won't re-query. |
+ self.assertEqual('runtime', self._store.Get('runtime.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset()) |
+ self.assertTrue(*self._second.CheckAndReset()) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ |
+ def testGetFromThirdLayer(self): |
+ self.assertEqual('commands', self._store.Get('commands.html').Get()) |
+ # As above but for third. |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(get_count=1)) |
+ # First and second will now have it cached. |
+ self.assertEqual('commands', self._first.Get('commands.html').Get()) |
+ self.assertEqual('commands', self._second.Get('commands.html').Get()) |
+ self._first.Reset() |
+ self._second.Reset() |
+ # Cached in memory, won't re-query. |
+ self.assertEqual('commands', self._store.Get('commands.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset()) |
+ self.assertTrue(*self._second.CheckAndReset()) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ |
+ def testGetFromAllLayers(self): |
+ self.assertEqual({ |
+ 'commands.html': 'commands', |
+ 'runtime.html': 'runtime', |
+ 'storage.html': 'storage', |
+ }, self._store.GetMulti(('commands.html', |
+ 'runtime.html', |
+ 'storage.html')).Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(get_count=1)) |
+ # First and second will have it all cached. |
+ self.assertEqual('runtime', self._first.Get('runtime.html').Get()) |
+ self.assertEqual('commands', self._first.Get('commands.html').Get()) |
+ self.assertEqual('commands', self._second.Get('commands.html').Get()) |
+ self._first.Reset() |
+ self._second.Reset() |
+ # Cached in memory. |
+ self.assertEqual({ |
+ 'commands.html': 'commands', |
+ 'runtime.html': 'runtime', |
+ 'storage.html': 'storage', |
+ }, self._store.GetMulti(('commands.html', |
+ 'runtime.html', |
+ 'storage.html')).Get()) |
+ self.assertTrue(*self._first.CheckAndReset()) |
+ self.assertTrue(*self._second.CheckAndReset()) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ |
+ def testPartiallyCachedInMemory(self): |
+ self.assertEqual({ |
+ 'commands.html': 'commands', |
+ 'storage.html': 'storage', |
+ }, self._store.GetMulti(('commands.html', 'storage.html')).Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(get_count=1)) |
+ # runtime wasn't cached in memory, so stores should still be queried. |
+ self.assertEqual({ |
+ 'commands.html': 'commands', |
+ 'runtime.html': 'runtime', |
+ }, self._store.GetMulti(('commands.html', 'runtime.html')).Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ |
+ def testNotFound(self): |
+ self.assertEqual(None, self._store.Get('notfound.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(get_count=1)) |
+ # Not-foundedness shouldn't be cached. |
+ self.assertEqual(None, self._store.Get('notfound.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(get_count=1)) |
+ # Test some things not found, some things found. |
+ self.assertEqual({ |
+ 'runtime.html': 'runtime', |
+ }, self._store.GetMulti(('runtime.html', 'notfound.html')).Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1, set_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(get_count=1)) |
+ |
+ def testSet(self): |
+ self._store.Set('hello.html', 'hello') |
+ self.assertTrue(*self._first.CheckAndReset(set_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(set_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(set_count=1)) |
+ # Should have cached it. |
+ self.assertEqual('hello', self._store.Get('hello.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset()) |
+ self.assertTrue(*self._second.CheckAndReset()) |
+ self.assertTrue(*self._third.CheckAndReset()) |
+ |
+ def testDel(self): |
+ # Cache it. |
+ self.assertEqual('storage', self._store.Get('storage.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1)) |
+ # Delete it. |
+ self._store.Del('storage.html') |
+ self.assertTrue(*self._first.CheckAndReset(del_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(del_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(del_count=1)) |
+ # Not cached anymore. |
+ self.assertEqual(None, self._store.Get('storage.html').Get()) |
+ self.assertTrue(*self._first.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._second.CheckAndReset(get_count=1)) |
+ self.assertTrue(*self._third.CheckAndReset(get_count=1)) |
+ |
+if __name__ == '__main__': |
+ unittest.main() |