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