summary refs log tree commit diff
path: root/tests/derivations.scm
diff options
context:
space:
mode:
authorMaxime Devos <maximedevos@telenet.be>2021-02-20 22:04:59 +0100
committerLudovic Courtès <ludo@gnu.org>2021-03-06 11:41:48 +0100
commitc05ceaf2b650d090cf39a048193505cb4e6bd257 (patch)
treee1468c7cd89392e1239a75ef057bbc3373f09646 /tests/derivations.scm
parent3182539875a67f5989c73c3c654fe3138bbc275c (diff)
downloadguix-c05ceaf2b650d090cf39a048193505cb4e6bd257.tar.gz
tests: do not hard code HTTP ports
Previously, test cases could fail if some process was listening
at a hard-coded port.  This patch eliminates most of these potential
failures, by automatically assigning an unbound port.  This should
allow for building multiple guix trees in parallel outside a build
container, though this is currently untested.

The test "home-page: Connection refused" in tests/lint.scm still
hardcodes port 9999, however.

* guix/tests/http.scm
  (http-server-can-listen?): remove now unused procedure.
  (%http-server-port): default to port 0, meaning the OS
  will automatically choose a port.
  (open-http-server-socket): remove the false statement claiming
  this procedure is exported and also return the allocated port
  number.
  (%local-url): raise an error if the port is obviously unbound.
  (call-with-http-server): set %http-server-port to the allocated
  port while the thunk is called.
* tests/derivations.scm: adjust test cases to use automatically
  assign a port.  As there is no risk of a port conflict now,
  do not make any tests conditional upon 'http-server-can-listen?'
  anymore.
* tests/elpa.scm: likewise.
* tests/lint.scm: likewise, and add a TODO comment about a port
  that is still hard-coded.
* tests/texlive.scm: likewise.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'tests/derivations.scm')
-rw-r--r--tests/derivations.scm41
1 files changed, 15 insertions, 26 deletions
diff --git a/tests/derivations.scm b/tests/derivations.scm
index 9f1104a887..cd165d1be6 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -77,9 +77,6 @@
         (lambda (e1 e2)
           (string<? (car e1) (car e2)))))
 
-;; Avoid collisions with other tests.
-(%http-server-port 10500)
-
 
 (test-begin "derivations")
 
@@ -205,8 +202,6 @@
       (build-derivations %store (list drv))
       #f)))
 
-(unless (http-server-can-listen?)
-  (test-skip 1))
 (test-assert "'download' built-in builder"
   (let ((text (random-text)))
     (with-http-server `((200 ,text))
@@ -221,8 +216,6 @@
                          get-string-all)
                        text))))))
 
-(unless (http-server-can-listen?)
-  (test-skip 1))
 (test-assert "'download' built-in builder, invalid hash"
   (with-http-server `((200 "hello, world!"))
     (let* ((drv (derivation %store "world"
@@ -236,8 +229,6 @@
         (build-derivations %store (list drv))
         #f))))
 
-(unless (http-server-can-listen?)
-  (test-skip 1))
 (test-assert "'download' built-in builder, not found"
   (with-http-server '((404 "not found"))
     (let* ((drv (derivation %store "will-never-be-found"
@@ -262,26 +253,24 @@
       (build-derivations %store (list drv))
       #f)))
 
-(unless (http-server-can-listen?)
-  (test-skip 1))
 (test-assert "'download' built-in builder, check mode"
   ;; Make sure rebuilding the 'builtin:download' derivation in check mode
   ;; works.  See <http://bugs.gnu.org/25089>.
-  (let* ((text (random-text))
-         (drv (derivation %store "world"
-                          "builtin:download" '()
-                          #:env-vars `(("url"
-                                        . ,(object->string (%local-url))))
-                          #:hash-algo 'sha256
-                          #:hash (gcrypt:sha256 (string->utf8 text)))))
-    (and (with-http-server `((200 ,text))
-           (build-derivations %store (list drv)))
-         (with-http-server `((200 ,text))
-           (build-derivations %store (list drv)
-                              (build-mode check)))
-         (string=? (call-with-input-file (derivation->output-path drv)
-                     get-string-all)
-                   text))))
+  (let* ((text (random-text)))
+    (with-http-server `((200 ,text))
+      (let ((drv (derivation %store "world"
+                             "builtin:download" '()
+                             #:env-vars `(("url"
+                                           . ,(object->string (%local-url))))
+                             #:hash-algo 'sha256
+                             #:hash (gcrypt:sha256 (string->utf8 text)))))
+        (and drv (build-derivations %store (list drv))
+             (with-http-server `((200 ,text))
+               (build-derivations %store (list drv)
+                                  (build-mode check)))
+             (string=? (call-with-input-file (derivation->output-path drv)
+                         get-string-all)
+                       text))))))
 
 (test-equal "derivation-name"
   "foo-0.0"