Skip to content

Commit 98a1bff

Browse files
committed
fix/improve argparsing tests
1 parent 6d494a6 commit 98a1bff

File tree

2 files changed

+37
-25
lines changed

2 files changed

+37
-25
lines changed

.github/triage/jax_toolbox_triage/args.py

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ def parse_commit_argument(s):
1010
ret = {}
1111
for part in s.split(","):
1212
sw, commit = part.split(":", 1)
13-
assert sw in {"jax", "xla"}, sw
1413
assert sw not in ret, ret
1514
ret[sw] = commit
15+
assert ret.keys() == {"jax", "xla"}, ret.keys()
1616
return ret
1717

1818

@@ -175,26 +175,19 @@ def parse_args(args=None):
175175
)
176176
args = parser.parse_args(args=args)
177177
assert args.container_runtime in {"docker", "pyxis"}, args.container_runtime
178-
num_explicit_containers = (args.passing_container is not None) + (
179-
args.failing_container is not None
180-
)
181-
if num_explicit_containers == 2:
182-
# Explicit mode, --container, --start-date and --end-date are all ignored
183-
# TODO: --passing-commits --failing-commits
184-
if args.container:
185-
raise Exception(
186-
"--container must not be passed if --passing-container and --failing-container are"
187-
)
188-
if args.start_date:
189-
raise Exception(
190-
"--start-date must not be passed if --passing-container and --failing-container are"
191-
)
192-
if args.end_date:
193-
raise Exception(
194-
"--end-date must not be passed if --passing-container and --failing-container are"
195-
)
196-
elif num_explicit_containers == 0 and args.container is None:
197-
raise Exception(
198-
"--container must be passed if --passing-container and --failing-container are not"
199-
)
178+
passing_commits_known = (args.passing_container is not None) or (args.passing_commits is not None)
179+
failing_commits_known = (args.failing_container is not None) or (args.failing_commits is not None)
180+
sets_of_known_commits = passing_commits_known + failing_commits_known
181+
if sets_of_known_commits == 2:
182+
# If the container-level search is being skipped, because a valid combination
183+
# of --{passing,failing}-{commits,container} is passed, then no container-level
184+
# search options should be passed.
185+
assert args.container is None and args.start_date is None and args.end_date is None, "No container-level search options should be passed if the passing/failing containers/commits have been passed explicitly."
186+
assert args.passing_container is not None or args.failing_container is not None, ""
187+
elif sets_of_known_commits == 1:
188+
raise Exception("If --passing-{commits OR container} is passed then --failing-{commits OR container} should be too")
189+
else:
190+
# None of --{passing,failing}-{commits,container} were passed, make sure the
191+
# compulsory arguments for the container-level search were passed
192+
assert args.container is not None, "--container must be passed for the container-level search"
200193
return args

.github/triage/tests/test_arg_parsing.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
"--failing-container",
99
"failing-url",
1010
]
11+
valid_container_and_commits = [
12+
["--passing-container", "passing-url", "--failing-commits", "jax:0123456789,xla:fedcba9876543210"],
13+
["--failing-container", "failing-url", "--passing-commits", "xla:fedcba9876543210,jax:0123456789"],
14+
]
1115
valid_start_end_date_args = [
1216
["--container", "jax"],
1317
["--container", "jax", "--start-date", "2024-10-02"],
@@ -17,7 +21,7 @@
1721

1822

1923
@pytest.mark.parametrize(
20-
"good_args", [valid_start_end_container] + valid_start_end_date_args
24+
"good_args", [valid_start_end_container] + valid_start_end_date_args + valid_container_and_commits
2125
)
2226
def test_good_container_args(good_args):
2327
args = parse_args(good_args + test_command)
@@ -39,9 +43,20 @@ def test_bad_container_arg_combinations_across_groups(date_args):
3943
["--start-date", "2024-10-01"],
4044
["--end-date", "2024-10-02"],
4145
["--start-date", "2024-10-01", "--end-date", "2024-10-02"],
42-
# Need both if either is passed
46+
# If --passing-container (or --passing-commits) is passed then
47+
# --failing-container (or --failing-commits) must be too
4348
["--passing-container", "passing-url"],
4449
["--failing-container", "failing-url"],
50+
# Need at least one container
51+
["--passing-commits", "jax:0123456789,xla:fedcba9876543210", "--failing-commits", "xla:fedcba9876543210,jax:0123456789"],
52+
# Cannot combine --passing-container with --passing-commits etc.
53+
["--passing-container", "passing-url", "--passing-commits", "jax:123,xla:456"],
54+
["--failing-container", "failing-url", "--failing-commits", "jax:123,xla:456"],
55+
# --{passing,failing}-commits must be formatted correctly
56+
["--passing-container", "passing-url", "--failing-commits", "jax:123"],
57+
["--passing-container", "passing-url", "--failing-commits", "jax:123,jax:456"],
58+
["--passing-container", "passing-url", "--failing-commits", "xla:123"],
59+
["--passing-container", "passing-url", "--failing-commits", "bob:123"],
4560
],
4661
)
4762
def test_bad_container_arg_combinations_within_groups(container_args):
@@ -60,3 +75,7 @@ def test_bad_container_arg_combinations_within_groups(container_args):
6075
def test_unparsable_container_args(container_args):
6176
with pytest.raises(SystemExit):
6277
parse_args(container_args + test_command)
78+
79+
def test_invalid_container_runtime():
80+
with pytest.raises(Exception):
81+
parse_args(["--container-runtime=magic-beans"] + test_command)

0 commit comments

Comments
 (0)