Home | History | Annotate | Download | only in perf_expectations
      1 #!/usr/bin/env python
      2 # Copyright (c) 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 """Unit tests for update_perf_expectations."""
      6 import copy
      7 from StringIO import StringIO
      8 import unittest
      9 import make_expectations as perf_ex_lib
     10 import update_perf_expectations as upe_mod
     11 
     12 
     13 # A separate .json file contains the list of test cases we'll use.
     14 # The tests used to be defined inline here, but are >80 characters in length.
     15 # Now they are expected to be defined in file ./sample_test_cases.json.
     16 # Create a dictionary of tests using .json file.
     17 all_tests = perf_ex_lib.ConvertJsonIntoDict(
     18     perf_ex_lib.ReadFile('sample_test_cases.json'))
     19 # Get all keys.
     20 all_tests_keys = all_tests.keys()
     21 
     22 
     23 def VerifyPreparedTests(self, tests_to_update, reva, revb):
     24   # Work with a copy of the set of tests.
     25   all_tests_copy = copy.deepcopy(all_tests)
     26   upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests_copy, reva, revb)
     27   # Make sure reva < revb
     28   if reva > revb:
     29     temp = reva
     30     reva = revb
     31     revb = temp
     32   # Run through all tests and make sure only those that were
     33   # specified to be modified had their 'sha1' value removed.
     34   for test_key in all_tests_keys:
     35     new_test_value = all_tests_copy[test_key]
     36     original_test_value = all_tests[test_key]
     37     if test_key in tests_to_update:
     38       # Make sure there is no "sha1".
     39       self.assertFalse('sha1' in new_test_value)
     40       # Make sure reva and revb values are correctly set.
     41       self.assertEqual(reva, new_test_value['reva'])
     42       self.assertEqual(revb, new_test_value['revb'])
     43     else:
     44       # Make sure there is an "sha1" value
     45       self.assertTrue('sha1' in new_test_value)
     46       # Make sure the sha1, reva and revb values have not changed.
     47       self.assertEqual(original_test_value['sha1'], new_test_value['sha1'])
     48       self.assertEqual(original_test_value['reva'], new_test_value['reva'])
     49       self.assertEqual(original_test_value['revb'], new_test_value['revb'])
     50 
     51 
     52 class UpdatePerfExpectationsTest(unittest.TestCase):
     53   def testFilterMatch(self):
     54     """Verifies different regular expressions test filter."""
     55     self.maxDiff = None
     56     # Tests to update specified by a single literal string.
     57     tests_to_update = 'win-release/media_tests_av_perf/fps/tulip2.webm'
     58     expected_tests_list = ['win-release/media_tests_av_perf/fps/tulip2.webm']
     59     self.assertEqual(expected_tests_list,
     60                      upe_mod.GetMatchingTests(tests_to_update,
     61                                               all_tests_keys))
     62 
     63     # Tests to update specified by a single reg-ex
     64     tests_to_update = 'win-release/media_tests_av_perf/fps.*'
     65     expected_tests_list = ['win-release/media_tests_av_perf/fps/crowd1080.webm',
     66                            'win-release/media_tests_av_perf/fps/crowd2160.webm',
     67                            'win-release/media_tests_av_perf/fps/crowd360.webm',
     68                            'win-release/media_tests_av_perf/fps/crowd480.webm',
     69                            'win-release/media_tests_av_perf/fps/crowd720.webm',
     70                            'win-release/media_tests_av_perf/fps/tulip2.m4a',
     71                            'win-release/media_tests_av_perf/fps/tulip2.mp3',
     72                            'win-release/media_tests_av_perf/fps/tulip2.mp4',
     73                            'win-release/media_tests_av_perf/fps/tulip2.ogg',
     74                            'win-release/media_tests_av_perf/fps/tulip2.ogv',
     75                            'win-release/media_tests_av_perf/fps/tulip2.wav',
     76                            'win-release/media_tests_av_perf/fps/tulip2.webm']
     77     actual_list = upe_mod.GetMatchingTests(tests_to_update,
     78                                            all_tests_keys)
     79     actual_list.sort()
     80     self.assertEqual(expected_tests_list, actual_list)
     81 
     82     # Tests to update are specified by a single reg-ex, spanning multiple OSes.
     83     tests_to_update = '.*-release/media_tests_av_perf/fps.*'
     84     expected_tests_list = ['linux-release/media_tests_av_perf/fps/tulip2.m4a',
     85                            'linux-release/media_tests_av_perf/fps/tulip2.mp3',
     86                            'linux-release/media_tests_av_perf/fps/tulip2.mp4',
     87                            'linux-release/media_tests_av_perf/fps/tulip2.ogg',
     88                            'linux-release/media_tests_av_perf/fps/tulip2.ogv',
     89                            'linux-release/media_tests_av_perf/fps/tulip2.wav',
     90                            'win-release/media_tests_av_perf/fps/crowd1080.webm',
     91                            'win-release/media_tests_av_perf/fps/crowd2160.webm',
     92                            'win-release/media_tests_av_perf/fps/crowd360.webm',
     93                            'win-release/media_tests_av_perf/fps/crowd480.webm',
     94                            'win-release/media_tests_av_perf/fps/crowd720.webm',
     95                            'win-release/media_tests_av_perf/fps/tulip2.m4a',
     96                            'win-release/media_tests_av_perf/fps/tulip2.mp3',
     97                            'win-release/media_tests_av_perf/fps/tulip2.mp4',
     98                            'win-release/media_tests_av_perf/fps/tulip2.ogg',
     99                            'win-release/media_tests_av_perf/fps/tulip2.ogv',
    100                            'win-release/media_tests_av_perf/fps/tulip2.wav',
    101                            'win-release/media_tests_av_perf/fps/tulip2.webm']
    102     actual_list = upe_mod.GetMatchingTests(tests_to_update,
    103                                            all_tests_keys)
    104     actual_list.sort()
    105     self.assertEqual(expected_tests_list, actual_list)
    106 
    107   def testLinesFromInputFile(self):
    108     """Verifies different string formats specified in input file."""
    109 
    110     # Tests to update have been specified by a single literal string in
    111     # an input file.
    112     # Use the StringIO class to mock a file object.
    113     lines_from_file = StringIO(
    114         'win-release/media_tests_av_perf/fps/tulip2.webm')
    115     contents = lines_from_file.read()
    116     expected_tests_list = ['win-release/media_tests_av_perf/fps/tulip2.webm']
    117     actual_list = upe_mod.GetTestsToUpdate(contents, all_tests_keys)
    118     actual_list.sort()
    119     self.assertEqual(expected_tests_list, actual_list)
    120     lines_from_file.close()
    121 
    122     # Tests to update specified by a single reg-ex in an input file.
    123     lines_from_file = StringIO('win-release/media_tests_av_perf/fps/tulip2.*\n')
    124     contents = lines_from_file.read()
    125     expected_tests_list = ['win-release/media_tests_av_perf/fps/tulip2.m4a',
    126                            'win-release/media_tests_av_perf/fps/tulip2.mp3',
    127                            'win-release/media_tests_av_perf/fps/tulip2.mp4',
    128                            'win-release/media_tests_av_perf/fps/tulip2.ogg',
    129                            'win-release/media_tests_av_perf/fps/tulip2.ogv',
    130                            'win-release/media_tests_av_perf/fps/tulip2.wav',
    131                            'win-release/media_tests_av_perf/fps/tulip2.webm']
    132     actual_list = upe_mod.GetTestsToUpdate(contents, all_tests_keys)
    133     actual_list.sort()
    134     self.assertEqual(expected_tests_list, actual_list)
    135     lines_from_file.close()
    136 
    137     # Tests to update specified by multiple lines in an input file.
    138     lines_from_file = StringIO(
    139         '.*-release/media_tests_av_perf/fps/tulip2.*\n'
    140         'win-release/media_tests_av_perf/dropped_fps/tulip2.*\n'
    141         'linux-release/media_tests_av_perf/audio_latency/latency')
    142     contents = lines_from_file.read()
    143     expected_tests_list = [
    144         'linux-release/media_tests_av_perf/audio_latency/latency',
    145         'linux-release/media_tests_av_perf/fps/tulip2.m4a',
    146         'linux-release/media_tests_av_perf/fps/tulip2.mp3',
    147         'linux-release/media_tests_av_perf/fps/tulip2.mp4',
    148         'linux-release/media_tests_av_perf/fps/tulip2.ogg',
    149         'linux-release/media_tests_av_perf/fps/tulip2.ogv',
    150         'linux-release/media_tests_av_perf/fps/tulip2.wav',
    151         'win-release/media_tests_av_perf/dropped_fps/tulip2.wav',
    152         'win-release/media_tests_av_perf/dropped_fps/tulip2.webm',
    153         'win-release/media_tests_av_perf/fps/tulip2.m4a',
    154         'win-release/media_tests_av_perf/fps/tulip2.mp3',
    155         'win-release/media_tests_av_perf/fps/tulip2.mp4',
    156         'win-release/media_tests_av_perf/fps/tulip2.ogg',
    157         'win-release/media_tests_av_perf/fps/tulip2.ogv',
    158         'win-release/media_tests_av_perf/fps/tulip2.wav',
    159         'win-release/media_tests_av_perf/fps/tulip2.webm']
    160     actual_list = upe_mod.GetTestsToUpdate(contents, all_tests_keys)
    161     actual_list.sort()
    162     self.assertEqual(expected_tests_list, actual_list)
    163     lines_from_file.close()
    164 
    165   def testPreparingForUpdate(self):
    166     """Verifies that tests to be modified are changed as expected."""
    167     tests_to_update = [
    168         'linux-release/media_tests_av_perf/audio_latency/latency',
    169         'linux-release/media_tests_av_perf/fps/tulip2.m4a',
    170         'linux-release/media_tests_av_perf/fps/tulip2.mp3',
    171         'linux-release/media_tests_av_perf/fps/tulip2.mp4',
    172         'linux-release/media_tests_av_perf/fps/tulip2.ogg',
    173         'linux-release/media_tests_av_perf/fps/tulip2.ogv',
    174         'linux-release/media_tests_av_perf/fps/tulip2.wav',
    175         'win-release/media_tests_av_perf/dropped_fps/tulip2.wav',
    176         'win-release/media_tests_av_perf/dropped_fps/tulip2.webm',
    177         'win-release/media_tests_av_perf/fps/tulip2.mp3',
    178         'win-release/media_tests_av_perf/fps/tulip2.mp4',
    179         'win-release/media_tests_av_perf/fps/tulip2.ogg',
    180         'win-release/media_tests_av_perf/fps/tulip2.ogv',
    181         'win-release/media_tests_av_perf/fps/tulip2.wav',
    182         'win-release/media_tests_av_perf/fps/tulip2.webm']
    183     # Test regular positive integers.
    184     reva = 12345
    185     revb = 54321
    186     VerifyPreparedTests(self, tests_to_update, reva, revb)
    187     # Test negative values.
    188     reva = -54321
    189     revb = 12345
    190     with self.assertRaises(ValueError):
    191       upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests, reva, revb)
    192     # Test reva greater than revb.
    193     reva = 54321
    194     revb = 12345
    195     upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests, reva, revb)
    196     # Test non-integer values
    197     reva = 'sds'
    198     revb = 12345
    199     with self.assertRaises(ValueError):
    200       upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests, reva, revb)
    201 
    202 
    203 if __name__ == '__main__':
    204   unittest.main()
    205