From b69c5c2ced1e41fdb5c2e747b1fb3a338ca63768 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 23 Feb 2015 23:52:28 +0100 Subject: tests: Skip tests that would fail due to the shebang length. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported by Daniel Kochmański . Fixes . * 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 d004a50a36..0896e842da 100644 --- a/guix/tests.scm +++ b/guix/tests.scm @@ -32,6 +32,7 @@ (define-module (guix tests) random-text random-bytevector network-reachable? + shebang-too-long? mock %substitute-directory with-derivation-narinfo @@ -185,6 +186,17 @@ (define dir (%substitute-directory)) (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 3c2a3edc8e..a7c3e42830 100644 --- a/tests/builders.scm +++ b/tests/builders.scm @@ -94,7 +94,8 @@ (define url-fetch* (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 d4917bbf90..94cf927420 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 5725b0a8a9..d6371b3b49 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -531,7 +531,8 @@ (define read-at (%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. -- cgit v1.2.3