diff options
Diffstat (limited to 'llvm_tools/upload_lexan_crashes_to_forcey_test.py')
-rwxr-xr-x | llvm_tools/upload_lexan_crashes_to_forcey_test.py | 254 |
1 files changed, 137 insertions, 117 deletions
diff --git a/llvm_tools/upload_lexan_crashes_to_forcey_test.py b/llvm_tools/upload_lexan_crashes_to_forcey_test.py index 937cbf8e..7238281a 100755 --- a/llvm_tools/upload_lexan_crashes_to_forcey_test.py +++ b/llvm_tools/upload_lexan_crashes_to_forcey_test.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Copyright 2020 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. @@ -15,132 +15,152 @@ import upload_lexan_crashes_to_forcey class Test(unittest.TestCase): - """Tests for upload_lexan_crashes_to_forcey.""" - - def test_date_parsing_functions(self): - self.assertEqual( - datetime.date(2020, 2, 1), - upload_lexan_crashes_to_forcey.from_ymd('2020-02-01')) - - @unittest.mock.patch( - 'upload_lexan_crashes_to_forcey.test_cases_on_or_after', - return_value=( - ( - datetime.date(2020, 1, 1), - ('gs://test-case-1', 'gs://test-case-1.1'), - ), - (datetime.date(2020, 1, 2), ('gs://test-case-2',)), - (datetime.date(2020, 1, 1), ('gs://test-case-3',)), - (datetime.date(2020, 1, 4), ('gs://test-case-4',)), - )) - @unittest.mock.patch('upload_lexan_crashes_to_forcey.submit_test_case') - @unittest.mock.patch('upload_lexan_crashes_to_forcey.persist_state') - def test_new_test_case_submission_functions(self, persist_state_mock, - submit_test_case_mock, - test_cases_on_or_after_mock): - forcey_path = '/path/to/4c' - real_state_file_path = '/path/to/state/file' - earliest_date = datetime.date(2020, 1, 1) - - persist_state_calls = [] - - # Since the set this gets is mutated, we need to copy it somehow. - def persist_state_side_effect(test_cases_to_persist, state_file_path, - most_recent_date): - self.assertEqual(state_file_path, real_state_file_path) - persist_state_calls.append( - (sorted(test_cases_to_persist), most_recent_date)) - - persist_state_mock.side_effect = persist_state_side_effect - - upload_lexan_crashes_to_forcey.submit_new_test_cases( - last_seen_test_cases=( - 'gs://test-case-0', - 'gs://test-case-1', + """Tests for upload_lexan_crashes_to_forcey.""" + + def test_date_parsing_functions(self): + self.assertEqual( + datetime.date(2020, 2, 1), + upload_lexan_crashes_to_forcey.from_ymd("2020-02-01"), + ) + + @unittest.mock.patch( + "upload_lexan_crashes_to_forcey.test_cases_on_or_after", + return_value=( + ( + datetime.date(2020, 1, 1), + ("gs://test-case-1", "gs://test-case-1.1"), + ), + (datetime.date(2020, 1, 2), ("gs://test-case-2",)), + (datetime.date(2020, 1, 1), ("gs://test-case-3",)), + (datetime.date(2020, 1, 4), ("gs://test-case-4",)), ), - earliest_date_to_check=earliest_date, - forcey=forcey_path, - state_file_path=real_state_file_path, ) - - test_cases_on_or_after_mock.assert_called_once_with(earliest_date) - self.assertEqual(submit_test_case_mock.call_args_list, [ - unittest.mock.call('gs://test-case-1.1', forcey_path), - unittest.mock.call('gs://test-case-2', forcey_path), - unittest.mock.call('gs://test-case-3', forcey_path), - unittest.mock.call('gs://test-case-4', forcey_path), - ]) - - self.assertEqual(persist_state_calls, [ - ( - ['gs://test-case-0', 'gs://test-case-1', 'gs://test-case-1.1'], - datetime.date(2020, 1, 1), - ), - ( - [ - 'gs://test-case-0', - 'gs://test-case-1', - 'gs://test-case-1.1', - 'gs://test-case-2', - ], - datetime.date(2020, 1, 2), - ), - ( - [ - 'gs://test-case-0', - 'gs://test-case-1', - 'gs://test-case-1.1', - 'gs://test-case-2', - 'gs://test-case-3', - ], - datetime.date(2020, 1, 2), - ), - ( + @unittest.mock.patch("upload_lexan_crashes_to_forcey.submit_test_case") + @unittest.mock.patch("upload_lexan_crashes_to_forcey.persist_state") + def test_new_test_case_submission_functions( + self, + persist_state_mock, + submit_test_case_mock, + test_cases_on_or_after_mock, + ): + forcey_path = "/path/to/4c" + real_state_file_path = "/path/to/state/file" + earliest_date = datetime.date(2020, 1, 1) + + persist_state_calls = [] + + # Since the set this gets is mutated, we need to copy it somehow. + def persist_state_side_effect( + test_cases_to_persist, state_file_path, most_recent_date + ): + self.assertEqual(state_file_path, real_state_file_path) + persist_state_calls.append( + (sorted(test_cases_to_persist), most_recent_date) + ) + + persist_state_mock.side_effect = persist_state_side_effect + + upload_lexan_crashes_to_forcey.submit_new_test_cases( + last_seen_test_cases=( + "gs://test-case-0", + "gs://test-case-1", + ), + earliest_date_to_check=earliest_date, + forcey=forcey_path, + state_file_path=real_state_file_path, + ) + + test_cases_on_or_after_mock.assert_called_once_with(earliest_date) + self.assertEqual( + submit_test_case_mock.call_args_list, [ - 'gs://test-case-0', - 'gs://test-case-1', - 'gs://test-case-1.1', - 'gs://test-case-2', - 'gs://test-case-3', - 'gs://test-case-4', + unittest.mock.call("gs://test-case-1.1", forcey_path), + unittest.mock.call("gs://test-case-2", forcey_path), + unittest.mock.call("gs://test-case-3", forcey_path), + unittest.mock.call("gs://test-case-4", forcey_path), ], - datetime.date(2020, 1, 4), - ), - ( + ) + + self.assertEqual( + persist_state_calls, [ - 'gs://test-case-1', - 'gs://test-case-1.1', - 'gs://test-case-2', - 'gs://test-case-3', - 'gs://test-case-4', + ( + [ + "gs://test-case-0", + "gs://test-case-1", + "gs://test-case-1.1", + ], + datetime.date(2020, 1, 1), + ), + ( + [ + "gs://test-case-0", + "gs://test-case-1", + "gs://test-case-1.1", + "gs://test-case-2", + ], + datetime.date(2020, 1, 2), + ), + ( + [ + "gs://test-case-0", + "gs://test-case-1", + "gs://test-case-1.1", + "gs://test-case-2", + "gs://test-case-3", + ], + datetime.date(2020, 1, 2), + ), + ( + [ + "gs://test-case-0", + "gs://test-case-1", + "gs://test-case-1.1", + "gs://test-case-2", + "gs://test-case-3", + "gs://test-case-4", + ], + datetime.date(2020, 1, 4), + ), + ( + [ + "gs://test-case-1", + "gs://test-case-1.1", + "gs://test-case-2", + "gs://test-case-3", + "gs://test-case-4", + ], + datetime.date(2020, 1, 4), + ), ], - datetime.date(2020, 1, 4), - ), - ]) + ) - @unittest.mock.patch( - 'upload_lexan_crashes_to_forcey.download_and_unpack_test_case') - @unittest.mock.patch('subprocess.run') - def test_test_case_submission_functions(self, subprocess_run_mock, - download_and_unpack_mock): - mock_gs_url = 'gs://foo/bar/baz' + @unittest.mock.patch( + "upload_lexan_crashes_to_forcey.download_and_unpack_test_case" + ) + @unittest.mock.patch("subprocess.run") + def test_test_case_submission_functions( + self, subprocess_run_mock, download_and_unpack_mock + ): + mock_gs_url = "gs://foo/bar/baz" - def side_effect(gs_url: str, tempdir: str) -> None: - self.assertEqual(gs_url, mock_gs_url) + def side_effect(gs_url: str, tempdir: str) -> None: + self.assertEqual(gs_url, mock_gs_url) - with open(os.path.join(tempdir, 'test_case.c'), 'w') as f: - # All we need is an empty file here. - pass + with open(os.path.join(tempdir, "test_case.c"), "w") as f: + # All we need is an empty file here. + pass - with open( - os.path.join(tempdir, 'test_case.sh'), 'w', encoding='utf-8') as f: - f.write('# Crash reproducer for clang version 9.0.0 (...)\n') - f.write('clang something or other\n') + with open( + os.path.join(tempdir, "test_case.sh"), "w", encoding="utf-8" + ) as f: + f.write("# Crash reproducer for clang version 9.0.0 (...)\n") + f.write("clang something or other\n") - download_and_unpack_mock.side_effect = side_effect - upload_lexan_crashes_to_forcey.submit_test_case(mock_gs_url, '4c') - subprocess_run_mock.assert_not_called() + download_and_unpack_mock.side_effect = side_effect + upload_lexan_crashes_to_forcey.submit_test_case(mock_gs_url, "4c") + subprocess_run_mock.assert_not_called() -if __name__ == '__main__': - unittest.main() +if __name__ == "__main__": + unittest.main() |