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

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

Issue 521453003: Docserver: Override Walk in CachingFileSystem (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import os 6 import os
7 import sys 7 import sys
8 import unittest 8 import unittest
9 9
10 from caching_file_system import CachingFileSystem 10 from caching_file_system import CachingFileSystem
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 './test3.txt': 'test3\n', 51 './test3.txt': 'test3\n',
52 } 52 }
53 self.assertEqual( 53 self.assertEqual(
54 expected, 54 expected,
55 file_system.Read(['./test1.txt', './test2.txt', './test3.txt']).Get()) 55 file_system.Read(['./test1.txt', './test2.txt', './test3.txt']).Get())
56 56
57 def testListDir(self): 57 def testListDir(self):
58 file_system = self._CreateCachingFileSystem( 58 file_system = self._CreateCachingFileSystem(
59 _CreateLocalFs(), start_empty=False) 59 _CreateLocalFs(), start_empty=False)
60 expected = ['dir/'] + ['file%d.html' % i for i in range(7)] 60 expected = ['dir/'] + ['file%d.html' % i for i in range(7)]
61 file_system._read_object_store.Set( 61 file_system._read_cache.Set(
62 'list/', 62 'list/',
63 (expected, file_system.Stat('list/').version)) 63 (expected, file_system.Stat('list/').version))
64 self.assertEqual(expected, sorted(file_system.ReadSingle('list/').Get())) 64 self.assertEqual(expected, sorted(file_system.ReadSingle('list/').Get()))
65 65
66 expected.remove('file0.html') 66 expected.remove('file0.html')
67 file_system._read_object_store.Set( 67 file_system._read_cache.Set(
68 'list/', 68 'list/',
69 (expected, file_system.Stat('list/').version)) 69 (expected, file_system.Stat('list/').version))
70 self.assertEqual(expected, sorted(file_system.ReadSingle('list/').Get())) 70 self.assertEqual(expected, sorted(file_system.ReadSingle('list/').Get()))
71 71
72 def testCaching(self): 72 def testCaching(self):
73 test_fs = TestFileSystem({ 73 test_fs = TestFileSystem({
74 'bob': { 74 'bob': {
75 'bob0': 'bob/bob0 contents', 75 'bob0': 'bob/bob0 contents',
76 'bob1': 'bob/bob1 contents', 76 'bob1': 'bob/bob1 contents',
77 'bob2': 'bob/bob2 contents', 77 'bob2': 'bob/bob2 contents',
(...skipping 27 matching lines...) Expand all
105 # Test if there is a newer version, the resource is re-fetched. 105 # Test if there is a newer version, the resource is re-fetched.
106 file_system = create_empty_caching_fs() 106 file_system = create_empty_caching_fs()
107 test_fs.IncrementStat(); 107 test_fs.IncrementStat();
108 future = file_system.ReadSingle('bob/bob0') 108 future = file_system.ReadSingle('bob/bob0')
109 self.assertTrue(*mock_fs.CheckAndReset(read_count=1, stat_count=1)) 109 self.assertTrue(*mock_fs.CheckAndReset(read_count=1, stat_count=1))
110 self.assertEqual('bob/bob0 contents', future.Get()) 110 self.assertEqual('bob/bob0 contents', future.Get())
111 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=1)) 111 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=1))
112 112
113 # Test directory and subdirectory stats are cached. 113 # Test directory and subdirectory stats are cached.
114 file_system = create_empty_caching_fs() 114 file_system = create_empty_caching_fs()
115 file_system._stat_object_store.Del('bob/bob0') 115 file_system._stat_cache.Del('bob/bob0')
116 file_system._read_object_store.Del('bob/bob0') 116 file_system._read_cache.Del('bob/bob0')
117 file_system._stat_object_store.Del('bob/bob1') 117 file_system._stat_cache.Del('bob/bob1')
118 test_fs.IncrementStat(); 118 test_fs.IncrementStat();
119 futures = (file_system.ReadSingle('bob/bob1'), 119 futures = (file_system.ReadSingle('bob/bob1'),
120 file_system.ReadSingle('bob/bob0')) 120 file_system.ReadSingle('bob/bob0'))
121 self.assertTrue(*mock_fs.CheckAndReset(read_count=2)) 121 self.assertTrue(*mock_fs.CheckAndReset(read_count=2))
122 self.assertEqual(('bob/bob1 contents', 'bob/bob0 contents'), 122 self.assertEqual(('bob/bob1 contents', 'bob/bob0 contents'),
123 tuple(future.Get() for future in futures)) 123 tuple(future.Get() for future in futures))
124 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=2, stat_count=1)) 124 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=2, stat_count=1))
125 self.assertEqual('bob/bob1 contents', 125 self.assertEqual('bob/bob1 contents',
126 file_system.ReadSingle('bob/bob1').Get()) 126 file_system.ReadSingle('bob/bob1').Get())
127 self.assertTrue(*mock_fs.CheckAndReset()) 127 self.assertTrue(*mock_fs.CheckAndReset())
128 128
129 # Test a more recent parent directory doesn't force a refetch of children. 129 # Test a more recent parent directory doesn't force a refetch of children.
130 file_system = create_empty_caching_fs() 130 file_system = create_empty_caching_fs()
131 file_system._read_object_store.Del('bob/bob0') 131 file_system._read_cache.Del('bob/bob0')
132 file_system._read_object_store.Del('bob/bob1') 132 file_system._read_cache.Del('bob/bob1')
133 futures = (file_system.ReadSingle('bob/bob1'), 133 futures = (file_system.ReadSingle('bob/bob1'),
134 file_system.ReadSingle('bob/bob2'), 134 file_system.ReadSingle('bob/bob2'),
135 file_system.ReadSingle('bob/bob3')) 135 file_system.ReadSingle('bob/bob3'))
136 self.assertTrue(*mock_fs.CheckAndReset(read_count=3)) 136 self.assertTrue(*mock_fs.CheckAndReset(read_count=3))
137 self.assertEqual( 137 self.assertEqual(
138 ('bob/bob1 contents', 'bob/bob2 contents', 'bob/bob3 contents'), 138 ('bob/bob1 contents', 'bob/bob2 contents', 'bob/bob3 contents'),
139 tuple(future.Get() for future in futures)) 139 tuple(future.Get() for future in futures))
140 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=3, stat_count=1)) 140 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=3, stat_count=1))
141 141
142 test_fs.IncrementStat(path='bob/bob0') 142 test_fs.IncrementStat(path='bob/bob0')
143 file_system = create_empty_caching_fs() 143 file_system = create_empty_caching_fs()
144 self.assertEqual('bob/bob1 contents', 144 self.assertEqual('bob/bob1 contents',
145 file_system.ReadSingle('bob/bob1').Get()) 145 file_system.ReadSingle('bob/bob1').Get())
146 self.assertEqual('bob/bob2 contents', 146 self.assertEqual('bob/bob2 contents',
147 file_system.ReadSingle('bob/bob2').Get()) 147 file_system.ReadSingle('bob/bob2').Get())
148 self.assertEqual('bob/bob3 contents', 148 self.assertEqual('bob/bob3 contents',
149 file_system.ReadSingle('bob/bob3').Get()) 149 file_system.ReadSingle('bob/bob3').Get())
150 self.assertTrue(*mock_fs.CheckAndReset(stat_count=1)) 150 self.assertTrue(*mock_fs.CheckAndReset(stat_count=1))
151 151
152 file_system = create_empty_caching_fs() 152 file_system = create_empty_caching_fs()
153 file_system._stat_object_store.Del('bob/bob0') 153 file_system._stat_cache.Del('bob/bob0')
154 future = file_system.ReadSingle('bob/bob0') 154 future = file_system.ReadSingle('bob/bob0')
155 self.assertTrue(*mock_fs.CheckAndReset(read_count=1)) 155 self.assertTrue(*mock_fs.CheckAndReset(read_count=1))
156 self.assertEqual('bob/bob0 contents', future.Get()) 156 self.assertEqual('bob/bob0 contents', future.Get())
157 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=1, stat_count=1)) 157 self.assertTrue(*mock_fs.CheckAndReset(read_resolve_count=1, stat_count=1))
158 self.assertEqual('bob/bob0 contents', 158 self.assertEqual('bob/bob0 contents',
159 file_system.ReadSingle('bob/bob0').Get()) 159 file_system.ReadSingle('bob/bob0').Get())
160 self.assertTrue(*mock_fs.CheckAndReset()) 160 self.assertTrue(*mock_fs.CheckAndReset())
161 161
162 # Test skip_not_found caching behavior. 162 # Test skip_not_found caching behavior.
163 file_system = create_empty_caching_fs() 163 file_system = create_empty_caching_fs()
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 } 244 }
245 })) 245 }))
246 def read_skip_not_found(paths): 246 def read_skip_not_found(paths):
247 return caching_fs.Read(paths, skip_not_found=True).Get() 247 return caching_fs.Read(paths, skip_not_found=True).Get()
248 self.assertEqual({}, read_skip_not_found(('grub',))) 248 self.assertEqual({}, read_skip_not_found(('grub',)))
249 self.assertEqual({}, read_skip_not_found(('bob/bob2',))) 249 self.assertEqual({}, read_skip_not_found(('bob/bob2',)))
250 self.assertEqual({ 250 self.assertEqual({
251 'bob/bob0': 'bob/bob0 contents', 251 'bob/bob0': 'bob/bob0 contents',
252 }, read_skip_not_found(('bob/bob0', 'bob/bob2'))) 252 }, read_skip_not_found(('bob/bob0', 'bob/bob2')))
253 253
254 def testWalkCaching(self):
255 test_fs = TestFileSystem({
256 'root': {
257 'file1': 'file1',
258 'file2': 'file2',
259 'dir1': {
260 'dir1_file1': 'dir1_file1',
261 'dir2': {},
262 'dir3': {
263 'dir3_file1': 'dir3_file1',
264 'dir3_file2': 'dir3_file2'
265 }
266 }
267 }
268 })
269 mock_fs = MockFileSystem(test_fs)
270 file_system = self._CreateCachingFileSystem(mock_fs, start_empty=True)
271 for walkinfo in file_system.Walk(''):
272 pass
273 self.assertTrue(*mock_fs.CheckAndReset(
274 read_resolve_count=5, read_count=5, stat_count=5))
275
276 all_dirs, all_files = [], []
277 for root, dirs, files in file_system.Walk(''):
278 all_dirs.extend(dirs)
279 all_files.extend(files)
280 self.assertEqual(sorted(['root/', 'dir1/', 'dir2/', 'dir3/']),
281 sorted(all_dirs))
282 self.assertEqual(
283 sorted(['file1', 'file2', 'dir1_file1', 'dir3_file1', 'dir3_file2']),
284 sorted(all_files))
285 # All data should be cached.
286 self.assertTrue(*mock_fs.CheckAndReset())
287
288 # Starting from a different root should still pull cached data.
289 for walkinfo in file_system.Walk('root/dir1/'):
290 pass
291 self.assertTrue(*mock_fs.CheckAndReset())
not at google - send to devlin 2014/08/29 20:26:07 Could you also test with a new CachingFileSystem?
254 292
255 if __name__ == '__main__': 293 if __name__ == '__main__':
256 unittest.main() 294 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698