Hi Guix,
Guix System has nice system tests, as described in [1] but they don't
easily allow to run a single test.
The manual says to run `make check-system TESTS="basic mcron"` in the
guix source tree.
That, however, (apparently) requires to be bootstrapped, configured and
all Scheme files to be fully built.
Is there something as simple as:
$ guix build -f gnu/tests/rsync.scm
guix build: error: #<unspecified>: not something we can build
---
I hacked together a solution that works but is far from nice.
It is based off of build-aux/run-system-tests.scm and I tried to strip
it down to the core.
$ cat run-test.scm
(use-modules (gnu tests rsync)
(gnu tests)
(guix store)
(guix status)
(guix monads)
(guix derivations)
(guix ui)
(srfi srfi-1)
(srfi srfi-34))
(define (built-derivations* drv)
(lambda (store)
(guard (c ((store-protocol-error? c)
(values #f store)))
(values (build-derivations store drv) store))))
(system-test-value %test-rsync)
(with-store store
(with-status-verbosity 2
(run-with-store store
(mlet* %store-monad ((drv (mapm %store-monad system-test-value
(list %test-rsync)))
(out -> (map derivation->output-path drv)))
(mbegin %store-monad
(show-what-to-build* drv)
(set-build-options* #:keep-going? #t #:keep-failed? #t
#:print-build-trace #t
#:print-extended-build-trace? #t
#:fallback? #t)
(built-derivations* drv)
(display out))))))
$ guile -s run-test.scm
(/gnu/store/scifaigbvcj20lplj3mvqj3ndr9w0nlv-rsync-test)Backtrace:
8 (apply-smob/1 #<catch-closure 7353e0>)
In ice-9/boot-9.scm:
705:2 7 (call-with-prompt _ _ #<procedure default-prompt-handle…>)
In ice-9/eval.scm:
619:8 6 (_ #(#(#<directory (guile-user) 7cd140>)))
In ice-9/boot-9.scm:
2312:4 5 (save-module-excursion _)
3831:12 4 (_)
In /home/zoid/guix/gnu/tests/run-test.scm:
19:4 3 (_)
In guix/status.scm:
810:4 2 (call-with-status-report _ _)
In guix/store.scm:
1737:24 1 (run-with-store _ _ #:guile-for-build _ #:system _ # _)
In unknown file:
0 (_ #<store-connection 256.99 3b8dd20>)
ERROR: Wrong type to apply: #<unspecified>
It shows the derivation output path before the backtrace and thus I can
inspect the log.
Can I do this in a nicer way?
It would be very helpful for out-of-tree system tests.
Thanks
- Daniel
[1] https://guix.gnu.org/blog/2016/guixsd-system-tests/