зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
a33860448a
Коммит
9b0c600201
|
@ -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()
|
Загрузка…
Ссылка в новой задаче