summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-06-05 00:04:07 +0200
committerLudovic Courtès <ludo@gnu.org>2012-06-05 00:04:07 +0200
commitfb3eec8301e3f41f14a51a114cff88dc0e24cfc2 (patch)
tree815a137377bf51862636ca87b867d6f76f2ca62b
parentb7a7f59847154f880b69061b9f59e7acf503c121 (diff)
downloadguix-fb3eec8301e3f41f14a51a114cff88dc0e24cfc2.tar.gz
Test the `build-derivations' operation.
* guix/derivations.scm (derivation): Return DRV as a second value.
* tests/derivations.scm ("build derivation with 1 source"): New test.
-rw-r--r--guix/derivations.scm13
-rw-r--r--tests/derivations.scm24
2 files changed, 29 insertions, 8 deletions
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 5ad9f49c00..b13664ce05 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -250,7 +250,7 @@ the derivation called NAME with hash HASH."
 (define* (derivation store name system builder args env-vars inputs
                      #:key (outputs '("out")) hash hash-algo hash-mode)
   "Build a derivation with the given arguments.  Return the resulting
-<derivation> object and its store path.  When HASH, HASH-ALGO, and HASH-MODE
+store path and <derivation> object.  When HASH, HASH-ALGO, and HASH-MODE
 are given, a fixed-output derivation is created---i.e., one whose result is
 known in advance, such as a file download."
   (define (add-output-paths drv)
@@ -321,8 +321,9 @@ known in advance, such as a file download."
                                                   inputs)
                                       system builder args env-vars))
          (drv        (add-output-paths drv-masked)))
-    (add-text-to-store store (string-append name ".drv")
-                       (call-with-output-string
-                        (cut write-derivation drv <>))
-                       (map derivation-input-path
-                            inputs))))
+    (values (add-text-to-store store (string-append name ".drv")
+                               (call-with-output-string
+                                (cut write-derivation drv <>))
+                               (map derivation-input-path
+                                    inputs))
+            drv)))
diff --git a/tests/derivations.scm b/tests/derivations.scm
index c3aba3f12b..c9b5db2311 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -20,9 +20,11 @@
 (define-module (test-derivations)
   #:use-module (guix derivations)
   #:use-module (guix store)
+  #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-64)
-  #:use-module (rnrs io ports))
+  #:use-module (rnrs io ports)
+  #:use-module (ice-9 rdelim))
 
 (define %store
   (false-if-exception (open-connection)))
@@ -37,7 +39,7 @@
     (and (equal? b1 b2)
          (equal? d1 d2))))
 
-(test-skip (if %store 0 1))
+(test-skip (if %store 0 2))
 
 (test-assert "derivation with no inputs"
   (let ((builder (add-text-to-store %store "my-builder.sh"
@@ -46,6 +48,24 @@
     (store-path? (derivation %store "foo" "x86_64-linux" builder
                              '() '(("HOME" . "/homeless")) '()))))
 
+(test-assert "build derivation with 1 source"
+  (let*-values (((builder)
+                 (add-text-to-store %store "my-builder.sh"
+                                    "#!/bin/sh\necho hello, world > \"$out\"\n"
+                                    '()))
+                ((drv-path drv)
+                 (derivation %store "foo" "x86_64-linux"
+                             "/bin/sh" `(,builder)
+                             '(("HOME" . "/homeless"))
+                             `((,builder))))
+                ((succeeded?)
+                 (build-derivations %store (list drv-path))))
+    (and succeeded?
+         (let ((path (derivation-output-path
+                      (assoc-ref (derivation-outputs drv) "out"))))
+           (string=? (call-with-input-file path read-line)
+                     "hello, world")))))
+
 (test-end)