diff options
Diffstat (limited to 'testing/test/test_skipfails.py')
-rw-r--r-- | testing/test/test_skipfails.py | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/testing/test/test_skipfails.py b/testing/test/test_skipfails.py new file mode 100644 index 0000000000..9dce0a9e23 --- /dev/null +++ b/testing/test/test_skipfails.py @@ -0,0 +1,256 @@ +# -*- coding: utf-8 -*- +# 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 json +from pathlib import Path + +import pytest +from mozunit import main +from skipfails import ( + MOCK_BUG_DEFAULTS, + MOCK_TASK_DEFAULTS, + MOCK_TASK_INITS, + Mock, + Skipfails, +) + +DATA_PATH = Path(__file__).with_name("data") + + +def test_get_revision(): + """Test get_revision""" + + sf = Skipfails() + with pytest.raises(ValueError) as e_info: + sf.get_revision("") + assert str(e_info.value) == "try_url scheme not https" + + with pytest.raises(ValueError) as e_info: + sf.get_revision("https://foo.bar") + assert str(e_info.value) == "try_url server not treeherder.mozilla.org" + + with pytest.raises(ValueError) as e_info: + sf.get_revision("https://treeherder.mozilla.org") + assert str(e_info.value) == "try_url query missing" + + with pytest.raises(ValueError) as e_info: + sf.get_revision("https://treeherder.mozilla.org?a=1") + assert str(e_info.value) == "try_url query missing revision" + + revision, repo = sf.get_revision( + "https://treeherder.mozilla.org/jobs?repo=try&revision=5b1738d0af571777199ff3c694b1590ff574946b" + ) + assert revision == "5b1738d0af571777199ff3c694b1590ff574946b" + assert repo == "try" + + +def test_get_tasks(): + """Test get_tasks import of mozci""" + + from mozci.push import Push + + revision = "5b1738d0af571777199ff3c694b1590ff574946b" + repo = "try" + push = Push(revision, repo) + assert push is not None + + +def get_failures(tasks_name, exp_f_name, task_details=None): + """Runs Skipfails.get_failures on tasks to compare with failures""" + sf = Skipfails() + if task_details is not None: # preload task details cache, if needed + for task_id in task_details: + sf.tasks[task_id] = task_details[task_id] + tasks_fp = DATA_PATH.joinpath(tasks_name).open("r", encoding="utf-8") + tasks = json.load(tasks_fp) + tasks = [Mock(task, MOCK_TASK_DEFAULTS, MOCK_TASK_INITS) for task in tasks] + exp_f_fp = DATA_PATH.joinpath(exp_f_name).open("r", encoding="utf-8") + expected_failures = exp_f_fp.read().strip() + failures = sf.get_failures(tasks) + actual_failures = json.dumps(failures, indent=2, sort_keys=True).strip() + assert actual_failures == expected_failures + + +def test_get_failures_1(): + """Test get_failures 1""" + task_details = {"dwOJ8M9ERSmk6oI2KXg6hg": {}} + get_failures("wayland-tasks-1.json", "wayland-failures-1.json", task_details) + + +def test_get_failures_2(): + """Test get_failures 2""" + task_details = { + "Y7r1q2xWSu-2bRAofEfeBw": {}, + "Z7r1q2xWSu-2bRAofEfeBw": {}, + "X7r1q2xWSu-2bRAofEfeBw": {}, + } + get_failures("wayland-tasks-2.json", "wayland-failures-2.json", task_details) + + +def test_get_failures_3(): + """Test get_failures 3""" + task_details = { + "b7_ahjGtQ_-ZMNBG_hUZUw": {}, + "WVczuxkuSRKZg_jMiGyQsA": {}, + "UOZUIVAaTZKmRwArq5WkDw": {}, + } + get_failures("wayland-tasks-3.json", "wayland-failures-3.json", task_details) + + +def test_get_failures_4(): + """Test get_failures 4""" + task_details = { + "bxMVPbPMTru_bfAivc1sPA": {}, + "EDql3NKPR3W6OEU3mLeKbg": {}, + "FDql3NKPR3W6OEU3mLeKbg": {}, + } + get_failures("wayland-tasks-4.json", "wayland-failures-4.json", task_details) + + +def test_get_failures_5(): + """Test get_failures 5""" + + task_details = { + "Bgc6We1sSjakIo3V9crldw": { + "expires": "2024-01-09T16:05:56.825Z", + "extra": { + "suite": "mochitest-browser", + "test-setting": { + "build": {"type": "opt"}, + "platform": { + "arch": "64", + "os": {"name": "linux", "version": "22.04"}, + "display": "wayland", + }, + "runtime": {}, + }, + }, + } + } + get_failures("wayland-tasks-5.json", "wayland-failures-5.json", task_details) + + +def test_get_bug_by_id(): + """Test get_bug_by_id""" + + sf = Skipfails() + id = 1682371 + # preload bug cache + bugs_filename = f"bug-{id}.json" + bugs_fp = DATA_PATH.joinpath(bugs_filename).open("r", encoding="utf-8") + bugs_data = json.load(bugs_fp) + preload_bugs = [Mock(b, MOCK_BUG_DEFAULTS) for b in bugs_data] + sf.bugs = preload_bugs + # function under test + bug = sf.get_bug_by_id(id) + assert bug.id == id + assert bug.product == "Testing" + assert bug.component == "General" + assert ( + bug.summary + == "create tool to quickly parse and identify all failures from a try push and ideally annotate manifests" + ) + + +def test_get_bugs_by_summary(): + """Test get_bugs_by_summary""" + + sf = Skipfails() + id = 1682371 + # preload bug cache + bugs_filename = f"bug-{id}.json" + bugs_fp = DATA_PATH.joinpath(bugs_filename).open("r", encoding="utf-8") + bugs_data = json.load(bugs_fp) + preload_bugs = [Mock(b, MOCK_BUG_DEFAULTS) for b in bugs_data] + sf.bugs = preload_bugs + # function under test + summary = "create tool to quickly parse and identify all failures from a try push and ideally annotate manifests" + bugs = sf.get_bugs_by_summary(summary) + assert len(bugs) == 1 + assert bugs[0].id == id + assert bugs[0].product == "Testing" + assert bugs[0].component == "General" + assert bugs[0].summary == summary + + +def test_get_variants(): + """Test get_variants""" + + sf = Skipfails() + variants = sf.get_variants() + assert "1proc" in variants + assert variants["1proc"] == "e10s" + assert "webrender-sw" in variants + assert variants["webrender-sw"] == "swgl" + assert "aab" in variants + assert variants["aab"] == "aab" + + +def test_task_to_skip_if(): + """Test task_to_skip_if""" + + # preload task cache + task_id = "UP-t3xrGSDWvUNjFGIt_aQ" + task_details = { + "expires": "2024-01-09T16:05:56.825Z", + "extra": { + "suite": "mochitest-plain", + "test-setting": { + "build": {"type": "debug"}, + "platform": { + "arch": "32", + "os": {"build": "2009", "name": "windows", "version": "11"}, + }, + "runtime": {}, + }, + }, + } + sf = Skipfails() + sf.tasks[task_id] = task_details + # function under test + skip_if = sf.task_to_skip_if(task_id) + assert skip_if == "os == 'win' && os_version == '11' && bits == '32' && debug" + + +def test_get_filename_in_manifest(): + """Test get_filename_in_manifest""" + + sf = Skipfails() + + assert ( + sf.get_filename_in_manifest( + "browser/components/sessionstore/test/browser.toml", + "browser/components/sessionstore/test/browser_closed_tabs_windows.js", + ) + == "browser_closed_tabs_windows.js" + ) + assert ( + sf.get_filename_in_manifest( + "browser/base/content/test/webrtc/gracePeriod/browser.toml", + "browser/base/content/test/webrtc/browser_devices_get_user_media_grace.js", + ) + == "../browser_devices_get_user_media_grace.js" + ) + assert ( + sf.get_filename_in_manifest( + "dom/animation/test/mochitest.toml", + "dom/animation/test/document-timeline/test_document-timeline.html", + ) + == "document-timeline/test_document-timeline.html" + ) + + +def test_label_to_platform_testname(): + """Test label_to_platform_testname""" + + sf = Skipfails() + label = "test-linux2204-64-wayland/opt-mochitest-browser-chrome-swr-13" + platform, testname = sf.label_to_platform_testname(label) + assert platform == "test-linux2204-64-wayland/opt" + assert testname == "mochitest-browser-chrome" + + +if __name__ == "__main__": + main() |