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, identity='base')
35    self._base_compiled_fs = CompiledFileSystem.Factory(
36        object_store_creator).Create(base_file_system,
37                                     identity,
38                                     ChainedCompiledFileSystemTest)
39    chained_factory = ChainedCompiledFileSystem.Factory([base_file_system],
40                                                        object_store_creator)
41    self._new_file_system = TestFileSystem(_TEST_DATA_NEW, identity='new')
42    self._chained_compiled_fs = chained_factory.Create(
43        self._new_file_system, identity, ChainedCompiledFileSystemTest)
44
45  def testGetFromFile(self):
46    self.assertEqual(self._chained_compiled_fs.GetFromFile('a.txt').Get(),
47                     self._base_compiled_fs.GetFromFile('a.txt').Get())
48    self.assertEqual(self._chained_compiled_fs.GetFromFile('new.txt').Get(),
49                     'a new file')
50    self.assertEqual(self._chained_compiled_fs.GetFromFile('dir/new.txt').Get(),
51                     'new file in dir')
52    self._new_file_system.IncrementStat('a.txt')
53    self.assertNotEqual(self._chained_compiled_fs.GetFromFile('a.txt').Get(),
54                        self._base_compiled_fs.GetFromFile('a.txt').Get())
55    self.assertEqual(self._chained_compiled_fs.GetFromFile('a.txt').Get(),
56                     self._new_file_system.ReadSingle('a.txt').Get())
57
58  def testGetFromFileListing(self):
59    self.assertEqual(self._chained_compiled_fs.GetFromFileListing('dir/').Get(),
60                     self._base_compiled_fs.GetFromFileListing('dir/').Get())
61    self._new_file_system.IncrementStat('dir/new.txt')
62    self.assertNotEqual(
63        self._chained_compiled_fs.GetFromFileListing('dir/').Get(),
64        self._base_compiled_fs.GetFromFileListing('dir/').Get())
65    self.assertEqual(
66        self._chained_compiled_fs.GetFromFileListing('dir/').Get(),
67        self._new_file_system.ReadSingle('dir/').Get())
68
69if __name__ == '__main__':
70  unittest.main()
71