derivations: Add test in keep-going mode.

* tests/derivations.scm ("derivation fails but keep going"): New test.
This commit is contained in:
Ludovic Courtès 2016-01-19 21:38:44 +01:00
parent 16966d5b4d
commit 0e510971c3
1 changed files with 27 additions and 0 deletions

View File

@ -151,6 +151,33 @@
;; the contents. ;; the contents.
(valid-path? %store (derivation->output-path drv))))) (valid-path? %store (derivation->output-path drv)))))
(test-assert "derivation fails but keep going"
;; In keep-going mode, 'build-derivations' should fail because of D1, but it
;; must return only after D2 has succeeded.
(with-store store
(let* ((d1 (derivation %store "fails"
%bash `("-c" "false")
#:inputs `((,%bash))))
(d2 (build-expression->derivation %store "sleep-then-succeed"
`(begin
,(random-text)
;; XXX: Hopefully that's long
;; enough that D1 has already
;; failed.
(sleep 2)
(mkdir %output)))))
(set-build-options %store
#:use-substitutes? #f
#:keep-going? #t)
(guard (c ((nix-protocol-error? c)
(and (= 100 (nix-protocol-error-status c))
(string-contains (nix-protocol-error-message c)
(derivation-file-name d1))
(not (valid-path? %store (derivation->output-path d1)))
(valid-path? %store (derivation->output-path d2)))))
(build-derivations %store (list d1 d2))
#f))))
(test-assert "identical files are deduplicated" (test-assert "identical files are deduplicated"
(let* ((build1 (add-text-to-store %store "one.sh" (let* ((build1 (add-text-to-store %store "one.sh"
"echo hello, world > \"$out\"\n" "echo hello, world > \"$out\"\n"