diff options
Diffstat (limited to 'python/mozperftest/mozperftest/tests/test_change_detector.py')
-rw-r--r-- | python/mozperftest/mozperftest/tests/test_change_detector.py | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/python/mozperftest/mozperftest/tests/test_change_detector.py b/python/mozperftest/mozperftest/tests/test_change_detector.py new file mode 100644 index 0000000000..ee9fa5fa0f --- /dev/null +++ b/python/mozperftest/mozperftest/tests/test_change_detector.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +import pathlib +from unittest import mock + +import mozunit +import pytest + +from mozperftest.tests.support import temp_file +from mozperftest.tools import PerformanceChangeDetected, run_change_detector + + +def test_change_detector_basic(kwargs=None, return_value=({}, {})): + mocked_detector = mock.MagicMock() + mocked_detector_module = mock.MagicMock() + mocked_detector_module.ChangeDetector = mocked_detector + + with mock.patch.dict( + "sys.modules", + { + "mozperftest_tools.regression_detector": mocked_detector_module, + }, + ): + mocked_detector.return_value.detect_changes.return_value = return_value + + with temp_file() as f: + parent_dir = pathlib.Path(f).parent + + if kwargs is None: + kwargs = { + "test_name": "browsertime-test", + "new_test_name": None, + "platform": "test-platform/opt", + "new_platform": None, + "base_branch": "try", + "new_branch": "try", + "base_revision": "99", + "new_revision": "99", + } + + run_change_detector(parent_dir, kwargs) + + mocked_detector.return_value.detect_changes.assert_called() + + return mocked_detector_module + + +def test_change_detector_with_task_name(): + test_change_detector_basic( + { + "task_names": ["test-platform/opt-browsertime-test"], + "new_test_name": None, + "platform": None, + "new_platform": None, + "base_branch": "try", + "new_branch": "try", + "base_revision": "99", + "new_revision": "99", + } + ) + + +def test_change_detector_option_failure(): + with pytest.raises(Exception): + test_change_detector_basic( + { + "test_name": None, + "new_test_name": None, + "platform": "test-platform/opt", + "new_platform": None, + "base_branch": "try", + "new_branch": "try", + "base_revision": "99", + "new_revision": "99", + } + ) + + with pytest.raises(Exception): + test_change_detector_basic( + { + "test_name": "browsertime-test", + "new_test_name": None, + "platform": None, + "new_platform": None, + "base_branch": "try", + "new_branch": "try", + "base_revision": "99", + "new_revision": "99", + } + ) + + +def test_change_detector_with_detection(): + with pytest.raises(PerformanceChangeDetected): + test_change_detector_basic( + { + "task_names": ["test-platform/opt-browsertime-test"], + "new_test_name": None, + "platform": None, + "new_platform": None, + "base_branch": "try", + "new_branch": "try", + "base_revision": "99", + "new_revision": "99", + }, + (["detection"], {"warm": {"metric": {"detection": [99]}}, "cold": {}}), + ) + + +if __name__ == "__main__": + mozunit.main() |