(define-module (tests claude-code)
#:use-module (guix gexp)
+ #:use-module (tests common)
#: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))))
+ #$(assert-binary-exists "claude: binary exists" claude-code "claude"
+ marionette)))
--- /dev/null
+;;; Copyright (c) 2026 Jakub Czajka <jakub@ekhem.eu.org>
+;;; License: GPL-3.0 or later.
+;;;
+;;; Shared test assertion helpers for VPS test suite.
+
+(define-module (tests common)
+ #:use-module (guix gexp)
+ #:export (assert-service-running assert-binary-exists))
+
+(define (assert-service-running label service-name marionette-gexp)
+ "Return a gexp that asserts the Shepherd service SERVICE-NAME is
+running."
+ #~(test-assert #$label
+ (marionette-eval '(begin
+ (use-modules (gnu services herd))
+ (start-service '#$service-name))
+ #$marionette-gexp)))
+
+(define (assert-binary-exists label pkg binary-name marionette-gexp)
+ "Return a gexp that asserts BINARY-NAME exists inside PKG."
+ #~(test-assert #$label
+ (marionette-eval '(file-exists? (string-append #$pkg "/bin/"
+ #$binary-name))
+ #$marionette-gexp)))
(define-module (tests dnscrypt)
#:use-module (guix gexp)
+ #:use-module (tests common)
#:export (dnscrypt-test-cases))
(define (dnscrypt-test-cases marionette)
"Return a gexp with dnscrypt-proxy test assertions."
#~(begin
- (test-assert "dnscrypt: service running"
- (marionette-eval '(begin
- (use-modules (gnu services herd))
- (start-service 'dnscrypt-proxy))
- #$marionette))
+ #$(assert-service-running "dnscrypt: service running"
+ 'dnscrypt-proxy marionette)
(test-assert "dnscrypt: port 53 TCP"
(wait-for-tcp-port 53
(define-module (tests networking)
#:use-module (guix gexp)
+ #:use-module (tests common)
#:export (networking-test-cases))
(define (networking-test-cases marionette)
"Return a gexp with static networking test assertions."
#~(begin
- (test-assert "net: service running"
- (marionette-eval '(begin
- (use-modules (gnu services herd))
- (start-service 'networking))
- #$marionette))
+ #$(assert-service-running "net: service running"
+ 'networking marionette)
(test-assert "net: eth0 is up"
(marionette-eval '(file-exists?
(define-module (tests ntp)
#:use-module (guix gexp)
+ #:use-module (tests common)
#:export (ntp-test-cases))
(define (ntp-test-cases marionette)
"Return a gexp with NTP daemon test assertion."
#~(begin
- (test-assert "ntp: ntpd running"
- (marionette-eval '(begin
- (use-modules (gnu services herd))
- (start-service 'ntpd))
- #$marionette))))
+ #$(assert-service-running "ntp: ntpd running"
+ 'ntpd marionette)))
(define-module (tests paseo)
#:use-module (guix gexp)
+ #:use-module (tests common)
#: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))))
+ #$(assert-binary-exists "paseo: binary exists" paseo "paseo" marionette)))
(define-module (tests sshd)
#:use-module (guix gexp)
+ #:use-module (tests common)
#:export (sshd-test-cases))
(define (sshd-test-cases marionette connect-gexp)
"Return a gexp with SSH daemon test assertions."
#~(begin
- (test-assert "sshd: service running"
- (marionette-eval '(begin
- (use-modules (gnu services herd))
- (start-service 'ssh-daemon))
- #$marionette))
+ #$(assert-service-running "sshd: service running"
+ 'ssh-daemon marionette)
(test-assert "sshd: port 72 TCP"
(wait-for-tcp-port 72
"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 test assertions."
- (define os
- %vps-test-os)
(define vm
(virtual-machine (operating-system
- os)
+ %vps-test-os)
(port-forwardings '((2222 . 72)))))
(define test
;;;
(define %test-vps
- (let ((ssh (lambda (m)
- (sshd-test-cases m
- (make-ssh-connect m))))
- (net networking-test-cases)
- (ntp ntp-test-cases)
- (dns dnscrypt-test-cases)
- (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 ssh
- net
- ntp
- dns
- claude
- paseo
- dots
- home))))))
+ (system-test (name "vps")
+ (description "VPS test suite.")
+ (value (run-vps-test (list (lambda (m)
+ (sshd-test-cases m
+ (make-ssh-connect
+ m)))
+ networking-test-cases
+ ntp-test-cases
+ dnscrypt-test-cases
+ claude-code-test-cases
+ paseo-test-cases
+ dotfiles-test-cases
+ home-activation-test-cases)))))