| #!/usr/bin/env python |
| # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Unit tests for update_perf_expectations.""" |
| import copy |
| from StringIO import StringIO |
| import unittest |
| import make_expectations as perf_ex_lib |
| import update_perf_expectations as upe_mod |
| |
| |
| # A separate .json file contains the list of test cases we'll use. |
| # The tests used to be defined inline here, but are >80 characters in length. |
| # Now they are expected to be defined in file ./sample_test_cases.json. |
| # Create a dictionary of tests using .json file. |
| all_tests = perf_ex_lib.ConvertJsonIntoDict( |
| perf_ex_lib.ReadFile('sample_test_cases.json')) |
| # Get all keys. |
| all_tests_keys = all_tests.keys() |
| |
| |
| def VerifyPreparedTests(self, tests_to_update, reva, revb): |
| # Work with a copy of the set of tests. |
| all_tests_copy = copy.deepcopy(all_tests) |
| upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests_copy, reva, revb) |
| # Make sure reva < revb |
| if reva > revb: |
| temp = reva |
| reva = revb |
| revb = temp |
| # Run through all tests and make sure only those that were |
| # specified to be modified had their 'sha1' value removed. |
| for test_key in all_tests_keys: |
| new_test_value = all_tests_copy[test_key] |
| original_test_value = all_tests[test_key] |
| if test_key in tests_to_update: |
| # Make sure there is no "sha1". |
| self.assertFalse('sha1' in new_test_value) |
| # Make sure reva and revb values are correctly set. |
| self.assertEqual(reva, new_test_value['reva']) |
| self.assertEqual(revb, new_test_value['revb']) |
| else: |
| # Make sure there is an "sha1" value |
| self.assertTrue('sha1' in new_test_value) |
| # Make sure the sha1, reva and revb values have not changed. |
| self.assertEqual(original_test_value['sha1'], new_test_value['sha1']) |
| self.assertEqual(original_test_value['reva'], new_test_value['reva']) |
| self.assertEqual(original_test_value['revb'], new_test_value['revb']) |
| |
| |
| class UpdatePerfExpectationsTest(unittest.TestCase): |
| def testFilterMatch(self): |
| """Verifies different regular expressions test filter.""" |
| self.maxDiff = None |
| # Tests to update specified by a single literal string. |
| tests_to_update = 'win-release/media_tests_av_perf/fps/tulip2.webm' |
| expected_tests_list = ['win-release/media_tests_av_perf/fps/tulip2.webm'] |
| self.assertEqual(expected_tests_list, |
| upe_mod.GetMatchingTests(tests_to_update, |
| all_tests_keys)) |
| |
| # Tests to update specified by a single reg-ex |
| tests_to_update = 'win-release/media_tests_av_perf/fps.*' |
| expected_tests_list = ['win-release/media_tests_av_perf/fps/crowd1080.webm', |
| 'win-release/media_tests_av_perf/fps/crowd2160.webm', |
| 'win-release/media_tests_av_perf/fps/crowd360.webm', |
| 'win-release/media_tests_av_perf/fps/crowd480.webm', |
| 'win-release/media_tests_av_perf/fps/crowd720.webm', |
| 'win-release/media_tests_av_perf/fps/tulip2.m4a', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'win-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/fps/tulip2.webm'] |
| actual_list = upe_mod.GetMatchingTests(tests_to_update, |
| all_tests_keys) |
| actual_list.sort() |
| self.assertEqual(expected_tests_list, actual_list) |
| |
| # Tests to update are specified by a single reg-ex, spanning multiple OSes. |
| tests_to_update = '.*-release/media_tests_av_perf/fps.*' |
| expected_tests_list = ['linux-release/media_tests_av_perf/fps/tulip2.m4a', |
| 'linux-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'linux-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'linux-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'linux-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'linux-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/fps/crowd1080.webm', |
| 'win-release/media_tests_av_perf/fps/crowd2160.webm', |
| 'win-release/media_tests_av_perf/fps/crowd360.webm', |
| 'win-release/media_tests_av_perf/fps/crowd480.webm', |
| 'win-release/media_tests_av_perf/fps/crowd720.webm', |
| 'win-release/media_tests_av_perf/fps/tulip2.m4a', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'win-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/fps/tulip2.webm'] |
| actual_list = upe_mod.GetMatchingTests(tests_to_update, |
| all_tests_keys) |
| actual_list.sort() |
| self.assertEqual(expected_tests_list, actual_list) |
| |
| def testLinesFromInputFile(self): |
| """Verifies different string formats specified in input file.""" |
| |
| # Tests to update have been specified by a single literal string in |
| # an input file. |
| # Use the StringIO class to mock a file object. |
| lines_from_file = StringIO( |
| 'win-release/media_tests_av_perf/fps/tulip2.webm') |
| contents = lines_from_file.read() |
| expected_tests_list = ['win-release/media_tests_av_perf/fps/tulip2.webm'] |
| actual_list = upe_mod.GetTestsToUpdate(contents, all_tests_keys) |
| actual_list.sort() |
| self.assertEqual(expected_tests_list, actual_list) |
| lines_from_file.close() |
| |
| # Tests to update specified by a single reg-ex in an input file. |
| lines_from_file = StringIO('win-release/media_tests_av_perf/fps/tulip2.*\n') |
| contents = lines_from_file.read() |
| expected_tests_list = ['win-release/media_tests_av_perf/fps/tulip2.m4a', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'win-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/fps/tulip2.webm'] |
| actual_list = upe_mod.GetTestsToUpdate(contents, all_tests_keys) |
| actual_list.sort() |
| self.assertEqual(expected_tests_list, actual_list) |
| lines_from_file.close() |
| |
| # Tests to update specified by multiple lines in an input file. |
| lines_from_file = StringIO( |
| '.*-release/media_tests_av_perf/fps/tulip2.*\n' |
| 'win-release/media_tests_av_perf/dropped_fps/tulip2.*\n' |
| 'linux-release/media_tests_av_perf/audio_latency/latency') |
| contents = lines_from_file.read() |
| expected_tests_list = [ |
| 'linux-release/media_tests_av_perf/audio_latency/latency', |
| 'linux-release/media_tests_av_perf/fps/tulip2.m4a', |
| 'linux-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'linux-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'linux-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'linux-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'linux-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/dropped_fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/dropped_fps/tulip2.webm', |
| 'win-release/media_tests_av_perf/fps/tulip2.m4a', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'win-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/fps/tulip2.webm'] |
| actual_list = upe_mod.GetTestsToUpdate(contents, all_tests_keys) |
| actual_list.sort() |
| self.assertEqual(expected_tests_list, actual_list) |
| lines_from_file.close() |
| |
| def testPreparingForUpdate(self): |
| """Verifies that tests to be modified are changed as expected.""" |
| tests_to_update = [ |
| 'linux-release/media_tests_av_perf/audio_latency/latency', |
| 'linux-release/media_tests_av_perf/fps/tulip2.m4a', |
| 'linux-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'linux-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'linux-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'linux-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'linux-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/dropped_fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/dropped_fps/tulip2.webm', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp3', |
| 'win-release/media_tests_av_perf/fps/tulip2.mp4', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogg', |
| 'win-release/media_tests_av_perf/fps/tulip2.ogv', |
| 'win-release/media_tests_av_perf/fps/tulip2.wav', |
| 'win-release/media_tests_av_perf/fps/tulip2.webm'] |
| # Test regular positive integers. |
| reva = 12345 |
| revb = 54321 |
| VerifyPreparedTests(self, tests_to_update, reva, revb) |
| # Test negative values. |
| reva = -54321 |
| revb = 12345 |
| with self.assertRaises(ValueError): |
| upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests, reva, revb) |
| # Test reva greater than revb. |
| reva = 54321 |
| revb = 12345 |
| upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests, reva, revb) |
| # Test non-integer values |
| reva = 'sds' |
| revb = 12345 |
| with self.assertRaises(ValueError): |
| upe_mod.PrepareTestsForUpdate(tests_to_update, all_tests, reva, revb) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |