aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-10-19 17:58:00 +0200
committerLudovic Courtès <ludo@gnu.org>2018-10-19 18:28:57 +0200
commit19c924af4f3726688ca155a905ebf1cb9acdfca2 (patch)
treeb3118b3977c93b61e9c65a0387daadd223908f1b /tests
parentfbdb7b9526272e1983bec1908d0704428af7c1f2 (diff)
downloadguix-19c924af4f3726688ca155a905ebf1cb9acdfca2.tar.gz
guix-19c924af4f3726688ca155a905ebf1cb9acdfca2.zip
tests: Run 'guix pack' tests using the external store.
Fixes <https://bugs.gnu.org/32184>. * guix/tests.scm (call-with-external-store): New procedure. (with-external-store): New macro. * tests/pack.scm (%store): Remove. (test-assertm): Add 'store' parameter. ("self-contained-tarball"): Wrap in 'with-external-store'. * tests/guix-pack.sh: Connect to the external store, if possible, by setting NIX_STORE_DIR and GUIX_DAEMON_SOCKET. Remove most uses of '--bootstrap'.
Diffstat (limited to 'tests')
-rw-r--r--tests/guix-pack.sh30
-rw-r--r--tests/pack.scm75
2 files changed, 58 insertions, 47 deletions
diff --git a/tests/guix-pack.sh b/tests/guix-pack.sh
index bf367fa429..cd721a60e9 100644
--- a/tests/guix-pack.sh
+++ b/tests/guix-pack.sh
@@ -1,5 +1,6 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
+# Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
#
# This file is part of GNU Guix.
#
@@ -28,26 +29,33 @@ fi
guix pack --version
-# FIXME: Starting from commit 66e9944e078cbb9e0d618377dd6df6e639640efa,
-# '--bootstrap' is mostly ineffective since 'guix pack' produces derivations
-# that refer to guile-sqlite3 and libgcrypt. For now we just skip the test.
-exit 77
+# Starting from commit 66e9944e078cbb9e0d618377dd6df6e639640efa, 'guix pack'
+# produces derivations that refer to guile-sqlite3 and libgcrypt. To make
+# that relatively inexpensive, run the test in the user's global store if
+# possible, on the grounds that binaries may already be there or can be built
+# or downloaded inexpensively.
-# Use --no-substitutes because we need to verify we can do this ourselves.
-GUIX_BUILD_OPTIONS="--no-substitutes"
-export GUIX_BUILD_OPTIONS
+NIX_STORE_DIR="`guile -c '(use-modules (guix config))(display %storedir)'`"
+localstatedir="`guile -c '(use-modules (guix config))(display %localstatedir)'`"
+GUIX_DAEMON_SOCKET="$localstatedir/guix/daemon-socket/socket"
+export NIX_STORE_DIR GUIX_DAEMON_SOCKET
+
+if ! guile -c '(use-modules (guix)) (exit (false-if-exception (open-connection)))'
+then
+ exit 77
+fi
# Build a tarball with no compression.
-guix pack --compression=none --bootstrap guile-bootstrap
+guix pack --compression=none guile-bootstrap
# Build a tarball (with compression). Check that '-e' works as well.
-out1="`guix pack --bootstrap guile-bootstrap`"
-out2="`guix pack --bootstrap -e '(@ (gnu packages bootstrap) %bootstrap-guile)'`"
+out1="`guix pack guile-bootstrap`"
+out2="`guix pack -e '(@ (gnu packages bootstrap) %bootstrap-guile)'`"
test -n "$out1"
test "$out1" = "$out2"
# Build a tarball with a symlink.
-the_pack="`guix pack --bootstrap -S /opt/gnu/bin=bin guile-bootstrap`"
+the_pack="`guix pack -S /opt/gnu/bin=bin guile-bootstrap`"
# Try to extract it. Note: we cannot test whether /opt/gnu/bin/guile itself
# exists because /opt/gnu/bin may be an absolute symlink to a store item that
diff --git a/tests/pack.scm b/tests/pack.scm
index c57c6848ff..7f867894c2 100644
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@ -29,15 +29,12 @@
#:use-module (gnu packages bootstrap)
#:use-module (srfi srfi-64))
-(define %store
- (open-connection-for-tests))
-
;; Globally disable grafts because they can trigger early builds.
(%graft? #f)
-(define-syntax-rule (test-assertm name exp)
+(define-syntax-rule (test-assertm name store exp)
(test-assert name
- (run-with-store %store exp
+ (run-with-store store exp
#:guile-for-build (%guile-for-build))))
(define %gzip-compressor
@@ -51,37 +48,43 @@
(test-begin "pack")
-;; FIXME: The following test would rebuild the world (and likely fail) as a
-;; consequence of commit c45477d2a1a651485feede20fe0f3d15aec48b39 (and related
-;; changes) that made guile-sqlite3 a dependency of the derivation.
-;; See <https://bugs.gnu.org/32184>.
-(test-skip 1)
+;; The following test needs guile-sqlite3, libgcrypt, etc. as a consequence of
+;; commit c45477d2a1a651485feede20fe0f3d15aec48b39 and related changes. Thus,
+;; run it on the user's store, if it's available, on the grounds that these
+;; dependencies may be already there, or we can get substitutes or build them
+;; quite inexpensively; see <https://bugs.gnu.org/32184>.
-(test-assertm "self-contained-tarball"
- (mlet* %store-monad
- ((profile (profile-derivation (packages->manifest
- (list %bootstrap-guile))
- #:hooks '()
- #:locales? #f))
- (tarball (self-contained-tarball "pack" profile
- #:symlinks '(("/bin/Guile"
- -> "bin/guile"))
- #:compressor %gzip-compressor
- #:archiver %tar-bootstrap))
- (check (gexp->derivation
- "check-tarball"
- #~(let ((bin (string-append "." #$profile "/bin")))
- (setenv "PATH"
- (string-append #$%tar-bootstrap "/bin"))
- (system* "tar" "xvf" #$tarball)
- (mkdir #$output)
- (exit
- (and (file-exists? (string-append bin "/guile"))
- (string=? (string-append #$%bootstrap-guile "/bin")
- (readlink bin))
- (string=? (string-append ".." #$profile
- "/bin/guile")
- (readlink "bin/Guile"))))))))
- (built-derivations (list check))))
+(with-external-store store
+ (unless store (tests-skip 1))
+ (test-assertm "self-contained-tarball" store
+ (mlet* %store-monad
+ ((profile (profile-derivation (packages->manifest
+ (list %bootstrap-guile))
+ #:hooks '()
+ #:locales? #f))
+ (tarball (self-contained-tarball "pack" profile
+ #:symlinks '(("/bin/Guile"
+ -> "bin/guile"))
+ #:compressor %gzip-compressor
+ #:archiver %tar-bootstrap))
+ (check (gexp->derivation
+ "check-tarball"
+ #~(let ((bin (string-append "." #$profile "/bin")))
+ (setenv "PATH"
+ (string-append #$%tar-bootstrap "/bin"))
+ (system* "tar" "xvf" #$tarball)
+ (mkdir #$output)
+ (exit
+ (and (file-exists? (string-append bin "/guile"))
+ (string=? (string-append #$%bootstrap-guile "/bin")
+ (readlink bin))
+ (string=? (string-append ".." #$profile
+ "/bin/guile")
+ (readlink "bin/Guile"))))))))
+ (built-derivations (list check)))))
(test-end)
+
+;; Local Variables:
+;; eval: (put 'test-assertm 'scheme-indent-function 2)
+;; End: