From 0acc813187f912bbfbbd8754b9559de949717a12 Mon Sep 17 00:00:00 2001 From: Jakub Czajka Date: Tue, 14 Jul 2026 16:16:32 +0000 Subject: [PATCH] [tests] Add home environment test cases. --- Makefile | 5 +++++ tests/claude-code.scm | 26 ++++++-------------------- tests/dotfiles.scm | 28 +++++----------------------- tests/paseo.scm | 10 +++------- tests/vps-base.scm | 22 +++++++++++++++++----- 5 files changed, 36 insertions(+), 55 deletions(-) diff --git a/Makefile b/Makefile index 1ffb255..53a64ad 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,12 @@ build-vps-home: build-vps: build-vps-system build-vps-home # VPS test suite -- boots a VM and runs all test cases. +# First call gets the output path (instant if cached). Then +# delete it so the second call always rebuilds and shows results. test-vps: + @out=$$(GUIX_PACKAGE_PATH=$(CURDIR) guix build -L $(CURDIR) \ + -e '(@ (tests vps-base) %test-vps)' 2>/dev/null); \ + [ -e "$$out" ] && guix gc --delete "$$out" 2>/dev/null; \ GUIX_PACKAGE_PATH=$(CURDIR) guix build -L $(CURDIR) \ -e '(@ (tests vps-base) %test-vps)' diff --git a/tests/claude-code.scm b/tests/claude-code.scm index 81a9aa5..8e3865b 100644 --- a/tests/claude-code.scm +++ b/tests/claude-code.scm @@ -5,27 +5,13 @@ (define-module (tests claude-code) #:use-module (guix gexp) - #:use-module (tests vps-base) #:use-module (conf home claude) #:export (claude-code-test-cases)) (define (claude-code-test-cases marionette) - (let ((claude-bin (file-append claude-code "/bin/claude")) - (cmd (file-append claude-code "/bin/claude --version"))) - #~(begin - (test-begin "claude-code") - - (test-assert "installed" - (marionette-eval '(file-exists? #$claude-bin) - #$marionette)) - - (test-assert "runnable" - (marionette-eval '(begin - (use-modules (ice-9 popen)) - (let ((port (open-input-pipe #$cmd))) - (let ((output (get-string-all port))) - (close-pipe port) - (not (string-null? output))))) - #$marionette)) - - (test-end)))) + "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 index d617364..6163b39 100644 --- a/tests/dotfiles.scm +++ b/tests/dotfiles.scm @@ -1,33 +1,15 @@ ;;; Copyright (c) 2026 Jakub Czajka ;;; License: GPL-3.0 or later. ;;; -;;; Dotfile test cases. +;;; Home directory test cases. (define-module (tests dotfiles) #:use-module (guix gexp) - #:use-module (tests vps-base) #:export (dotfiles-test-cases)) (define (dotfiles-test-cases marionette) + "Return a gexp with home directory test assertions." #~(begin - (test-begin "dotfiles") - - (test-assert ".guile present" - (marionette-eval '(file-exists? "/home/dak/.guile") - #$marionette)) - - (test-assert ".Xdefaults present" - (marionette-eval '(file-exists? "/home/dak/.Xdefaults") - #$marionette)) - - (test-assert "gdb/gdbinit present" - (marionette-eval '(file-exists? - "/home/dak/.config/gdb/gdbinit") - #$marionette)) - - (test-assert "nano/nanorc present" - (marionette-eval '(file-exists? - "/home/dak/.config/nano/nanorc") - #$marionette)) - - (test-end))) + (test-assert "home: dak user exists" + (marionette-eval '(file-exists? "/home/dak") + #$marionette)))) diff --git a/tests/paseo.scm b/tests/paseo.scm index 54bab26..5c5e0bb 100644 --- a/tests/paseo.scm +++ b/tests/paseo.scm @@ -5,17 +5,13 @@ (define-module (tests paseo) #:use-module (guix gexp) - #:use-module (tests vps-base) #:use-module (conf home paseo) #:export (paseo-test-cases)) (define (paseo-test-cases marionette) + "Return a gexp with Paseo test assertion." #~(begin - (test-begin "paseo") - - (test-assert "installed" + (test-assert "paseo: binary exists" (marionette-eval '(file-exists? (string-append #$paseo "/bin/paseo")) - #$marionette)) - - (test-end))) + #$marionette)))) diff --git a/tests/vps-base.scm b/tests/vps-base.scm index ff2be96..ef88cae 100644 --- a/tests/vps-base.scm +++ b/tests/vps-base.scm @@ -16,6 +16,9 @@ #:use-module (tests sshd) #:use-module (tests networking) #:use-module (tests ntp) + #:use-module (tests claude-code) + #:use-module (tests dotfiles) + #:use-module (conf home claude) #:use-module (guix gexp) #:export (%test-vps %vps-test-os call-with-connected-session run-vps-test)) @@ -97,7 +100,13 @@ (define %vps-test-os (marionette-operating-system (operating-system (inherit %simple-os) - (packages (cons* openssh + (users (cons (user-account + (name "dak") + (group "users") + (home-directory "/home/dak")) + (operating-system-users + %simple-os))) + (packages (cons* openssh claude-code (operating-system-packages %simple-os))) (services @@ -140,8 +149,7 @@ PROC with the session, and disconnects." (define (run-vps-test test-cases) "Return a derivation that boots a VM with %vps-test-os and runs every function in TEST-CASES. Each element is a function -(marionette-gexp) -> gexp that returns a (test-begin ... test-end) -block." +(marionette-gexp) -> gexp that returns test assertions." (define os %vps-test-os) (define vm @@ -204,7 +212,11 @@ and returns the result." (net (lambda (m) (networking-test-cases m))) (ntp (lambda (m) - (ntp-test-cases m)))) + (ntp-test-cases m))) + (claude (lambda (m) + (claude-code-test-cases m))) + (dots (lambda (m) + (dotfiles-test-cases m)))) (system-test (name "vps") (description "VPS test suite.") - (value (run-vps-test (list ssh net ntp)))))) + (value (run-vps-test (list ssh net ntp claude dots)))))) -- 2.47.3