Bug 1830741 - Add tests for mach try perf comparators. r=perftest-reviewers,AlexandruIonescu

This patch adds some unit tests for the comparators.

Depends on D177031

Differential Revision: https://phabricator.services.mozilla.com/D177201
This commit is contained in:
Greg Mierzwinski 2023-05-11 14:35:56 +00:00
Родитель a33860448a
Коммит 9b0c600201
2 изменённых файлов: 136 добавлений и 0 удалений

Просмотреть файл

@ -8,6 +8,7 @@ requirements = tools/tryselect/selectors/chooser/requirements.txt
[test_fuzzy.py] [test_fuzzy.py]
[test_mozharness_integration.py] [test_mozharness_integration.py]
[test_perf.py] [test_perf.py]
[test_perfcomparators.py]
[test_presets.py] [test_presets.py]
# Modifies "task_duration_history.json" in .mozbuild. Since other tests depend on this file, this test # Modifies "task_duration_history.json" in .mozbuild. Since other tests depend on this file, this test
# shouldn't be run in parallel with those other tests. # shouldn't be run in parallel with those other tests.

Просмотреть файл

@ -0,0 +1,135 @@
# 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 tempfile
from unittest import mock
import mozunit
import pytest
from tryselect.selectors.perfselector.perfcomparators import (
BenchmarkComparator,
ComparatorNotFound,
get_comparator,
)
@pytest.mark.parametrize(
"test_link",
[
"https://github.com/mozilla-mobile/firefox-android/pull/1627",
"https://github.com/mozilla-mobile/firefox-android/pull/1876/"
"commits/17c7350cc37a4a85cea140a7ce54e9fd037b5365",
],
)
def test_benchmark_comparator(test_link):
def _verify_extra_args(extra_args):
assert len(extra_args) == 3
if "commit" in test_link:
assert (
"benchmark-revision=17c7350cc37a4a85cea140a7ce54e9fd037b5365"
in extra_args
)
else:
assert "benchmark-revision=sha-for-link" in extra_args
assert "benchmark-repository=url-for-link" in extra_args
assert "benchmark-branch=ref-for-link" in extra_args
comparator = BenchmarkComparator(
None, None, None, [f"base-link={test_link}", f"new-link={test_link}"]
)
with mock.patch("requests.get") as mocked_get:
magic_get = mock.MagicMock()
magic_get.json.return_value = {
"head": {
"repo": {
"html_url": "url-for-link",
},
"sha": "sha-for-link",
"ref": "ref-for-link",
}
}
magic_get.status_code = 200
mocked_get.return_value = magic_get
extra_args = []
comparator.setup_base_revision(extra_args)
_verify_extra_args(extra_args)
extra_args = []
comparator.setup_new_revision(extra_args)
_verify_extra_args(extra_args)
def test_benchmark_comparator_no_pr_links():
def _verify_extra_args(extra_args):
assert len(extra_args) == 3
assert "benchmark-revision=rev" in extra_args
assert "benchmark-repository=link" in extra_args
assert "benchmark-branch=fake" in extra_args
comparator = BenchmarkComparator(
None,
None,
None,
[
"base-repo=link",
"base-branch=fake",
"base-revision=rev",
"new-repo=link",
"new-branch=fake",
"new-revision=rev",
],
)
with mock.patch("requests.get") as mocked_get:
magic_get = mock.MagicMock()
magic_get.json.return_value = {
"head": {
"repo": {
"html_url": "url-for-link",
},
"sha": "sha-for-link",
"ref": "ref-for-link",
}
}
magic_get.status_code = 200
mocked_get.return_value = magic_get
extra_args = []
comparator.setup_base_revision(extra_args)
_verify_extra_args(extra_args)
extra_args = []
comparator.setup_new_revision(extra_args)
_verify_extra_args(extra_args)
def test_get_comparator_bad_name():
with pytest.raises(ComparatorNotFound):
get_comparator("BadName")
def test_get_comparator_bad_script():
with pytest.raises(ComparatorNotFound):
with tempfile.NamedTemporaryFile() as tmpf:
tmpf.close()
get_comparator(tmpf.name)
def test_get_comparator_benchmark_name():
comparator_klass = get_comparator("BenchmarkComparator")
assert comparator_klass.__name__ == "BenchmarkComparator"
def test_get_comparator_benchmark_script():
# If the get_comparator method is working for scripts, then
# it should find the first defined class in this file, or the
# first imported class that matches it
comparator_klass = get_comparator(__file__)
assert comparator_klass.__name__ == "BenchmarkComparator"
if __name__ == "__main__":
mozunit.main()