forked from mirrors/gecko-dev
256 lines
7.8 KiB
Python
256 lines
7.8 KiB
Python
# -*- 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()
|