1#!/usr/bin/env python 2# Copyright 2013 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 6import unittest 7 8from chained_compiled_file_system import ChainedCompiledFileSystem 9from compiled_file_system import CompiledFileSystem 10from object_store_creator import ObjectStoreCreator 11from test_file_system import TestFileSystem 12 13_TEST_DATA_BASE = { 14 'a.txt': 'base a.txt', 15 'dir': { 16 'b.txt': 'base b.txt' 17 }, 18} 19 20_TEST_DATA_NEW = { 21 'a.txt': 'new a.txt', 22 'new.txt': 'a new file', 23 'dir': { 24 'b.txt': 'new b.txt', 25 'new.txt': 'new file in dir', 26 }, 27} 28 29identity = lambda _, x: x 30 31class ChainedCompiledFileSystemTest(unittest.TestCase): 32 def setUp(self): 33 object_store_creator = ObjectStoreCreator(start_empty=False) 34 base_file_system = TestFileSystem(_TEST_DATA_BASE) 35 self._base_factory = CompiledFileSystem.Factory(base_file_system, 36 object_store_creator) 37 self._file_system = TestFileSystem(_TEST_DATA_NEW) 38 self._patched_factory = CompiledFileSystem.Factory(self._file_system, 39 object_store_creator) 40 self._chained_factory = ChainedCompiledFileSystem.Factory( 41 [(self._patched_factory, self._file_system), 42 (self._base_factory, base_file_system)]) 43 self._base_compiled_fs = self._base_factory.Create(identity, TestFileSystem) 44 self._chained_compiled_fs = self._chained_factory.Create( 45 identity, TestFileSystem) 46 47 def testGetFromFile(self): 48 self.assertEqual(self._chained_compiled_fs.GetFromFile('a.txt'), 49 self._base_compiled_fs.GetFromFile('a.txt')) 50 self.assertEqual(self._chained_compiled_fs.GetFromFile('new.txt'), 51 'a new file') 52 self.assertEqual(self._chained_compiled_fs.GetFromFile('dir/new.txt'), 53 'new file in dir') 54 self._file_system.IncrementStat('a.txt') 55 self.assertNotEqual(self._chained_compiled_fs.GetFromFile('a.txt'), 56 self._base_compiled_fs.GetFromFile('a.txt')) 57 self.assertEqual(self._chained_compiled_fs.GetFromFile('a.txt'), 58 self._file_system.ReadSingle('a.txt')) 59 60 def testGetFromFileListing(self): 61 self.assertEqual(self._chained_compiled_fs.GetFromFile('dir/'), 62 self._base_compiled_fs.GetFromFile('dir/')) 63 self._file_system.IncrementStat('dir/') 64 self.assertNotEqual(self._chained_compiled_fs.GetFromFileListing('dir/'), 65 self._base_compiled_fs.GetFromFileListing('dir/')) 66 self.assertEqual(self._chained_compiled_fs.GetFromFileListing('dir/'), 67 self._file_system.ReadSingle('dir/')) 68 69if __name__ == '__main__': 70 unittest.main() 71