Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

from unittest.mock import patch
import mozunit
import pytest
from tryselect import push
@pytest.mark.parametrize(
"method,labels,params,routes,expected",
(
pytest.param(
"fuzzy",
["task-foo", "task-bar"],
None,
None,
{
"parameters": {
"optimize_target_tasks": False,
"try_task_config": {
"env": {"TRY_SELECTOR": "fuzzy"},
"tasks": ["task-bar", "task-foo"],
},
},
"version": 2,
},
id="basic",
),
pytest.param(
"fuzzy",
["task-foo"],
{"existing_tasks": {"task-foo": "123", "task-bar": "abc"}},
None,
{
"parameters": {
"existing_tasks": {"task-bar": "abc"},
"optimize_target_tasks": False,
"try_task_config": {
"env": {"TRY_SELECTOR": "fuzzy"},
"tasks": ["task-foo"],
},
},
"version": 2,
},
id="existing_tasks",
),
pytest.param(
"fuzzy",
["task-" + str(i) for i in range(1001)], # 1001 tasks, over threshold
None,
None,
{
"parameters": {
"optimize_target_tasks": False,
"try_task_config": {
"env": {"TRY_SELECTOR": "fuzzy"},
"priority": "lowest",
"tasks": sorted(["task-" + str(i) for i in range(1001)]),
},
},
"version": 2,
},
id="large_push_with_priority",
),
pytest.param(
"fuzzy",
["task-" + str(i) for i in range(500)], # 500 tasks with rebuild=3
{"try_task_config": {"rebuild": 3}},
None,
{
"parameters": {
"optimize_target_tasks": False,
"try_task_config": {
"env": {"TRY_SELECTOR": "fuzzy"},
"priority": "lowest",
"rebuild": 3,
"tasks": sorted(["task-" + str(i) for i in range(500)]),
},
},
"version": 2,
},
id="large_push_with_rebuild",
),
pytest.param(
"fuzzy",
["task-" + str(i) for i in range(100)], # Under threshold
None,
None,
{
"parameters": {
"optimize_target_tasks": False,
"try_task_config": {
"env": {"TRY_SELECTOR": "fuzzy"},
"tasks": sorted(["task-" + str(i) for i in range(100)]),
},
},
"version": 2,
},
id="small_push_no_priority",
),
pytest.param(
"fuzzy",
[
"task-" + str(i) for i in range(1001)
], # Large push with existing priority
{"try_task_config": {"priority": "low"}},
None,
{
"parameters": {
"optimize_target_tasks": False,
"try_task_config": {
"env": {"TRY_SELECTOR": "fuzzy"},
"priority": "low", # Should keep existing priority
"tasks": sorted(["task-" + str(i) for i in range(1001)]),
},
},
"version": 2,
},
id="large_push_existing_priority",
),
),
)
def test_generate_try_task_config(method, labels, params, routes, expected):
# Simulate user responding "yes" to the large push prompt
with patch("builtins.input", return_value="y"):
assert (
push.generate_try_task_config(method, labels, params=params, routes=routes)
== expected
)
def test_large_push_user_declines():
"""Test that when user declines large push warning, the system exits."""
with patch("builtins.input", return_value="n"):
with pytest.raises(SystemExit) as exc_info:
push.generate_try_task_config(
"fuzzy",
["task-" + str(i) for i in range(1001)],
)
assert exc_info.value.code == 1
def test_large_push_warning_message(capsys):
"""Test that the warning message is displayed for large pushes."""
with patch("builtins.input", return_value="y"):
push.generate_try_task_config(
"fuzzy",
["task-" + str(i) for i in range(1001)],
)
captured = capsys.readouterr()
assert "Your push would schedule at least 1001 tasks" in captured.out
assert "lower priority" in captured.out
def test_get_sys_argv():
input_argv = [
"./mach",
"try",
"fuzzy",
"--full",
"--artifact",
"--push-to-vcs",
"--query",
"'android-hw !shippable !nofis",
"--no-push",
]
expected_string = './mach try fuzzy --full --artifact --push-to-vcs --query "\'android-hw !shippable !nofis" --no-push'
assert push.get_sys_argv(input_argv) == expected_string
def test_get_sys_argv_2():
input_argv = [
"./mach",
"try",
"fuzzy",
"--query",
"'test-linux1804-64-qr/opt-mochitest-plain-",
"--worker-override=t-linux-large=gecko-t/t-linux-2204-wayland-experimental",
"--no-push",
]
expected_string = './mach try fuzzy --query "\'test-linux1804-64-qr/opt-mochitest-plain-" --worker-override=t-linux-large=gecko-t/t-linux-2204-wayland-experimental --no-push'
assert push.get_sys_argv(input_argv) == expected_string
if __name__ == "__main__":
mozunit.main()