From 3433fb987bbc826a585a0d4d0a80e1f5369769a3 Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Mon, 17 Nov 2025 15:46:53 +0900 Subject: services: Add fossil-service-type. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/services/version-control.scm (fossil-service-type, fossil-configuration): New public variables. * gnu/tests/version-control.scm (%test-fossil): Add system tests. * doc/guix.texi (Version Control Services): Add Fossil documentation. Change-Id: I84e09fe8c11e161ed7c4bdba42b0ae38ef4c2096 Signed-off-by: Ludovic Courtès --- gnu/tests/version-control.scm | 75 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) (limited to 'gnu/tests/version-control.scm') diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm index 8426555a18f..9df3aa9dbd4 100644 --- a/gnu/tests/version-control.scm +++ b/gnu/tests/version-control.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2017-2018, 2020-2022 Ludovic Courtès ;;; Copyright © 2017, 2018 Clément Lassieur ;;; Copyright © 2018 Christopher Baines +;;; Copyright © 2026 Nguyễn Gia Phong ;;; ;;; This file is part of GNU Guix. ;;; @@ -39,7 +40,8 @@ #:export (%test-cgit %test-git-http %test-gitolite - %test-gitile)) + %test-gitile + %test-fossil)) (define README-contents "Hello! This is what goes inside the 'README' file.") @@ -519,3 +521,74 @@ HTTP-PORT." (name "gitile") (description "Connect to a running Gitile server.") (value (run-gitile-test)))) + + +;;; +;;; Fossil server. +;;; + +(define %test-fossil + (system-test + (name "fossil") + (description "Connect to a running Fossil server.") + (value + (gexp->derivation + (string-append name "-test") + (let* ((port 8080) + (base-url (simple-format #f "http://localhost:~a" port)) + (index-url (string-append base-url "/index")) + (os (marionette-operating-system + (simple-operating-system + (service dhcpcd-service-type) + (service fossil-service-type + (fossil-configuration + (repository "/tmp/test.fossil") + (base-url base-url) + (create? #t) + (port port)))))) + (vm (virtual-machine (operating-system os) + (port-forwardings (list (cons port port)))))) + (with-imported-modules '((gnu build marionette) + (guix build utils)) + #~(begin + (use-modules (gnu build marionette) + (guix build utils) + (srfi srfi-64) + (srfi srfi-71) + (web client) + (web response)) + (define marionette (make-marionette (list #$vm))) + (test-runner-current (system-test-runner #$output)) + (test-begin #$name) + + (test-assert "server running" + (wait-for-tcp-port #$port marionette)) + + (test-assert "server log file" + (wait-for-file "/var/log/fossil.log" marionette)) + + (test-assert "cloning" + (begin + (setenv "HOME" #$output) ; fossil writes to $HOME + (invoke/quiet #$(file-append fossil "/bin/fossil") "clone" + "--admin-user" "alice" + "--httptrace" + "--verbose" + #$base-url + (string-append #$output "/test.fossil")))) + + (test-assert "index redirect" + (let ((response text + (http-get #$base-url #:decode-body? #t))) + (and (= 302 (response-code response)) + (string-contains text #$index-url)))) + + (test-equal "index page" + 200 (response-code (http-get #$index-url))) + + (test-equal "tarball download" + 200 (response-code + (http-get (string-append #$base-url + "/tarball/test.tar.gz")))) + + (test-end)))))))) -- cgit v1.3