aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-20 16:00:39 -0500
committerCraig Jennings <c@cjennings.net>2026-07-20 16:00:39 -0500
commit67d0b6ea2e132a4ac9fd25bb977dbc4cb62b3230 (patch)
tree164ac7d44cd293820d373274406f8278c8525e7f /tests
parentdb6ca439938e4a57e6d1f8d7487346a67f7c439e (diff)
downloadarchsetup-67d0b6ea2e132a4ac9fd25bb977dbc4cb62b3230.tar.gz
archsetup-67d0b6ea2e132a4ac9fd25bb977dbc4cb62b3230.zip
refactor(installer): extract validate_yesno and a NVIDIA driver-floor constant
Four near-identical blocks validated that AUTOLOGIN, NO_GPU_DRIVERS, INSTALL_CLAUDE_CODE, and INSTALL_DEVICE_UDEV_RULES were empty or exactly yes/no. They collapse into a validate_yesno helper the callers guard with `|| exit 1`. The NVIDIA driver floor of 535 was a magic literal in the comparison and three prose lines. It now lives in a NVIDIA_MIN_DRIVER constant, and the nvidia-preflight test sources that constant alongside the function it extracts. This is the safe, purely-testable slice of the refactor rollup. The structural extractions that touch the installer's system-mutation paths -- the GPU modalias scan, the stow and retry loops, the display-server/window-manager dispatch, and the snapper/fsck/GRUB/waybar sed blocks -- are split into a follow-up so they get characterization coverage first rather than a blind rewrite.
Diffstat (limited to 'tests')
-rw-r--r--tests/installer-steps/test_validate_yesno.py57
-rw-r--r--tests/nvidia-preflight/test_nvidia_preflight.py3
2 files changed, 59 insertions, 1 deletions
diff --git a/tests/installer-steps/test_validate_yesno.py b/tests/installer-steps/test_validate_yesno.py
new file mode 100644
index 0000000..da78fc5
--- /dev/null
+++ b/tests/installer-steps/test_validate_yesno.py
@@ -0,0 +1,57 @@
+"""Test the validate_yesno config-validation helper.
+
+The installer had four near-identical blocks validating that AUTOLOGIN,
+NO_GPU_DRIVERS, INSTALL_CLAUDE_CODE, and INSTALL_DEVICE_UDEV_RULES are empty or
+exactly yes/no. validate_yesno collapses them into one testable helper: empty
+passes (the default), yes/no pass, anything else fails with a named error.
+
+Method: sed-extract validate_yesno from the real `archsetup` and drive it with
+plain args.
+
+Run from repo root:
+ python3 -m unittest tests.installer-steps.test_validate_yesno
+"""
+
+import os
+import subprocess
+import textwrap
+import unittest
+
+REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))
+ARCHSETUP = os.path.join(REPO_ROOT, "archsetup")
+
+
+def run(name, value):
+ script = textwrap.dedent(f"""\
+ source <(sed -n '/^validate_yesno() {{/,/^}}/p' "{ARCHSETUP}")
+ validate_yesno {name!r} {value!r}
+ echo "RC=$?"
+ """)
+ return subprocess.run(
+ ["bash", "-c", script], capture_output=True, text=True, timeout=10,
+ )
+
+
+class ValidateYesno(unittest.TestCase):
+ def test_yes_passes(self):
+ self.assertIn("RC=0", run("AUTOLOGIN", "yes").stdout)
+
+ def test_no_passes(self):
+ self.assertIn("RC=0", run("AUTOLOGIN", "no").stdout)
+
+ def test_empty_passes(self):
+ self.assertIn("RC=0", run("AUTOLOGIN", "").stdout)
+
+ def test_other_value_fails_with_named_error(self):
+ r = run("NO_GPU_DRIVERS", "maybe")
+ self.assertNotIn("RC=0", r.stdout)
+ self.assertIn("NO_GPU_DRIVERS", r.stderr)
+ self.assertIn("maybe", r.stderr)
+
+ def test_capitalized_yes_fails(self):
+ # The values are compared exactly; "Yes" is not accepted.
+ self.assertNotIn("RC=0", run("AUTOLOGIN", "Yes").stdout)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tests/nvidia-preflight/test_nvidia_preflight.py b/tests/nvidia-preflight/test_nvidia_preflight.py
index bdacfd5..191e983 100644
--- a/tests/nvidia-preflight/test_nvidia_preflight.py
+++ b/tests/nvidia-preflight/test_nvidia_preflight.py
@@ -50,7 +50,8 @@ class NvidiaPreflightHarness(unittest.TestCase):
"#!/bin/bash\n"
'ARCHSETUP="$1"; shift\n'
"source <(sed -n "
- "'/^nvidia_preflight_report() {/,/^}/p' \"$ARCHSETUP\")\n"
+ "'/^NVIDIA_MIN_DRIVER=/p;"
+ "/^nvidia_preflight_report() {/,/^}/p' \"$ARCHSETUP\")\n"
"nvidia_preflight_report\n"
)
os.chmod(self.wrapper, 0o755)