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