Home | History | Annotate | Download | only in server2
      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 
      6 from copy import deepcopy
      7 from file_system import FileNotFoundError, StatInfo
      8 from mock_file_system import MockFileSystem
      9 from test_file_system import TestFileSystem
     10 import unittest
     11 
     12 _TEST_DATA = {
     13   '404.html': '404.html contents',
     14   'apps': {
     15     'a11y.html': 'a11y.html contents',
     16     'about_apps.html': 'about_apps.html contents',
     17     'fakedir': {
     18       'file.html': 'file.html contents'
     19     }
     20   },
     21   'extensions': {
     22     'activeTab.html': 'activeTab.html contents',
     23     'alarms.html': 'alarms.html contents'
     24   }
     25 }
     26 
     27 def _Get(fn):
     28   '''Returns a function which calls Future.Get on the result of |fn|.
     29   '''
     30   return lambda *args: fn(*args).Get()
     31 
     32 class MockFileSystemTest(unittest.TestCase):
     33   def testCheckAndReset(self):
     34     fs = MockFileSystem(TestFileSystem(deepcopy(_TEST_DATA)))
     35 
     36     self.assertTrue(*fs.CheckAndReset())
     37     self.assertFalse(*fs.CheckAndReset(read_count=1))
     38     self.assertFalse(*fs.CheckAndReset(stat_count=1))
     39 
     40     fs.ReadSingle('apps/')
     41     self.assertTrue(*fs.CheckAndReset(read_count=1))
     42     self.assertFalse(*fs.CheckAndReset(read_count=1))
     43     self.assertTrue(*fs.CheckAndReset())
     44 
     45     fs.ReadSingle('apps/')
     46     self.assertFalse(*fs.CheckAndReset(read_count=2))
     47 
     48     fs.ReadSingle('extensions/')
     49     fs.ReadSingle('extensions/')
     50     self.assertTrue(*fs.CheckAndReset(read_count=2))
     51     self.assertFalse(*fs.CheckAndReset(read_count=2))
     52     self.assertTrue(*fs.CheckAndReset())
     53 
     54     fs.ReadSingle('404.html')
     55     future = fs.Read(['notfound.html', 'apps/'])
     56     self.assertTrue(*fs.CheckAndReset(read_count=2))
     57     self.assertRaises(FileNotFoundError, future.Get)
     58 
     59     fs.Stat('404.html')
     60     fs.Stat('404.html')
     61     fs.Stat('apps/')
     62     self.assertFalse(*fs.CheckAndReset(stat_count=42))
     63     self.assertFalse(*fs.CheckAndReset(stat_count=42))
     64     self.assertTrue(*fs.CheckAndReset())
     65 
     66     fs.ReadSingle('404.html')
     67     fs.Stat('404.html')
     68     fs.Stat('apps/')
     69     self.assertTrue(*fs.CheckAndReset(read_count=1, stat_count=2))
     70     self.assertTrue(*fs.CheckAndReset())
     71 
     72   def testUpdates(self):
     73     fs = MockFileSystem(TestFileSystem(deepcopy(_TEST_DATA)))
     74 
     75     self.assertEqual(StatInfo('0', child_versions={
     76       '404.html': '0',
     77       'apps/': '0',
     78       'extensions/': '0'
     79     }), fs.Stat('/'))
     80     self.assertEqual(StatInfo('0'), fs.Stat('404.html'))
     81     self.assertEqual(StatInfo('0', child_versions={
     82       'a11y.html': '0',
     83       'about_apps.html': '0',
     84       'fakedir/': '0',
     85     }), fs.Stat('apps/'))
     86     self.assertEqual('404.html contents', fs.ReadSingle('404.html'))
     87 
     88     fs.Update({
     89       '404.html': 'New version!'
     90     })
     91 
     92     self.assertEqual(StatInfo('1', child_versions={
     93       '404.html': '1',
     94       'apps/': '0',
     95       'extensions/': '0'
     96     }), fs.Stat('/'))
     97     self.assertEqual(StatInfo('1'), fs.Stat('404.html'))
     98     self.assertEqual(StatInfo('0', child_versions={
     99       'a11y.html': '0',
    100       'about_apps.html': '0',
    101       'fakedir/': '0',
    102     }), fs.Stat('apps/'))
    103     self.assertEqual('New version!', fs.ReadSingle('404.html'))
    104 
    105     fs.Update({
    106       '404.html': 'Newer version!',
    107       'apps': {
    108         'fakedir': {
    109           'file.html': 'yo'
    110         }
    111       }
    112     })
    113 
    114     self.assertEqual(StatInfo('2', child_versions={
    115       '404.html': '2',
    116       'apps/': '2',
    117       'extensions/': '0'
    118     }), fs.Stat('/'))
    119     self.assertEqual(StatInfo('2'), fs.Stat('404.html'))
    120     self.assertEqual(StatInfo('2', child_versions={
    121       'a11y.html': '0',
    122       'about_apps.html': '0',
    123       'fakedir/': '2',
    124     }), fs.Stat('apps/'))
    125     self.assertEqual(StatInfo('0'), fs.Stat('apps/a11y.html'))
    126     self.assertEqual(StatInfo('2', child_versions={
    127       'file.html': '2'
    128     }), fs.Stat('apps/fakedir/'))
    129     self.assertEqual(StatInfo('2'), fs.Stat('apps/fakedir/file.html'))
    130     self.assertEqual(StatInfo('0', child_versions={
    131       'activeTab.html': '0',
    132       'alarms.html': '0'
    133     }), fs.Stat('extensions/'))
    134     self.assertEqual('Newer version!', fs.ReadSingle('404.html'))
    135     self.assertEqual('yo', fs.ReadSingle('apps/fakedir/file.html'))
    136 
    137 if __name__ == '__main__':
    138   unittest.main()
    139