summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-01-19 21:38:44 +0100
committerLudovic Courtès <ludo@gnu.org>2016-01-19 21:59:58 +0100
commit0e510971c3f6e5203803f14c40b89fe37d3d3f53 (patch)
tree6b76f8f37c393020b57489d6387d3accda59cd42
parent16966d5b4d96f2f5dc02b9ae295ef34c8a1e93ab (diff)
downloadguix-0e510971c3f6e5203803f14c40b89fe37d3d3f53.tar.gz
derivations: Add test in keep-going mode.
* tests/derivations.scm ("derivation fails but keep going"): New test.
-rw-r--r--tests/derivations.scm27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/derivations.scm b/tests/derivations.scm
index 64cc8a94c9..db96e26ab1 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -151,6 +151,33 @@
          ;; the contents.
          (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"
   (let* ((build1  (add-text-to-store %store "one.sh"
                                      "echo hello, world > \"$out\"\n"