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 import unittest
      7 
      8 from app_yaml_helper import AppYamlHelper
      9 from file_system import FileNotFoundError
     10 from host_file_system_creator import HostFileSystemCreator
     11 from mock_file_system import MockFileSystem
     12 from object_store_creator import ObjectStoreCreator
     13 from test_file_system import TestFileSystem
     14 from test_util import DisableLogging
     15 
     16 _ExtractVersion, _IsGreater, _GenerateAppYaml = (
     17     AppYamlHelper.ExtractVersion,
     18     AppYamlHelper.IsGreater,
     19     AppYamlHelper.GenerateAppYaml)
     20 
     21 class AppYamlHelperTest(unittest.TestCase):
     22   def testExtractVersion(self):
     23     def run_test(version):
     24       self.assertEqual(version, _ExtractVersion(_GenerateAppYaml(version)))
     25     run_test('0')
     26     run_test('0-0')
     27     run_test('0-0-0')
     28     run_test('1')
     29     run_test('1-0')
     30     run_test('1-0-0')
     31     run_test('1-0-1')
     32     run_test('1-1-0')
     33     run_test('1-1-1')
     34     run_test('2-0-9')
     35     run_test('2-0-12')
     36     run_test('2-1')
     37     run_test('2-1-0')
     38     run_test('2-11-0')
     39     run_test('3-1-0')
     40     run_test('3-1-3')
     41     run_test('3-12-0')
     42 
     43   def testIsGreater(self):
     44     def assert_is_greater(lhs, rhs):
     45       self.assertTrue(_IsGreater(lhs, rhs), '%s is not > %s' % (lhs, rhs))
     46       self.assertFalse(_IsGreater(rhs, lhs),
     47                        '%s should not be > %s' % (rhs, lhs))
     48     assert_is_greater('0-0', '0')
     49     assert_is_greater('0-0-0', '0')
     50     assert_is_greater('0-0-0', '0-0')
     51     assert_is_greater('1', '0')
     52     assert_is_greater('1', '0-0')
     53     assert_is_greater('1', '0-0-0')
     54     assert_is_greater('1-0', '0-0')
     55     assert_is_greater('1-0-0-0', '0-0-0')
     56     assert_is_greater('2-0-12', '2-0-9')
     57     assert_is_greater('2-0-12', '2-0-9-0')
     58     assert_is_greater('2-0-12-0', '2-0-9')
     59     assert_is_greater('2-0-12-0', '2-0-9-0')
     60     assert_is_greater('2-1', '2-0-9')
     61     assert_is_greater('2-1', '2-0-12')
     62     assert_is_greater('2-1-0', '2-0-9')
     63     assert_is_greater('2-1-0', '2-0-12')
     64     assert_is_greater('3-1-0', '2-1')
     65     assert_is_greater('3-1-0', '2-1-0')
     66     assert_is_greater('3-1-0', '2-11-0')
     67     assert_is_greater('3-1-3', '3-1-0')
     68     assert_is_greater('3-12-0', '3-1-0')
     69     assert_is_greater('3-12-0', '3-1-3')
     70     assert_is_greater('3-12-0', '3-1-3-0')
     71 
     72   @DisableLogging('warning')
     73   def testInstanceMethods(self):
     74     test_data = {
     75       'server2': {
     76         'app.yaml': _GenerateAppYaml('1-0'),
     77         'app_yaml_helper.py': 'Copyright notice etc'
     78       }
     79     }
     80 
     81     updates = []
     82 
     83     file_system_at_head = MockFileSystem(TestFileSystem(test_data))
     84 
     85     def apply_update(update):
     86       file_system_at_head.Update(update)
     87       updates.append(update)
     88 
     89     def constructor(branch, revision=None):
     90       return MockFileSystem.Create(TestFileSystem(test_data),
     91                                    updates[:revision])
     92     host_file_system_creator = HostFileSystemCreator(
     93         ObjectStoreCreator.ForTest(),
     94         constructor_for_test=constructor)
     95     helper = AppYamlHelper('server2/app.yaml',
     96                            file_system_at_head,
     97                            ObjectStoreCreator.ForTest(disable_wrappers=False),
     98                            host_file_system_creator)
     99 
    100     def assert_is_up_to_date(version):
    101       self.assertTrue(helper.IsUpToDate(version),
    102                       '%s is not up to date' % version)
    103       self.assertRaises(ValueError,
    104                         helper.GetFirstRevisionGreaterThan, version)
    105 
    106     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
    107     assert_is_up_to_date('1-0-0')
    108     assert_is_up_to_date('1-5-0')
    109 
    110     # Revision 1.
    111     apply_update({'server2': {
    112       'app.yaml': _GenerateAppYaml('1-5-0')
    113     }})
    114 
    115     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
    116     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
    117     assert_is_up_to_date('1-5-0')
    118     assert_is_up_to_date('2-5-0')
    119 
    120     # Revision 2.
    121     apply_update({'server2': {
    122       'app_yaml_helper.py': 'fixed a bug'
    123     }})
    124 
    125     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
    126     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
    127     assert_is_up_to_date('1-5-0')
    128     assert_is_up_to_date('2-5-0')
    129 
    130     # Revision 3.
    131     apply_update({'server2': {
    132       'app.yaml': _GenerateAppYaml('1-6-0')
    133     }})
    134 
    135     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
    136     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
    137     self.assertEqual(3, helper.GetFirstRevisionGreaterThan('1-5-0'))
    138     assert_is_up_to_date('2-5-0')
    139 
    140     # Revision 4.
    141     apply_update({'server2': {
    142       'app.yaml': _GenerateAppYaml('1-8-0')
    143     }})
    144     # Revision 5.
    145     apply_update({'server2': {
    146       'app.yaml': _GenerateAppYaml('2-0-0')
    147     }})
    148     # Revision 6.
    149     apply_update({'server2': {
    150       'app.yaml': _GenerateAppYaml('2-2-0')
    151     }})
    152     # Revision 7.
    153     apply_update({'server2': {
    154       'app.yaml': _GenerateAppYaml('2-4-0')
    155     }})
    156     # Revision 8.
    157     apply_update({'server2': {
    158       'app.yaml': _GenerateAppYaml('2-6-0')
    159     }})
    160 
    161     self.assertEqual(0, helper.GetFirstRevisionGreaterThan('0-5-0'))
    162     self.assertEqual(1, helper.GetFirstRevisionGreaterThan('1-0-0'))
    163     self.assertEqual(3, helper.GetFirstRevisionGreaterThan('1-5-0'))
    164     self.assertEqual(5, helper.GetFirstRevisionGreaterThan('1-8-0'))
    165     self.assertEqual(6, helper.GetFirstRevisionGreaterThan('2-0-0'))
    166     self.assertEqual(6, helper.GetFirstRevisionGreaterThan('2-1-0'))
    167     self.assertEqual(7, helper.GetFirstRevisionGreaterThan('2-2-0'))
    168     self.assertEqual(7, helper.GetFirstRevisionGreaterThan('2-3-0'))
    169     self.assertEqual(8, helper.GetFirstRevisionGreaterThan('2-4-0'))
    170     self.assertEqual(8, helper.GetFirstRevisionGreaterThan('2-5-0'))
    171     assert_is_up_to_date('2-6-0')
    172     assert_is_up_to_date('2-7-0')
    173 
    174 if __name__ == '__main__':
    175   unittest.main()
    176