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
6from copy import deepcopy
7import unittest
8
9from extensions_paths import CHROME_API
10from file_system import FileNotFoundError
11from host_file_system_provider import HostFileSystemProvider
12from object_store_creator import ObjectStoreCreator
13from test_data.canned_data import CANNED_API_FILE_SYSTEM_DATA
14from test_file_system import TestFileSystem
15
16class HostFileSystemProviderTest(unittest.TestCase):
17  def setUp(self):
18    self._idle_path = CHROME_API + 'idle.json'
19    self._canned_data = deepcopy(CANNED_API_FILE_SYSTEM_DATA)
20
21  def _constructor_for_test(self, branch, **optargs):
22    return TestFileSystem(self._canned_data[branch])
23
24  def testWithCaching(self):
25    creator = HostFileSystemProvider(
26        ObjectStoreCreator.ForTest(),
27        constructor_for_test=self._constructor_for_test)
28
29    fs = creator.GetBranch('1500')
30    first_read = fs.ReadSingle(self._idle_path).Get()
31    self._canned_data['1500']['chrome']['common']['extensions'].get('api'
32        )['idle.json'] = 'blah blah blah'
33    second_read = fs.ReadSingle(self._idle_path).Get()
34
35    self.assertEqual(first_read, second_read)
36
37  def testWithOffline(self):
38    creator = HostFileSystemProvider(
39        ObjectStoreCreator.ForTest(),
40        offline=True,
41        constructor_for_test=self._constructor_for_test)
42
43    fs = creator.GetBranch('1500')
44    # Offline file system should raise a FileNotFoundError if read is attempted.
45    self.assertRaises(FileNotFoundError, fs.ReadSingle(self._idle_path).Get)
46
47if __name__ == '__main__':
48  unittest.main()
49