|
1 | 1 | #!/usr/bin/env python3 |
2 | 2 | """ |
3 | | -Tests for check_kernel_at_least in ensure_kernel.sh. |
| 3 | +Tests for check_kernel_at_least and check_kernel_exact in ensure_kernel.sh. |
4 | 4 |
|
5 | | -The check compares upstream kernel versions (before first '-') so that |
6 | | -e.g. 6.17.0-1007-aws is correctly considered >= 6.14.0-1018-aws (6.17 >= 6.14). |
| 5 | +- at_least: compares upstream versions (before first '-'); current >= required passes. |
| 6 | +- exact: current upstream must equal required upstream (NVIDIA_SETUP_KERNEL_ALLOW_NEWER=false behavior). |
7 | 7 | """ |
8 | 8 |
|
9 | 9 | from pathlib import Path |
|
15 | 15 | _CHECK_SCRIPT_DEST = "skyhook_dir/steps/run_check_kernel_at_least_test.sh" |
16 | 16 |
|
17 | 17 |
|
18 | | -def _run_check(runner: DockerTestRunner, current_kernel: str, required_kernel: str) -> int: |
19 | | - """Run the check script; return exit code.""" |
| 18 | +def _run_check( |
| 19 | + runner: DockerTestRunner, |
| 20 | + current_kernel: str, |
| 21 | + required_kernel: str, |
| 22 | + mode: str = "at_least", |
| 23 | +) -> int: |
| 24 | + """Run the check script; return exit code. mode is 'at_least' or 'exact'.""" |
| 25 | + env = { |
| 26 | + "CURRENT_KERNEL": current_kernel, |
| 27 | + "REQUIRED_KERNEL": required_kernel, |
| 28 | + } |
| 29 | + if mode != "at_least": |
| 30 | + env["KERNEL_CHECK_MODE"] = mode |
20 | 31 | result = runner.run_script( |
21 | 32 | script="steps/run_check_kernel_at_least_test.sh", |
22 | 33 | configmaps={}, |
23 | | - env_vars={ |
24 | | - "CURRENT_KERNEL": current_kernel, |
25 | | - "REQUIRED_KERNEL": required_kernel, |
26 | | - }, |
| 34 | + env_vars=env, |
27 | 35 | extra_files=[(_CHECK_SCRIPT_SOURCE, _CHECK_SCRIPT_DEST)], |
28 | 36 | ) |
29 | 37 | return result.exit_code |
30 | 38 |
|
31 | 39 |
|
32 | | -def test_current_newer_upstream_passes(): |
| 40 | +# --- check_kernel_at_least (allow newer: current >= required) --- |
| 41 | + |
| 42 | + |
| 43 | +def test_at_least_current_newer_upstream_passes(): |
33 | 44 | """6.17.0-1007-aws >= 6.14.0-1018-aws (upstream 6.17 >= 6.14); was previously failing with sort -V on full string.""" |
34 | 45 | runner = DockerTestRunner(package="nvidia-setup") |
35 | 46 | try: |
36 | | - exit_code = _run_check(runner, "6.17.0-1007-aws", "6.14.0-1018-aws") |
| 47 | + exit_code = _run_check(runner, "6.17.0-1007-aws", "6.14.0-1018-aws", mode="at_least") |
37 | 48 | assert exit_code == 0 |
38 | 49 | finally: |
39 | 50 | runner.cleanup() |
40 | 51 |
|
41 | 52 |
|
42 | | -def test_current_same_upstream_passes(): |
| 53 | +def test_at_least_current_same_upstream_passes(): |
43 | 54 | """6.14.0-1000-aws >= 6.14.0-1018-aws (same upstream).""" |
44 | 55 | runner = DockerTestRunner(package="nvidia-setup") |
45 | 56 | try: |
46 | | - exit_code = _run_check(runner, "6.14.0-1000-aws", "6.14.0-1018-aws") |
| 57 | + exit_code = _run_check(runner, "6.14.0-1000-aws", "6.14.0-1018-aws", mode="at_least") |
47 | 58 | assert exit_code == 0 |
48 | 59 | finally: |
49 | 60 | runner.cleanup() |
50 | 61 |
|
51 | 62 |
|
52 | | -def test_current_older_upstream_fails(): |
| 63 | +def test_at_least_current_older_upstream_fails(): |
53 | 64 | """6.13.0-1000-aws < 6.14.0-1018-aws (upstream 6.13 < 6.14).""" |
54 | 65 | runner = DockerTestRunner(package="nvidia-setup") |
55 | 66 | try: |
56 | | - exit_code = _run_check(runner, "6.13.0-1000-aws", "6.14.0-1018-aws") |
| 67 | + exit_code = _run_check(runner, "6.13.0-1000-aws", "6.14.0-1018-aws", mode="at_least") |
57 | 68 | assert exit_code == 1 |
58 | 69 | finally: |
59 | 70 | runner.cleanup() |
60 | 71 |
|
61 | 72 |
|
62 | | -def test_current_exact_required_passes(): |
| 73 | +def test_at_least_current_exact_required_passes(): |
63 | 74 | """6.14.0-1018-aws >= 6.14.0-1018-aws (equal).""" |
64 | 75 | runner = DockerTestRunner(package="nvidia-setup") |
65 | 76 | try: |
66 | | - exit_code = _run_check(runner, "6.14.0-1018-aws", "6.14.0-1018-aws") |
| 77 | + exit_code = _run_check(runner, "6.14.0-1018-aws", "6.14.0-1018-aws", mode="at_least") |
| 78 | + assert exit_code == 0 |
| 79 | + finally: |
| 80 | + runner.cleanup() |
| 81 | + |
| 82 | + |
| 83 | +# --- check_kernel_exact (exact upstream match; NVIDIA_SETUP_KERNEL_ALLOW_NEWER=false) --- |
| 84 | + |
| 85 | + |
| 86 | +def test_exact_current_newer_upstream_fails(): |
| 87 | + """6.17.0-1007-aws vs 6.14.0-1018-aws: exact requires same upstream, so fails.""" |
| 88 | + runner = DockerTestRunner(package="nvidia-setup") |
| 89 | + try: |
| 90 | + exit_code = _run_check(runner, "6.17.0-1007-aws", "6.14.0-1018-aws", mode="exact") |
| 91 | + assert exit_code == 1 |
| 92 | + finally: |
| 93 | + runner.cleanup() |
| 94 | + |
| 95 | + |
| 96 | +def test_exact_current_same_upstream_passes(): |
| 97 | + """6.14.0-1000-aws vs 6.14.0-1018-aws: same upstream 6.14.0, exact passes.""" |
| 98 | + runner = DockerTestRunner(package="nvidia-setup") |
| 99 | + try: |
| 100 | + exit_code = _run_check(runner, "6.14.0-1000-aws", "6.14.0-1018-aws", mode="exact") |
| 101 | + assert exit_code == 0 |
| 102 | + finally: |
| 103 | + runner.cleanup() |
| 104 | + |
| 105 | + |
| 106 | +def test_exact_current_older_upstream_fails(): |
| 107 | + """6.13.0-1000-aws vs 6.14.0-1018-aws: different upstream, exact fails.""" |
| 108 | + runner = DockerTestRunner(package="nvidia-setup") |
| 109 | + try: |
| 110 | + exit_code = _run_check(runner, "6.13.0-1000-aws", "6.14.0-1018-aws", mode="exact") |
| 111 | + assert exit_code == 1 |
| 112 | + finally: |
| 113 | + runner.cleanup() |
| 114 | + |
| 115 | + |
| 116 | +def test_exact_current_exact_required_passes(): |
| 117 | + """6.14.0-1018-aws vs 6.14.0-1018-aws: exact match passes.""" |
| 118 | + runner = DockerTestRunner(package="nvidia-setup") |
| 119 | + try: |
| 120 | + exit_code = _run_check(runner, "6.14.0-1018-aws", "6.14.0-1018-aws", mode="exact") |
67 | 121 | assert exit_code == 0 |
68 | 122 | finally: |
69 | 123 | runner.cleanup() |
0 commit comments