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

Side by Side Diff: chrome/common/extensions/docs/server2/caching_file_system_test.py

Issue 13470005: Refactor the devserver to make it easier to control caching (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cduvall, rebase Created 7 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 import os
7 import sys
8 import unittest
9
10 from caching_file_system import CachingFileSystem
11 from file_system import FileSystem, StatInfo
12 from future import Future
13 from in_memory_object_store import InMemoryObjectStore
14 from local_file_system import LocalFileSystem
15 from test_file_system import TestFileSystem
16
17 def _CreateLocalFs():
18 return LocalFileSystem(
19 os.path.join(sys.path[0], 'test_data', 'file_system'))
20
21 class CachingFileSystemTest(unittest.TestCase):
22 def testReadFiles(self):
23 file_system = CachingFileSystem(_CreateLocalFs())
24 expected = {
25 './test1.txt': 'test1\n',
26 './test2.txt': 'test2\n',
27 './test3.txt': 'test3\n',
28 }
29 self.assertEqual(
30 expected,
31 file_system.Read(['./test1.txt', './test2.txt', './test3.txt']).Get())
32
33 def testListDir(self):
34 file_system = CachingFileSystem(_CreateLocalFs())
35 expected = ['dir/'] + ['file%d.html' % i for i in range(7)]
36 file_system._read_object_store.Set(
37 'list/',
38 (expected, file_system.Stat('list/').version))
39 self.assertEqual(expected, sorted(file_system.ReadSingle('list/')))
40
41 expected.remove('file0.html')
42 file_system._read_object_store.Set(
43 'list/',
44 (expected, file_system.Stat('list/').version))
45 self.assertEqual(expected, sorted(file_system.ReadSingle('list/')))
46
47 def testCaching(self):
48 fake_fs = TestFileSystem({
49 'bob': {
50 'bob0': 'bob/bob0 contents',
51 'bob1': 'bob/bob1 contents',
52 'bob2': 'bob/bob2 contents',
53 'bob3': 'bob/bob3 contents',
54 }
55 })
56 file_system = CachingFileSystem(fake_fs)
57
58 self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
59 self.assertTrue(fake_fs.CheckAndReset(read_count=1, stat_count=1))
60
61 # Resource has been cached, so test resource is not re-fetched.
62 self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
63 self.assertTrue(fake_fs.CheckAndReset())
64
65 # Test if the Stat version is the same the resource is not re-fetched.
66 file_system._stat_object_store.Delete('bob/bob0')
67 self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
68 self.assertTrue(fake_fs.CheckAndReset(stat_count=1))
69
70 # Test if there is a newer version, the resource is re-fetched.
71 file_system._stat_object_store.Delete('bob/bob0')
72 fake_fs.IncrementStat();
73 self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
74 self.assertTrue(fake_fs.CheckAndReset(read_count=1, stat_count=1))
75
76 # Test directory and subdirectory stats are cached.
77 file_system._stat_object_store.Delete('bob/bob0')
78 file_system._read_object_store.Delete('bob/bob0')
79 file_system._stat_object_store.Delete('bob/bob1')
80 fake_fs.IncrementStat();
81 self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
82 self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
83 self.assertTrue(fake_fs.CheckAndReset(read_count=2, stat_count=1))
84 self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
85 self.assertTrue(fake_fs.CheckAndReset())
86
87 # Test a more recent parent directory doesn't force a refetch of children.
88 file_system._read_object_store.Delete('bob/bob0')
89 file_system._read_object_store.Delete('bob/bob1')
90 self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
91 self.assertEqual('bob/bob2 contents', file_system.ReadSingle('bob/bob2'))
92 self.assertEqual('bob/bob3 contents', file_system.ReadSingle('bob/bob3'))
93 self.assertTrue(fake_fs.CheckAndReset(read_count=3))
94 fake_fs.IncrementStat(path='bob/')
95 self.assertEqual('bob/bob1 contents', file_system.ReadSingle('bob/bob1'))
96 self.assertEqual('bob/bob2 contents', file_system.ReadSingle('bob/bob2'))
97 self.assertEqual('bob/bob3 contents', file_system.ReadSingle('bob/bob3'))
98 self.assertTrue(fake_fs.CheckAndReset())
99
100 file_system._stat_object_store.Delete('bob/bob0')
101 self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
102 self.assertTrue(fake_fs.CheckAndReset(read_count=1, stat_count=1))
103 self.assertEqual('bob/bob0 contents', file_system.ReadSingle('bob/bob0'))
104 self.assertTrue(fake_fs.CheckAndReset())
105
106 if __name__ == '__main__':
107 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698