| #!/usr/bin/env python3 |
| # 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. |
| |
| """Tests for monitor_pgo_profiles.""" |
| |
| import datetime |
| import subprocess |
| import unittest |
| import unittest.mock |
| |
| import monitor_pgo_profiles |
| |
| |
| class Test(unittest.TestCase): |
| """Tests for monitor_pgo_profiles.""" |
| |
| def test_compose_complaint_with_zero_out_of_date(self): |
| self.assertIsNone(monitor_pgo_profiles.compose_complaint([])) |
| |
| def test_compose_complaint_with_one_out_of_date(self): |
| profdata_info = monitor_pgo_profiles.ProfdataInfo( |
| date=datetime.datetime(2020, 1, 2, 3, 4, 5), |
| location="gs://somewhere", |
| ) |
| result = monitor_pgo_profiles.compose_complaint( |
| [ |
| ("some_arch", profdata_info), |
| ] |
| ) |
| self.assertEqual( |
| result, |
| "\n".join( |
| ( |
| "1 profile is out of date:", |
| f"- some_arch (most recent profile was from {profdata_info.date} " |
| f"at {profdata_info.location!r})", |
| "", |
| "", |
| "PTAL to see if the llvm-pgo-generate bots are functioning " |
| "normally. Their status can be found at " |
| f"{monitor_pgo_profiles.PGO_BUILDBOT_LINK}.", |
| ) |
| ), |
| ) |
| |
| def test_compose_complaint_with_two_out_of_date(self): |
| profdata_info_1 = monitor_pgo_profiles.ProfdataInfo( |
| date=datetime.datetime(2020, 1, 2, 3, 4, 5), |
| location="gs://somewhere", |
| ) |
| profdata_info_2 = monitor_pgo_profiles.ProfdataInfo( |
| date=datetime.datetime(2020, 3, 2, 1, 4, 5), |
| location="gs://somewhere-else", |
| ) |
| result = monitor_pgo_profiles.compose_complaint( |
| [ |
| ("some_arch", profdata_info_1), |
| ("some_other_arch", profdata_info_2), |
| ] |
| ) |
| self.assertEqual( |
| result, |
| "\n".join( |
| ( |
| "2 profiles are out of date:", |
| f"- some_arch (most recent profile was from {profdata_info_1.date} " |
| f"at {profdata_info_1.location!r})", |
| f"- some_other_arch (most recent profile was from " |
| f"{profdata_info_2.date} at {profdata_info_2.location!r})", |
| "", |
| "", |
| "PTAL to see if the llvm-pgo-generate bots are functioning " |
| "normally. Their status can be found at " |
| f"{monitor_pgo_profiles.PGO_BUILDBOT_LINK}.", |
| ) |
| ), |
| ) |
| |
| @unittest.mock.patch.object(subprocess, "run") |
| def test_fetching_profdata_functions(self, subprocess_run_mock): |
| ls_return_value = unittest.mock.MagicMock() |
| ls_return_value.stdout = "\n".join( |
| ( |
| " 1234 2020-06-26T05:26:40Z gs://bar", |
| " 44 2020-06-23T05:26:40Z gs://foo", |
| " 1234 2020-06-25T05:26:40Z gs://zzz", |
| ) |
| ) |
| subprocess_run_mock.return_value = ls_return_value |
| |
| most_recent = monitor_pgo_profiles.fetch_most_recent_profdata("arm") |
| self.assertEqual( |
| most_recent, |
| monitor_pgo_profiles.ProfdataInfo( |
| date=datetime.datetime(2020, 6, 26, 5, 26, 40), |
| location="gs://bar", |
| ), |
| ) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |