;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017, 2021 Ludovic Courtès ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Christopher Baines ;;; Copyright © 2017, 2018 Clément Lassieur ;;; Copyright © 2018 Pierre-Antoine Rouby ;;; Copyright © 2018 Marius Bakke ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu tests ci) #:use-module (gnu tests) #:use-module (gnu system) #:use-module (gnu system file-systems) #:use-module (gnu system shadow) #:use-module (gnu system vm) #:use-module (gnu services) #:use-module (gnu services ci) #:use-module (gnu services web) #:use-module (gnu services networking) #:use-module (guix gexp) #:use-module (guix store) #:export (%test-laminar)) (define %laminar-os ;; Operating system under test. (simple-operating-system (service dhcp-client-service-type) (service laminar-service-type))) (define* (run-laminar-test #:optional (http-port 8080)) "Run tests in %LAMINAR-OS, which has laminar running and listening on HTTP-PORT." (define os (marionette-operating-system %laminar-os #:imported-modules '((gnu services herd) (guix combinators)))) (define vm (virtual-machine (operating-system os) (port-forwardings `((,http-port . 8080))))) (define test (with-imported-modules '((gnu build marionette)) #~(begin (use-modules (srfi srfi-11) (srfi srfi-64) (ice-9 match) (gnu build marionette) (web uri) (web client) (web response)) (define marionette ;; Forward the guest's HTTP-PORT, where laminar is listening, to ;; port 8080 in the host. (make-marionette (list #$vm))) (test-runner-current (system-test-runner #$output)) (test-begin "laminar") (test-assert "service running" (marionette-eval '(begin (use-modules (gnu services herd)) (start-service 'laminar)) marionette)) (define* (retry-on-error f #:key times delay) (let loop ((attempt 1)) (match (catch #t (lambda () (cons #t (f))) (lambda args (cons #f args))) ((#t . return-value) return-value) ((#f . error-args) (if (>= attempt times) error-args (begin (sleep delay) (loop (+ 1 attempt)))))))) (test-equal "http-get" 200 (retry-on-error (lambda () (let-values (((response text) (http-get #$(format #f "http://localhost:~A/" http-port) ;; TODO: Why does decoding fail? #:decode-body? #f))) (response-code response))) #:times 10 #:delay 5)) (test-end)))) (gexp->derivation "laminar-test" test)) (define %test-laminar (system-test (name "laminar") (description "Connect to a running Laminar server.") (value (run-laminar-test)))) 'guile' executable ignores GUILE_LOAD_PATH during startup....When starting the 'guix' command, this ensures Guile modules are immediately found instead of being search for in other directories. This reduces the number of 'stat' calls during startup when GUILE_LOAD_PATH is set to (almost) that of "env -i $(type -P guix)". * gnu/packages/aux-files/guile-launcher.c (load_path) (load_compiled_path): New variables. (inner_main): Restore GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH and set %load-path and %load-compiled-path accordingly. (main): Save GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH and unset them. Ludovic Courtès 2020-10-05self: Use a 'guile' that doesn't complain about locales....Since commit ba48895899a117d6ace2209c3f54411a4a989133, selected UTF-8 locales are bundled. However, because 'guix-command' is itself a Guile script, users would still see Guile's warning, particularly on foreign distros: $ LC_ALL=sdf guix foo guile: warning: failed to install locale hint: Consider installing the `glibc-utf8-locales' [...] User commands would print that warning, but more importantly, each invocation of 'guix substitute' would print it, even though 'guix-daemon.service' explicitly chooses "en_US.utf8", which is in 'glibc-utf8-locales'. This leads to confusion since users would keep seeing this message unless/until they realize they also need to install 'glibc-utf8-locales' in root's profile. This patch gets rid of "guile: warning: ..." for a guix-pulled 'guix' command. * guix/self.scm (specification->package): Add "gcc-toolchain". (quiet-guile): New procedure. (guix-command): Use it. * gnu/packages/aux-files/guile-launcher.c: New file. * Makefile.am (AUX_FILES): Add it. Ludovic Courtès