diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-12-08 22:58:32 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-12-08 23:58:12 +0100 |
commit | 2fba87ac7c3e6fc6ca1a6e94131303c37425b2ba (patch) | |
tree | 443722324596846346b6a3f11e4eab30e73bed94 /tests | |
parent | b23b4d394a39b60188ed74ecdf1027bc7dd5b9b3 (diff) | |
download | guix-2fba87ac7c3e6fc6ca1a6e94131303c37425b2ba.tar guix-2fba87ac7c3e6fc6ca1a6e94131303c37425b2ba.tar.gz |
store: Allow clients to request multiple builds.
* guix/store.scm (set-build-options): Add #:rounds parameter and honor it.
* tests/store.scm ("build multiple times"): New test.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/store.scm | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/store.scm b/tests/store.scm index 72abf2c694..394c06bc0f 100644 --- a/tests/store.scm +++ b/tests/store.scm @@ -769,6 +769,8 @@ (let ((out (assoc-ref %outputs "out"))) (call-with-output-file out (lambda (port) + ;; Rely on the fact that tests do not use the + ;; chroot, and thus ENTROPY is readable. (display (call-with-input-file ,entropy get-string-all) port))) @@ -791,6 +793,44 @@ (build-mode check)) #f)))))))) +(test-assert "build multiple times" + (with-store store + ;; Ask to build twice. + (set-build-options store #:rounds 2 #:use-substitutes? #f) + + (call-with-temporary-output-file + (lambda (entropy entropy-port) + (write (random-text) entropy-port) + (force-output entropy-port) + (let* ((drv (build-expression->derivation + store "non-deterministic" + `(begin + (use-modules (rnrs io ports)) + (let ((out (assoc-ref %outputs "out"))) + (call-with-output-file out + (lambda (port) + ;; Rely on the fact that tests do not use the + ;; chroot, and thus ENTROPY is accessible. + (display (call-with-input-file ,entropy + get-string-all) + port) + (call-with-output-file ,entropy + (lambda (port) + (write 'foobar port))))) + #t)) + #:guile-for-build + (package-derivation store %bootstrap-guile (%current-system)))) + (file (derivation->output-path drv))) + (guard (c ((nix-protocol-error? c) + (pk 'multiple-build c) + (and (not (zero? (nix-protocol-error-status c))) + (string-contains (nix-protocol-error-message c) + "deterministic")))) + ;; This one will produce a different result on the second run. + (current-build-output-port (current-error-port)) + (build-things store (list (derivation-file-name drv))) + #f)))))) + (test-equal "store-lower" "Lowered." (let* ((add (store-lower text-file)) |