from __future__ import annotations from typing import Any from unittest import main, TestCase from tools.alerts.create_alerts import filter_job_names, JobStatus JOB_NAME = "periodic / linux-xenial-cuda10.2-py3-gcc7-slow-gradcheck / test (default, 2, 2, linux.4xlarge.nvidia.gpu)" MOCK_TEST_DATA = [ { "sha": "f02f3046571d21b48af3067e308a1e0f29b43af9", "id": 7819529276, "conclusion": "failure", "htmlUrl": "https://github.com/pytorch/pytorch/runs/7819529276?check_suite_focus=true", "logUrl": "https://ossci-raw-job-status.s3.amazonaws.com/log/7819529276", "durationS": 14876, "failureLine": "##[error]The action has timed out.", "failureContext": "", "failureCaptures": ["##[error]The action has timed out."], "failureLineNumber": 83818, "repo": "pytorch/pytorch", }, { "sha": "d0d6b1f2222bf90f478796d84a525869898f55b6", "id": 7818399623, "conclusion": "failure", "htmlUrl": "https://github.com/pytorch/pytorch/runs/7818399623?check_suite_focus=true", "logUrl": "https://ossci-raw-job-status.s3.amazonaws.com/log/7818399623", "durationS": 14882, "failureLine": "##[error]The action has timed out.", "failureContext": "", "failureCaptures": ["##[error]The action has timed out."], "failureLineNumber": 72821, "repo": "pytorch/pytorch", }, ] class TestGitHubPR(TestCase): # Should fail when jobs are ? ? Fail Fail def test_alert(self) -> None: modified_data: list[Any] = [{}] modified_data.append({}) modified_data.extend(MOCK_TEST_DATA) status = JobStatus(JOB_NAME, modified_data) self.assertTrue(status.should_alert()) # test filter job names def test_job_filter(self) -> None: job_names = [ "pytorch_linux_xenial_py3_6_gcc5_4_test", "pytorch_linux_xenial_py3_6_gcc5_4_test2", ] self.assertListEqual( filter_job_names(job_names, ""), job_names, "empty regex should match all jobs", ) self.assertListEqual(filter_job_names(job_names, ".*"), job_names) self.assertListEqual(filter_job_names(job_names, ".*xenial.*"), job_names) self.assertListEqual( filter_job_names(job_names, ".*xenial.*test2"), ["pytorch_linux_xenial_py3_6_gcc5_4_test2"], ) self.assertListEqual(filter_job_names(job_names, ".*xenial.*test3"), []) self.assertRaises( Exception, lambda: filter_job_names(job_names, "["), msg="malformed regex should throw exception", ) if __name__ == "__main__": main()