From c390bd25caa10a80d84c6374d70f214a6a636855 Mon Sep 17 00:00:00 2001 From: Jakub Czajka Date: Wed, 15 Jul 2026 22:50:45 +0000 Subject: [PATCH] [tests] Add home environment and package test cases. Test claude-code and paseo binaries, dak user existence, and home activation via dotfile (.guile). Co-Authored-By: Claude --- tests/claude-code.scm | 17 +++++++++++++++++ tests/dotfiles.scm | 15 +++++++++++++++ tests/paseo.scm | 17 +++++++++++++++++ tests/vps-base.scm | 27 ++++++++++++++++++++++++--- 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 tests/claude-code.scm create mode 100644 tests/dotfiles.scm create mode 100644 tests/paseo.scm diff --git a/tests/claude-code.scm b/tests/claude-code.scm new file mode 100644 index 0000000..8e3865b --- /dev/null +++ b/tests/claude-code.scm @@ -0,0 +1,17 @@ +;;; Copyright (c) 2026 Jakub Czajka +;;; License: GPL-3.0 or later. +;;; +;;; Claude Code test cases. + +(define-module (tests claude-code) + #:use-module (guix gexp) + #:use-module (conf home claude) + #:export (claude-code-test-cases)) + +(define (claude-code-test-cases marionette) + "Return a gexp with Claude Code test assertion." + #~(begin + (test-assert "claude: binary exists" + (marionette-eval '(file-exists? (string-append #$claude-code + "/bin/claude")) + #$marionette)))) diff --git a/tests/dotfiles.scm b/tests/dotfiles.scm new file mode 100644 index 0000000..6163b39 --- /dev/null +++ b/tests/dotfiles.scm @@ -0,0 +1,15 @@ +;;; Copyright (c) 2026 Jakub Czajka +;;; License: GPL-3.0 or later. +;;; +;;; Home directory test cases. + +(define-module (tests dotfiles) + #:use-module (guix gexp) + #:export (dotfiles-test-cases)) + +(define (dotfiles-test-cases marionette) + "Return a gexp with home directory test assertions." + #~(begin + (test-assert "home: dak user exists" + (marionette-eval '(file-exists? "/home/dak") + #$marionette)))) diff --git a/tests/paseo.scm b/tests/paseo.scm new file mode 100644 index 0000000..5c5e0bb --- /dev/null +++ b/tests/paseo.scm @@ -0,0 +1,17 @@ +;;; Copyright (c) 2026 Jakub Czajka +;;; License: GPL-3.0 or later. +;;; +;;; Paseo test cases. + +(define-module (tests paseo) + #:use-module (guix gexp) + #:use-module (conf home paseo) + #:export (paseo-test-cases)) + +(define (paseo-test-cases marionette) + "Return a gexp with Paseo test assertion." + #~(begin + (test-assert "paseo: binary exists" + (marionette-eval '(file-exists? (string-append #$paseo + "/bin/paseo")) + #$marionette)))) diff --git a/tests/vps-base.scm b/tests/vps-base.scm index 4d5a50a..ca78a83 100644 --- a/tests/vps-base.scm +++ b/tests/vps-base.scm @@ -21,6 +21,9 @@ #:use-module (gnu packages ssh) #:use-module (vps-system) #:use-module (vps-home) + #:use-module (tests claude-code) + #:use-module (tests dotfiles) + #:use-module (tests paseo) #:use-module (guix gexp) #:export (%test-vps %vps-test-os run-vps-test)) @@ -167,12 +170,30 @@ every function in TEST-CASES. Each element is a function (test-end "vps")))) (gexp->derivation "vps-test" test)) +;;; +;;; Home activation — validates that the home derivation from +;;; vps-home.scm is built and activated in the VM. Activation +;;; is verified by checking that dotfiles are installed. +;;; (su(1) is not available in the QEMU marionette REPL, so we +;;; cannot test the activate script's exit code directly.) + +(define (home-activation-test-cases marionette-gexp) + "Return a gexp that verifies home activation via dotfiles." + #~(begin + (test-assert "home: .guile exists" + (marionette-eval '(file-exists? "/home/dak/.guile") + #$marionette-gexp)))) + ;;; ;;; System test record — test cases are added incrementally in ;;; subsequent commits. ;;; (define %test-vps - (system-test (name "vps") - (description "VPS test suite.") - (value (run-vps-test '())))) + (let ((claude claude-code-test-cases) + (paseo paseo-test-cases) + (dots dotfiles-test-cases) + (home home-activation-test-cases)) + (system-test (name "vps") + (description "VPS test suite.") + (value (run-vps-test (list claude paseo dots home)))))) -- 2.47.3