summaryrefslogtreecommitdiff
path: root/build-aux
diff options
context:
space:
mode:
Diffstat (limited to 'build-aux')
-rw-r--r--build-aux/hydra/evaluate.scm15
-rw-r--r--build-aux/hydra/gnu-system.scm37
-rw-r--r--build-aux/run-system-tests.scm24
-rw-r--r--build-aux/test-env.in12
4 files changed, 75 insertions, 13 deletions
diff --git a/build-aux/hydra/evaluate.scm b/build-aux/hydra/evaluate.scm
index afc7730ff2..ab10253f31 100644
--- a/build-aux/hydra/evaluate.scm
+++ b/build-aux/hydra/evaluate.scm
@@ -49,6 +49,17 @@ values."
(/ (time-nanosecond time) 1e9)))
(apply values results))))
+(define (assert-valid-job job thing)
+ "Raise an error if THING is not an alist with a valid 'derivation' entry.
+Otherwise return THING."
+ (unless (and (list? thing)
+ (and=> (assoc-ref thing 'derivation)
+ (lambda (value)
+ (and (string? value)
+ (string-suffix? ".drv" value)))))
+ (error "job did not produce a valid alist" job thing))
+ thing)
+
;; Without further ado...
(match (command-line)
@@ -83,7 +94,9 @@ values."
(map (lambda (job thunk)
(format (current-error-port) "evaluating '~a'... " job)
(force-output (current-error-port))
- (cons job (call-with-time-display thunk)))
+ (cons job
+ (assert-valid-job job
+ (call-with-time-display thunk))))
names thunks)))
port))))
((command _ ...)
diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm
index d15be1bad2..a84cdebbad 100644
--- a/build-aux/hydra/gnu-system.scm
+++ b/build-aux/hydra/gnu-system.scm
@@ -59,6 +59,7 @@
(gnu system)
(gnu system vm)
(gnu system install)
+ (gnu tests)
(srfi srfi-1)
(srfi srfi-26)
(ice-9 match))
@@ -129,6 +130,9 @@ SYSTEM."
(file (string-append dir "/demo-os.scm")))
(read-operating-system file)))
+(define %guixsd-supported-systems
+ '("x86_64-linux" "i686-linux"))
+
(define (qemu-jobs store system)
"Return a list of jobs that build QEMU images for SYSTEM."
(define (->alist drv)
@@ -150,7 +154,7 @@ system.")
(define MiB
(expt 2 20))
- (if (member system '("x86_64-linux" "i686-linux"))
+ (if (member system %guixsd-supported-systems)
(list (->job 'qemu-image
(run-with-store store
(mbegin %store-monad
@@ -167,6 +171,36 @@ system.")
(* 1024 MiB))))))
'()))
+(define (system-test-jobs store system)
+ "Return a list of jobs for the system tests."
+ (define (test->thunk test)
+ (lambda ()
+ (define drv
+ (run-with-store store
+ (mbegin %store-monad
+ (set-current-system system)
+ (set-grafting #f)
+ (set-guile-for-build (default-guile))
+ (system-test-value test))))
+
+ `((derivation . ,(derivation-file-name drv))
+ (description . ,(format #f "GuixSD '~a' system test"
+ (system-test-name test)))
+ (long-description . ,(system-test-description test))
+ (license . ,gpl3+)
+ (home-page . ,%guix-home-page-url)
+ (maintainers . ("bug-guix@gnu.org")))))
+
+ (define (->job test)
+ (let ((name (string->symbol
+ (string-append "test." (system-test-name test)
+ "." system))))
+ (cons name (test->thunk test))))
+
+ (if (member system %guixsd-supported-systems)
+ (map ->job (all-system-tests))
+ '()))
+
(define (tarball-jobs store system)
"Return Hydra jobs to build the self-contained Guix binary tarball."
(define (->alist drv)
@@ -274,6 +308,7 @@ valid."
system))))
(append (filter-map job all)
(qemu-jobs store system)
+ (system-test-jobs store system)
(tarball-jobs store system)
(cross-jobs system))))
((core)
diff --git a/build-aux/run-system-tests.scm b/build-aux/run-system-tests.scm
index e98de9cb7e..3f3a70e7b4 100644
--- a/build-aux/run-system-tests.scm
+++ b/build-aux/run-system-tests.scm
@@ -17,13 +17,14 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (run-system-tests)
- #:use-module (gnu tests base)
+ #:use-module (gnu tests)
#:use-module (guix store)
#:use-module (guix monads)
#:use-module (guix derivations)
#:use-module (guix ui)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-34)
+ #:use-module (ice-9 match)
#:export (run-system-tests))
(define (built-derivations* drv)
@@ -44,13 +45,26 @@
lst)
(lift1 reverse %store-monad))))
-(define %system-tests
- (list %test-basic-os))
-
(define (run-system-tests . args)
+ (define tests
+ ;; Honor the 'TESTS' environment variable so that one can select a subset
+ ;; of tests to run in the usual way:
+ ;;
+ ;; make check-system TESTS=installed-os
+ (match (getenv "TESTS")
+ (#f
+ (all-system-tests))
+ ((= string-tokenize (tests ...))
+ (filter (lambda (test)
+ (member (system-test-name test) tests))
+ (all-system-tests)))))
+
+ (format (current-error-port) "Running ~a system tests...~%"
+ (length tests))
+
(with-store store
(run-with-store store
- (mlet* %store-monad ((drv (sequence %store-monad %system-tests))
+ (mlet* %store-monad ((drv (mapm %store-monad system-test-value tests))
(out -> (map derivation->output-path drv)))
(mbegin %store-monad
(show-what-to-build* drv)
diff --git a/build-aux/test-env.in b/build-aux/test-env.in
index c153763a56..1657556b19 100644
--- a/build-aux/test-env.in
+++ b/build-aux/test-env.in
@@ -69,16 +69,16 @@ then
fi
# The configuration directory, for import/export signing keys.
- NIX_CONF_DIR="@GUIX_TEST_ROOT@/etc"
- if [ ! -d "$NIX_CONF_DIR" ]
+ GUIX_CONFIGURATION_DIRECTORY="@GUIX_TEST_ROOT@/etc"
+ if [ ! -d "$GUIX_CONFIGURATION_DIRECTORY" ]
then
# Copy the keys so that the secret key has the right permissions (the
# daemon errors out when this is not the case.)
- mkdir -p "$NIX_CONF_DIR"
+ mkdir -p "$GUIX_CONFIGURATION_DIRECTORY"
cp "@abs_top_srcdir@/tests/signing-key.sec" \
"@abs_top_srcdir@/tests/signing-key.pub" \
- "$NIX_CONF_DIR"
- chmod 400 "$NIX_CONF_DIR/signing-key.sec"
+ "$GUIX_CONFIGURATION_DIRECTORY"
+ chmod 400 "$GUIX_CONFIGURATION_DIRECTORY/signing-key.sec"
fi
# A place to store data of the substituter.
@@ -100,7 +100,7 @@ then
NIX_LOCALSTATE_DIR NIX_LOG_DIR NIX_STATE_DIR NIX_DB_DIR \
NIX_ROOT_FINDER GUIX_BINARY_SUBSTITUTE_URL \
GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES \
- NIX_CONF_DIR XDG_CACHE_HOME NIXPKGS
+ GUIX_CONFIGURATION_DIRECTORY XDG_CACHE_HOME NIXPKGS
# Launch the daemon without chroot support because is may be
# unavailable, for instance if we're not running as root.