]> git.ekhem.eu.org Git - guix.git/commitdiff
[tests] Add home environment test cases.
authorJakub Czajka <jakub@ekhem.eu.org>
Tue, 14 Jul 2026 16:16:32 +0000 (16:16 +0000)
committerJakub Czajka <jakub@ekhem.eu.org>
Wed, 15 Jul 2026 10:45:16 +0000 (10:45 +0000)
Makefile
tests/claude-code.scm
tests/dotfiles.scm
tests/paseo.scm
tests/vps-base.scm

index 1ffb25595b3fbd033735ac3920f1f1c6a2179e98..53a64ada407cacefc5d0929bb2a4ab47eea83e7c 100644 (file)
--- 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)'
 
index 81a9aa52b72e78ae4132f159744f0037eb25e550..8e3865bdd102f619981079cb82884e9f48e121c0 100644 (file)
@@ -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))))
index d617364ad54eb5353b4bb25470f1a5045dd0e2a4..6163b39c77407ab07c7620d02a1ee388faae8450 100644 (file)
@@ -1,33 +1,15 @@
 ;;; Copyright (c) 2026 Jakub Czajka <jakub@ekhem.eu.org>
 ;;; 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))))
index 54bab26cb9537291427a98861c326c358637a47a..5c5e0bb2c4ca13ff0885bafc6af231e4775e296a 100644 (file)
@@ -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))))
index ff2be964e8744b5684b2f245bbb7128ea972360f..ef88cae10317c31d7945f91c18be20328444f265 100644 (file)
@@ -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))
 
 (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))))))