| Index: chrome/common/extensions/docs/server2/caching_file_system_test.py
|
| diff --git a/chrome/common/extensions/docs/server2/caching_file_system_test.py b/chrome/common/extensions/docs/server2/caching_file_system_test.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..62e0739082f351e4f7e12f5107452ca59be8a39b
|
| --- /dev/null
|
| +++ b/chrome/common/extensions/docs/server2/caching_file_system_test.py
|
| @@ -0,0 +1,107 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2012 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.
|
| +
|
| +import os
|
| +import sys
|
| +import unittest
|
| +
|
| +from caching_file_system import CachingFileSystem
|
| +from file_system import FileSystem, StatInfo
|
| +from future import Future
|
| +from in_memory_object_store import InMemoryObjectStore
|
| +from local_file_system import LocalFileSystem
|
| +from test_file_system import TestFileSystem
|
| +
|
| +def _CreateLocalFs():
|
| + return LocalFileSystem(
|
| + os.path.join(sys.path[0], 'test_data', 'file_system'))
|
| +
|
| +class CachingFileSystemTest(unittest.TestCase):
|
| + def testReadFiles(self):
|
| + file_system = CachingFileSystem(_CreateLocalFs())
|
| + expected = {
|
| + './test1.txt': 'test1\n',
|
| + './test2.txt': 'test2\n',
|
| + './test3.txt': 'test3\n',
|
| + }
|
| + self.assertEqual(
|
| + expected,
|
| + file_system.Read(['./test1.txt', './test2.txt', './test3.txt']).Get())
|
| +
|
| + def testListDir(self):
|
| + file_system = CachingFileSystem(_CreateLocalFs())
|
| + expected = ['dir/'] + ['file%d.html' % i for i in range(7)]
|
| + file_system._read_object_store.Set(
|
| + 'list/',
|
| + (expected, file_system.Stat('list/').version))
|
| + self.assertEqual(expected, sorted(file_system.ReadSingle('list/')))
|
| +
|
| + expected.remove('file0.html')
|
| + file_system._read_object_store.Set(
|
| + 'list/',
|
| + (expected, file_system.Stat('list/').version))
|
| + self.assertEqual(expected, sorted(file_system.ReadSingle('list/')))
|
| +
|
| + def testCaching(self):
|
| + fake_fs = TestFileSystem({
|
| + 'bob': {
|
| + 'bob0': 'bob/bob0 contents',
|
| + 'bob1': 'bob/bob1 contents',
|
| + 'bob2': 'bob/bob2 contents',
|
| + 'bob3': 'bob/bob3 contents',
|
| + }
|
| + })
|
| + file_system = CachingFileSystem(fake_fs)
|
| +
|
| + self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
|
| + self.assertTrue(fake_fs.CheckAndReset(read_count=1, stat_count=1))
|
| +
|
| + # Resource has been cached, so test resource is not re-fetched.
|
| + self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
|
| + self.assertTrue(fake_fs.CheckAndReset())
|
| +
|
| + # Test if the Stat version is the same the resource is not re-fetched.
|
| + file_system._stat_object_store.Delete('bob/bob0')
|
| + self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
|
| + self.assertTrue(fake_fs.CheckAndReset(stat_count=1))
|
| +
|
| + # Test if there is a newer version, the resource is re-fetched.
|
| + file_system._stat_object_store.Delete('bob/bob0')
|
| + fake_fs.IncrementStat();
|
| + self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
|
| + self.assertTrue(fake_fs.CheckAndReset(read_count=1, stat_count=1))
|
| +
|
| + # Test directory and subdirectory stats are cached.
|
| + file_system._stat_object_store.Delete('bob/bob0')
|
| + file_system._read_object_store.Delete('bob/bob0')
|
| + file_system._stat_object_store.Delete('bob/bob1')
|
| + fake_fs.IncrementStat();
|
| + self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
|
| + self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
|
| + self.assertTrue(fake_fs.CheckAndReset(read_count=2, stat_count=1))
|
| + self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
|
| + self.assertTrue(fake_fs.CheckAndReset())
|
| +
|
| + # Test a more recent parent directory doesn't force a refetch of children.
|
| + file_system._read_object_store.Delete('bob/bob0')
|
| + file_system._read_object_store.Delete('bob/bob1')
|
| + self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
|
| + self.assertEqual('bob/bob2 contents', file_system.ReadSingle('bob/bob2'))
|
| + self.assertEqual('bob/bob3 contents', file_system.ReadSingle('bob/bob3'))
|
| + self.assertTrue(fake_fs.CheckAndReset(read_count=3))
|
| + fake_fs.IncrementStat(path='bob/')
|
| + self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
|
| + self.assertEqual('bob/bob2 contents', file_system.ReadSingle('bob/bob2'))
|
| + self.assertEqual('bob/bob3 contents', file_system.ReadSingle('bob/bob3'))
|
| + self.assertTrue(fake_fs.CheckAndReset())
|
| +
|
| + file_system._stat_object_store.Delete('bob/bob0')
|
| + self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
|
| + self.assertTrue(fake_fs.CheckAndReset(read_count=1, stat_count=1))
|
| + self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
|
| + self.assertTrue(fake_fs.CheckAndReset())
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|