guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/02: tests: Skip tests that would fail due to the shebang length.


From: Ludovic Courtès
Subject: 02/02: tests: Skip tests that would fail due to the shebang length.
Date: Mon, 23 Feb 2015 23:01:54 +0000

civodul pushed a commit to branch master
in repository guix.

commit b69c5c2ced1e41fdb5c2e747b1fb3a338ca63768
Author: Ludovic Courtès <address@hidden>
Date:   Mon Feb 23 23:52:28 2015 +0100

    tests: Skip tests that would fail due to the shebang length.
    
    Reported by Daniel Kochmański <address@hidden>.
    Fixes <http://bugs.gnu.org/19888>.
    
    * guix/tests.scm (shebang-too-long?): New procedure.
    * tests/builders.scm ("gnu-build"): Conditionalize on
      not (shebang-too-long?).
    * tests/packages.scm ("GNU Make, bootstrap"): Likewise.
    * tests/guix-package.sh (shebang_not_too_long): New function.
      Use it to determine whether to build 'gnu-make-boot0'.
---
 guix/tests.scm        |   12 ++++++++++++
 tests/builders.scm    |    3 ++-
 tests/guix-package.sh |   13 +++++++++++--
 tests/packages.scm    |    3 ++-
 4 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/guix/tests.scm b/guix/tests.scm
index d004a50..0896e84 100644
--- a/guix/tests.scm
+++ b/guix/tests.scm
@@ -32,6 +32,7 @@
             random-text
             random-bytevector
             network-reachable?
+            shebang-too-long?
             mock
             %substitute-directory
             with-derivation-narinfo
@@ -185,6 +186,17 @@ CONTENTS."
       (delete-file (string-append dir "/example.out"))
       (delete-file (string-append dir "/example.nar")))))
 
+(define (shebang-too-long?)
+  "Return true if the typical shebang in the current store would exceed
+Linux's static limit---the BINPRM_BUF_SIZE constant, normally 128 characters
+all included."
+  (define shebang
+    (string-append "#!" (%store-prefix) "/"
+                   (make-string 32 #\a)
+                   "-bootstrap-binaries-0/bin/bash\0"))
+
+  (> (string-length shebang) 128))
+
 (define-syntax with-derivation-substitute
   (syntax-rules (sha256 =>)
     "Evaluate BODY in a context where DRV is substitutable with the given
diff --git a/tests/builders.scm b/tests/builders.scm
index 3c2a3ed..a7c3e42 100644
--- a/tests/builders.scm
+++ b/tests/builders.scm
@@ -94,7 +94,8 @@
 (test-assert "gnu-build-system"
   (build-system? gnu-build-system))
 
-(unless (network-reachable?) (test-skip 1))
+(when (or (not (network-reachable?)) (shebang-too-long?))
+  (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/guix-package.sh b/tests/guix-package.sh
index d4917bb..94cf927 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -28,6 +28,14 @@ readlink_base ()
     basename `readlink "$1"`
 }
 
+# Return true if a typical shebang in the store would not exceed Linux's
+# default static limit.
+shebang_not_too_long ()
+{
+    test `echo 
$NIX_STORE_DIR/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bootstrap-binaries-0/bin/bash | 
wc -c` \
+        -lt 128
+}
+
 module_dir="t-guix-package-$$"
 profile="t-profile-$$"
 rm -f "$profile"
@@ -55,8 +63,9 @@ test -f "$profile/bin/guile"
 guix package --search-paths -p "$profile"
 test "`guix package --search-paths -p "$profile" | wc -l`" = 0
 
-# Check whether we have network access.
-if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
+# Check whether we have network access and an acceptable shebang length.
+if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null \
+        && shebang_not_too_long
 then
     boot_make="(@@ (gnu packages commencement) gnu-make-boot0)"
     boot_make_drv="`guix build -e "$boot_make" | grep -v -e -debug`"
diff --git a/tests/packages.scm b/tests/packages.scm
index 5725b0a..d6371b3 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -531,7 +531,8 @@
                      (%current-target-system "foo64-linux-gnu"))
         (equal? drv (bag->derivation %store bag))))))
 
-(unless (network-reachable?) (test-skip 1))
+(when (or (not (network-reachable?)) (shebang-too-long?))
+  (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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]