chroot_file_system_test.py revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 chroot_file_system import ChrootFileSystem
9from file_system import StatInfo
10from test_file_system import TestFileSystem
11
12
13def _SortListValues(dict_):
14  for value in dict_.itervalues():
15    if isinstance(value, list):
16      value.sort()
17  return dict_
18
19
20class ChrootFileSystemTest(unittest.TestCase):
21
22  def setUp(self):
23    self._test_fs = TestFileSystem({
24      '404.html': '404.html contents',
25      'apps': {
26        'a11y.html': 'a11y.html contents',
27        'about_apps.html': 'about_apps.html contents',
28        'fakedir': {
29          'file.html': 'file.html contents',
30        },
31      },
32      'extensions': {
33        'activeTab.html': 'activeTab.html contents',
34        'alarms.html': 'alarms.html contents',
35        'manifest': {
36          'moremanifest': {
37            'csp.html': 'csp.html contents',
38            'usb.html': 'usb.html contents',
39          },
40          'sockets.html': 'sockets.html contents',
41        },
42      },
43    })
44
45  def testRead(self):
46    for prefix in ('', '/'):
47      for suffix in ('', '/'):
48        chroot_fs = ChrootFileSystem(self._test_fs,
49                                     prefix + 'extensions/manifest' + suffix)
50        self.assertEqual({
51          'moremanifest/usb.html': 'usb.html contents',
52          '': ['moremanifest/', 'sockets.html', ],
53          'moremanifest/': ['csp.html', 'usb.html'],
54          'sockets.html': 'sockets.html contents',
55        }, _SortListValues(chroot_fs.Read(
56          ('moremanifest/usb.html', '', 'moremanifest/', 'sockets.html')
57        ).Get()))
58
59  def testEmptyRoot(self):
60    chroot_fs = ChrootFileSystem(self._test_fs, '')
61    self.assertEqual('404.html contents',
62                     chroot_fs.ReadSingle('404.html').Get())
63
64  def testStat(self):
65    self._test_fs.IncrementStat('extensions/manifest/sockets.html', by=2)
66    self._test_fs.IncrementStat('extensions/manifest/moremanifest/csp.html')
67    for prefix in ('', '/'):
68      for suffix in ('', '/'):
69        chroot_fs = ChrootFileSystem(self._test_fs,
70                                     prefix + 'extensions' + suffix)
71        self.assertEqual(StatInfo('2', child_versions={
72          'activeTab.html': '0',
73          'alarms.html': '0',
74          'manifest/': '2',
75        }), chroot_fs.Stat(''))
76        self.assertEqual(StatInfo('0'), chroot_fs.Stat('activeTab.html'))
77        self.assertEqual(StatInfo('2', child_versions={
78          'moremanifest/': '1',
79          'sockets.html': '2',
80        }), chroot_fs.Stat('manifest/'))
81        self.assertEqual(StatInfo('2'), chroot_fs.Stat('manifest/sockets.html'))
82        self.assertEqual(StatInfo('1', child_versions={
83          'csp.html': '1',
84          'usb.html': '0',
85        }), chroot_fs.Stat('manifest/moremanifest/'))
86        self.assertEqual(StatInfo('1'),
87                         chroot_fs.Stat('manifest/moremanifest/csp.html'))
88        self.assertEqual(StatInfo('0'),
89                         chroot_fs.Stat('manifest/moremanifest/usb.html'))
90
91  def testIdentity(self):
92    chroot_fs1 = ChrootFileSystem(self._test_fs, '1')
93    chroot_fs1b = ChrootFileSystem(self._test_fs, '1')
94    chroot_fs2 = ChrootFileSystem(self._test_fs, '2')
95    self.assertNotEqual(self._test_fs.GetIdentity(), chroot_fs1.GetIdentity())
96    self.assertNotEqual(self._test_fs.GetIdentity(), chroot_fs2.GetIdentity())
97    self.assertNotEqual(chroot_fs1.GetIdentity(), chroot_fs2.GetIdentity())
98    self.assertEqual(chroot_fs1.GetIdentity(), chroot_fs1b.GetIdentity())
99
100
101if __name__ == '__main__':
102  unittest.main()
103