From ad1ebab379dbd68e006197e8609c67de4734dbde Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Thu, 13 Dec 2012 22:06:45 +0100
Subject: [PATCH] tests: Skip network-dependent tests when the network is
 unreachable.

* tests/builders.scm (network-reachable?): New variable.
  ("url-fetch", "gnu-build"): Skip unless NETWORK-REACHABLE?.
* tests/derivations.scm (%coreutils): Check for network access.
  ("build-expression->derivation with one input"): Skip when %COREUTILS
  is #f.
* tests/guix-package.sh: Skip installation of GNU Make when the network
  is unreachable.
* tests/packages.scm ("GNU Make, bootstrap"): Likewise.
* tests/union.scm ("union-build"): Likewise.
---
 tests/builders.scm    |  5 +++++
 tests/derivations.scm |  6 ++++--
 tests/guix-package.sh | 46 +++++++++++++++++++++++--------------------
 tests/packages.scm    |  2 ++
 tests/union.scm       |  6 +++++-
 5 files changed, 41 insertions(+), 24 deletions(-)

diff --git a/tests/builders.scm b/tests/builders.scm
index 12841d56902..6035032d5d0 100644
--- a/tests/builders.scm
+++ b/tests/builders.scm
@@ -50,9 +50,13 @@ (define %bootstrap-inputs
               (list name (package-derivation %store package))))
             (@@ (distro packages base) %boot0-inputs))))
 
+(define network-reachable?
+  (false-if-exception (getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)))
+
 
 (test-begin "builders")
 
+(unless network-reachable? (test-skip 1))
 (test-assert "url-fetch"
   (let* ((url      '("http://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz"
                      "ftp://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz"))
@@ -69,6 +73,7 @@ (define %bootstrap-inputs
   (and (build-system? gnu-build-system)
        (eq? gnu-build (build-system-builder gnu-build-system))))
 
+(unless network-reachable? (test-skip 1))
 (test-assert "gnu-build"
   (let* ((url      "http://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz")
          (hash     (nix-base32-string->bytevector
diff --git a/tests/derivations.scm b/tests/derivations.scm
index 203bd9032f2..46bab4e19dd 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -290,8 +290,9 @@ (define prefix-len (string-length dir))
 
 (define %coreutils
   (false-if-exception
-   (or (package-derivation %store %bootstrap-coreutils&co)
-       (nixpkgs-derivation "coreutils"))))
+   (and (getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)
+        (or (package-derivation %store %bootstrap-coreutils&co)
+            (nixpkgs-derivation "coreutils")))))
 
 (test-skip (if %coreutils 0 1))
 
@@ -385,6 +386,7 @@ (define %coreutils
            (and (equal? '(hello) (call-with-input-file one read))
                 (equal? '(world) (call-with-input-file two read)))))))
 
+(test-skip (if %coreutils 0 1))
 (test-assert "build-expression->derivation with one input"
   (let* ((builder    '(call-with-output-file %output
                         (lambda (p)
diff --git a/tests/guix-package.sh b/tests/guix-package.sh
index 2bc8c573eca..598ea62aaa1 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -31,31 +31,35 @@ test -L "$profile" && test -L "$profile-1-link"
 test -f "$profile/bin/guile"
 
 
-guix-package -b -p "$profile"						\
-    -i `guix-build -e '(@@ (distro packages base) gnu-make-boot0)'`
-test -L "$profile-2-link"
-test -f "$profile/bin/make" && test -f "$profile/bin/guile"
+# Check whether we have network access.
+if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
+then
+    guix-package -b -p "$profile"						\
+	-i `guix-build -e '(@@ (distro packages base) gnu-make-boot0)'`
+    test -L "$profile-2-link"
+    test -f "$profile/bin/make" && test -f "$profile/bin/guile"
 
 
-# Check whether `--list-installed' works.
-# XXX: Change the tests when `--install' properly extracts the package
-# name and version string.
-installed="`guix-package -p "$profile" --list-installed | cut -f1 | xargs echo | sort`"
-case "x$installed" in
-    "guile-bootstrap make-boot0")
-	true;;
-    "make-boot0 guile-bootstrap")
-	true;;
-    "*")
-        false;;
-esac
+    # Check whether `--list-installed' works.
+    # XXX: Change the tests when `--install' properly extracts the package
+    # name and version string.
+    installed="`guix-package -p "$profile" --list-installed | cut -f1 | xargs echo | sort`"
+    case "x$installed" in
+	"guile-bootstrap make-boot0")
+	    true;;
+	"make-boot0 guile-bootstrap")
+	    true;;
+	"*")
+            false;;
+    esac
 
-test "`guix-package -p "$profile" -I 'g.*e' | cut -f1`" = "guile-bootstrap"
+    test "`guix-package -p "$profile" -I 'g.*e' | cut -f1`" = "guile-bootstrap"
 
-# Remove a package.
-guix-package -b -p "$profile" -r "guile-bootstrap-2.0"
-test -L "$profile-3-link"
-test -f "$profile/bin/make" && ! test -f "$profile/bin/guile"
+    # Remove a package.
+    guix-package -b -p "$profile" -r "guile-bootstrap-2.0"
+    test -L "$profile-3-link"
+    test -f "$profile/bin/make" && ! test -f "$profile/bin/guile"
+fi
 
 # Make sure the `:' syntax works.
 guix-package -b -i "libsigsegv:lib" -n
diff --git a/tests/packages.scm b/tests/packages.scm
index c89f6e7721d..5b0cd79b0fb 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -125,6 +125,8 @@ (define-syntax-rule (dummy-package name* extra-fields ...)
          (let ((p (pk 'drv d (derivation-path->output-path d))))
            (eq? 'hello (call-with-input-file p read))))))
 
+(unless (false-if-exception (getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV))
+  (test-skip 1))
 (test-assert "GNU Make, bootstrap"
   ;; GNU Make is the first program built during bootstrap; we choose it
   ;; here so that the test doesn't last for too long.
diff --git a/tests/union.scm b/tests/union.scm
index 73b95c49b8a..c839855ef4c 100644
--- a/tests/union.scm
+++ b/tests/union.scm
@@ -64,7 +64,11 @@ (define %store
                 (bin make)
                 (share (doc (make README))))))
 
-(test-skip (if %store 0 1))
+(test-skip (if (and %store
+                    (false-if-exception
+                     (getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)))
+               0
+               1))
 
 (test-assert "union-build"
   (let* ((inputs  (map (match-lambda
-- 
GitLab