================================================== GNU Guix 0.14.0.1193-4f34e: ./test-suite.log ================================================== # TOTAL: 744 # PASS: 718 # SKIP: 24 # XFAIL: 0 # FAIL: 2 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 SKIP: tests/base32 ================== sh: 1: nix-hash: not found test-name: bytevector->base32-string location: /home/jorge/repos/guix/tests/base32.scm:48 source: + (test-assert + "bytevector->base32-string" + (fold (lambda (bv expected result) + (and result + (string=? + (bytevector->base32-string bv) + expected))) + #t + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")) + '("" + "my" + "mzxq" + "mzxw6" + "mzxw6yq" + "mzxw6ytb" + "mzxw6ytboi"))) actual-value: #t result: PASS test-name: base32-string->bytevector location: /home/jorge/repos/guix/tests/base32.scm:65 source: + (test-assert + "base32-string->bytevector" + (every (lambda (bv) + (equal? + (base32-string->bytevector + (bytevector->base32-string bv)) + bv)) + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) actual-value: #t result: PASS test-name: nix-base32-string->bytevector location: /home/jorge/repos/guix/tests/base32.scm:73 source: + (test-assert + "nix-base32-string->bytevector" + (every (lambda (bv) + (equal? + (nix-base32-string->bytevector + (bytevector->nix-base32-string bv)) + bv)) + (map string->utf8 + '("" "f" "fo" "foo" "foob" "fooba" "foobar")))) actual-value: #t result: PASS test-name: &invalid-base32-character location: /home/jorge/repos/guix/tests/base32.scm:81 source: + (test-equal + "&invalid-base32-character" + #\e + (guard (c ((invalid-base32-character? c) + (invalid-base32-character-value c))) + (nix-base32-string->bytevector + (string-append (make-string 51 #\a) "e")))) expected-value: #\e actual-value: #\e result: PASS test-name: sha256 & bytevector->nix-base32-string location: /home/jorge/repos/guix/tests/base32.scm:92 source: + (test-assert + "sha256 & bytevector->nix-base32-string" + (let ((file (search-path %load-path "tests/test.drv"))) + (equal? + (bytevector->nix-base32-string + (sha256 + (call-with-input-file file get-bytevector-all))) + (let* ((c (format + #f + "~a --type sha256 --base32 --flat \"~a\"" + %nix-hash + file)) + (p (open-input-pipe c)) + (l (read-line p))) + (close-pipe p) + l)))) result: SKIP FAIL: tests/derivations ======================= test-name: parse & export location: /home/jorge/repos/guix/tests/derivations.scm:87 source: + (test-assert + "parse & export" + (let* ((f (search-path %load-path "tests/test.drv")) + (b1 (call-with-input-file f get-bytevector-all)) + (d1 (read-derivation (open-bytevector-input-port b1))) + (b2 (call-with-bytevector-output-port + (cut write-derivation d1 <>))) + (d2 (read-derivation (open-bytevector-input-port b2)))) + (and (equal? b1 b2) (equal? d1 d2)))) actual-value: #t result: PASS test-name: add-to-store, flat location: /home/jorge/repos/guix/tests/derivations.scm:98 source: + (test-assert + "add-to-store, flat" + (let* ((file (search-path + %load-path + "language/tree-il/spec.scm")) + (drv (add-to-store + %store + "flat-test" + #f + "sha256" + file))) + (and (eq? 'regular (stat:type (stat drv))) + (valid-path? %store drv) + (equal? + (call-with-input-file file get-bytevector-all) + (call-with-input-file drv get-bytevector-all))))) actual-value: #f actual-error: + (srfi-34 + #) result: FAIL test-name: add-to-store, recursive location: /home/jorge/repos/guix/tests/derivations.scm:106 source: + (test-assert + "add-to-store, recursive" + (let* ((dir (dirname + (search-path + %load-path + "language/tree-il/spec.scm"))) + (drv (add-to-store + %store + "dir-tree-test" + #t + "sha256" + dir))) + (and (eq? 'directory (stat:type (stat drv))) + (valid-path? %store drv) + (equal? + (directory-contents dir) + (directory-contents drv))))) actual-value: #t result: PASS test-name: derivation with no inputs location: /home/jorge/repos/guix/tests/derivations.scm:114 source: + (test-assert + "derivation with no inputs" + (let* ((builder + (add-text-to-store + %store + "my-builder.sh" + "echo hello, world\n" + '())) + (drv (derivation + %store + "foo" + %bash + `("-e" ,builder) + #:env-vars + '(("HOME" . "/homeless"))))) + (and (store-path? (derivation-file-name drv)) + (valid-path? %store (derivation-file-name drv))))) actual-value: #t result: PASS test-name: build derivation with 1 source location: /home/jorge/repos/guix/tests/derivations.scm:124 source: + (test-assert + "build derivation with 1 source" + (let* ((builder + (add-text-to-store + %store + "my-builder.sh" + "echo hello, world > \"$out\"\n" + '())) + (drv (derivation + %store + "foo" + %bash + `(,builder) + #:env-vars + '(("HOME" . "/homeless") + ("zzz" . "Z!") + ("AAA" . "A!")) + #:inputs + `((,%bash) (,builder)))) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((path (derivation->output-path drv))) + (and (valid-path? %store path) + (string=? + (call-with-input-file path read-line) + "hello, world")))))) actual-value: #t result: PASS test-name: derivation with local file as input location: /home/jorge/repos/guix/tests/derivations.scm:142 source: + (test-assert + "derivation with local file as input" + (let* ((builder + (add-text-to-store + %store + "my-builder.sh" + "(while read line ; do echo \"$line\" ; done) < $in > $out" + '())) + (input (search-path %load-path "ice-9/boot-9.scm")) + (input* + (add-to-store + %store + (basename input) + #t + "sha256" + input)) + (drv (derivation + %store + "derivation-with-input-file" + %bash + `(,builder) + #:env-vars + `(("in" unquote input*)) + #:inputs + `((,%bash) (,builder) (,input))))) + (and (build-derivations %store (list drv)) + (valid-path? + %store + (derivation->output-path drv))))) actual-value: #t result: PASS test-name: derivation fails but keep going location: /home/jorge/repos/guix/tests/derivations.scm:165 source: + (test-assert + "derivation fails but keep going" + (with-store + store + (let* ((d1 (derivation + %store + "fails" + %bash + `("-c" "false") + #:inputs + `((,%bash)))) + (d2 (build-expression->derivation + %store + "sleep-then-succeed" + `(begin ,(random-text) (sleep 2) (mkdir %output))))) + (set-build-options + %store + #:use-substitutes? + #f + #:keep-going? + #t) + (guard (c ((nix-protocol-error? c) + (and (= 100 (nix-protocol-error-status c)) + (string-contains + (nix-protocol-error-message c) + (derivation-file-name d1)) + (not (valid-path? %store (derivation->output-path d1))) + (valid-path? %store (derivation->output-path d2))))) + (build-derivations %store (list d1 d2)) + #f)))) random seed for tests: 1516875879 @ build-started /home/jorge/repos/guix/test-tmp/store/4z975zy8ix6pay7wynbq5cvi83ihqz81-fails.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/4z//975zy8ix6pay7wynbq5cvi83ihqz81-fails.drv.bz2 builder for `/home/jorge/repos/guix/test-tmp/store/4z975zy8ix6pay7wynbq5cvi83ihqz81-fails.drv' failed with exit code 1 @ build-failed /home/jorge/repos/guix/test-tmp/store/4z975zy8ix6pay7wynbq5cvi83ihqz81-fails.drv - 1 builder for `/home/jorge/repos/guix/test-tmp/store/4z975zy8ix6pay7wynbq5cvi83ihqz81-fails.drv' failed with exit code 1 @ build-started /home/jorge/repos/guix/test-tmp/store/3qfxb66gv54z729zwg5qylc88rifq47d-guile-bootstrap-2.0.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/3q//fxb66gv54z729zwg5qylc88rifq47d-guile-bootstrap-2.0.drv.bz2 unpacking bootstrap Guile to '/home/jorge/repos/guix/test-tmp/store/k7fs7f6vxmpi91aqhdy4vxgfpyzfns7c-guile-bootstrap-2.0'... ./ ./share/ ./share/guile/ ./share/guile/2.0/ ./share/guile/2.0/system/ ./share/guile/2.0/system/xref.scm ./share/guile/2.0/system/foreign.scm ./share/guile/2.0/system/repl/ ./share/guile/2.0/system/repl/error-handling.scm ./share/guile/2.0/system/repl/debug.scm ./share/guile/2.0/system/repl/describe.scm ./share/guile/2.0/system/repl/common.scm ./share/guile/2.0/system/repl/command.scm ./share/guile/2.0/system/repl/server.scm ./share/guile/2.0/system/repl/repl.scm ./share/guile/2.0/system/base/ ./share/guile/2.0/system/base/lalr.upstream.scm ./share/guile/2.0/system/base/pmatch.scm ./share/guile/2.0/system/base/lalr.scm ./share/guile/2.0/system/base/language.scm ./share/guile/2.0/system/base/syntax.scm ./share/guile/2.0/system/base/compile.scm ./share/guile/2.0/system/base/ck.scm ./share/guile/2.0/system/base/message.scm ./share/guile/2.0/system/base/target.scm ./share/guile/2.0/system/vm/ ./share/guile/2.0/system/vm/trace.scm ./share/guile/2.0/system/vm/trap-state.scm ./share/guile/2.0/system/vm/vm.scm ./share/guile/2.0/system/vm/coverage.scm ./share/guile/2.0/system/vm/program.scm ./share/guile/2.0/system/vm/objcode.scm ./share/guile/2.0/system/vm/traps.scm ./share/guile/2.0/system/vm/inspect.scm ./share/guile/2.0/system/vm/instruction.scm ./share/guile/2.0/system/vm/frame.scm ./share/guile/2.0/scripts/ ./share/guile/2.0/scripts/scan-api.scm ./share/guile/2.0/scripts/autofrisk.scm ./share/guile/2.0/scripts/snarf-check-and-output-texi.scm ./share/guile/2.0/scripts/read-rfc822.scm ./share/guile/2.0/scripts/read-text-outline.scm ./share/guile/2.0/scripts/help.scm ./share/guile/2.0/scripts/frisk.scm ./share/guile/2.0/scripts/punify.scm ./share/guile/2.0/scripts/lint.scm ./share/guile/2.0/scripts/disassemble.scm ./share/guile/2.0/scripts/summarize-guile-TODO.scm ./share/guile/2.0/scripts/generate-autoload.scm ./share/guile/2.0/scripts/display-commentary.scm ./share/guile/2.0/scripts/compile.scm ./share/guile/2.0/scripts/api-diff.scm ./share/guile/2.0/scripts/use2dot.scm ./share/guile/2.0/scripts/doc-snarf.scm ./share/guile/2.0/scripts/read-scheme-source.scm ./share/guile/2.0/scripts/snarf-guile-m4-docs.scm ./share/guile/2.0/scripts/list.scm ./share/guile/2.0/texinfo/ ./share/guile/2.0/texinfo/indexing.scm ./share/guile/2.0/texinfo/html.scm ./share/guile/2.0/texinfo/docbook.scm ./share/guile/2.0/texinfo/serialize.scm ./share/guile/2.0/texinfo/reflection.scm ./share/guile/2.0/texinfo/plain-text.scm ./share/guile/2.0/texinfo/string-utils.scm ./share/guile/2.0/ice-9/ ./share/guile/2.0/ice-9/documentation.scm ./share/guile/2.0/ice-9/scm-style-repl.scm ./share/guile/2.0/ice-9/time.scm ./share/guile/2.0/ice-9/format.scm ./share/guile/2.0/ice-9/networking.scm ./share/guile/2.0/ice-9/getopt-long.scm ./share/guile/2.0/ice-9/vlist.scm ./share/guile/2.0/ice-9/psyntax.scm ./share/guile/2.0/ice-9/gap-buffer.scm ./share/guile/2.0/ice-9/and-let-star.scm ./share/guile/2.0/ice-9/posix.scm ./share/guile/2.0/ice-9/ls.scm ./share/guile/2.0/ice-9/syncase.scm ./share/guile/2.0/ice-9/save-stack.scm ./share/guile/2.0/ice-9/stack-catch.scm ./share/guile/2.0/ice-9/futures.scm ./share/guile/2.0/ice-9/debug.scm ./share/guile/2.0/ice-9/pretty-print.scm ./share/guile/2.0/ice-9/mapping.scm ./share/guile/2.0/ice-9/occam-channel.scm ./share/guile/2.0/ice-9/top-repl.scm ./share/guile/2.0/ice-9/boot-9.scm ./share/guile/2.0/ice-9/string-fun.scm ./share/guile/2.0/ice-9/i18n.scm ./share/guile/2.0/ice-9/match.upstream.scm ./share/guile/2.0/ice-9/streams.scm ./share/guile/2.0/ice-9/lineio.scm ./share/guile/2.0/ice-9/threads.scm ./share/guile/2.0/ice-9/weak-vector.scm ./share/guile/2.0/ice-9/history.scm ./share/guile/2.0/ice-9/expect.scm ./share/guile/2.0/ice-9/poll.scm ./share/guile/2.0/ice-9/popen.scm ./share/guile/2.0/ice-9/control.scm ./share/guile/2.0/ice-9/session.scm ./share/guile/2.0/ice-9/ftw.scm ./share/guile/2.0/ice-9/local-eval.scm ./share/guile/2.0/ice-9/receive.scm ./share/guile/2.0/ice-9/safe-r5rs.scm ./share/guile/2.0/ice-9/calling.scm ./share/guile/2.0/ice-9/curried-definitions.scm ./share/guile/2.0/ice-9/eval-string.scm ./share/guile/2.0/ice-9/q.scm ./share/guile/2.0/ice-9/serialize.scm ./share/guile/2.0/ice-9/quasisyntax.scm ./share/guile/2.0/ice-9/slib.scm ./share/guile/2.0/ice-9/hcons.scm ./share/guile/2.0/ice-9/rw.scm ./share/guile/2.0/ice-9/regex.scm ./share/guile/2.0/ice-9/match.scm ./share/guile/2.0/ice-9/buffered-input.scm ./share/guile/2.0/ice-9/iconv.scm ./share/guile/2.0/ice-9/poe.scm ./share/guile/2.0/ice-9/common-list.scm ./share/guile/2.0/ice-9/r5rs.scm ./share/guile/2.0/ice-9/command-line.scm ./share/guile/2.0/ice-9/deprecated.scm ./share/guile/2.0/ice-9/psyntax-pp.scm ./share/guile/2.0/ice-9/null.scm ./share/guile/2.0/ice-9/optargs.scm ./share/guile/2.0/ice-9/rdelim.scm ./share/guile/2.0/ice-9/runq.scm ./share/guile/2.0/ice-9/safe.scm ./share/guile/2.0/ice-9/channel.scm ./share/guile/2.0/ice-9/readline.scm ./share/guile/2.0/ice-9/binary-ports.scm ./share/guile/2.0/ice-9/eval.scm ./share/guile/2.0/ice-9/r4rs.scm ./share/guile/2.0/ice-9/r6rs-libraries.scm ./share/guile/2.0/ice-9/list.scm ./share/guile/2.0/language/ ./share/guile/2.0/language/elisp/ ./share/guile/2.0/language/elisp/compile-tree-il.scm ./share/guile/2.0/language/elisp/bindings.scm ./share/guile/2.0/language/elisp/runtime.scm ./share/guile/2.0/language/elisp/lexer.scm ./share/guile/2.0/language/elisp/spec.scm ./share/guile/2.0/language/elisp/runtime/ ./share/guile/2.0/language/elisp/runtime/macros.scm ./share/guile/2.0/language/elisp/runtime/function-slot.scm ./share/guile/2.0/language/elisp/runtime/subrs.scm ./share/guile/2.0/language/elisp/runtime/value-slot.scm ./share/guile/2.0/language/elisp/parser.scm ./share/guile/2.0/language/assembly/ ./share/guile/2.0/language/assembly/compile-bytecode.scm ./share/guile/2.0/language/assembly/disassemble.scm ./share/guile/2.0/language/assembly/spec.scm ./share/guile/2.0/language/assembly/decompile-bytecode.scm ./share/guile/2.0/language/scheme/ ./share/guile/2.0/language/scheme/compile-tree-il.scm ./share/guile/2.0/language/scheme/decompile-tree-il.scm ./share/guile/2.0/language/scheme/spec.scm ./share/guile/2.0/language/brainfuck/ ./share/guile/2.0/language/brainfuck/compile-tree-il.scm ./share/guile/2.0/language/brainfuck/compile-scheme.scm ./share/guile/2.0/language/brainfuck/spec.scm ./share/guile/2.0/language/brainfuck/parse.scm ./share/guile/2.0/language/objcode/ ./share/guile/2.0/language/objcode/spec.scm ./share/guile/2.0/language/assembly.scm ./share/guile/2.0/language/bytecode/ ./share/guile/2.0/language/bytecode/spec.scm ./share/guile/2.0/language/glil/ ./share/guile/2.0/language/glil/spec.scm ./share/guile/2.0/language/glil/compile-assembly.scm ./share/guile/2.0/language/tree-il/ ./share/guile/2.0/language/tree-il/analyze.scm ./share/guile/2.0/language/tree-il/inline.scm ./share/guile/2.0/language/tree-il/debug.scm ./share/guile/2.0/language/tree-il/primitives.scm ./share/guile/2.0/language/tree-il/optimize.scm ./share/guile/2.0/language/tree-il/fix-letrec.scm ./share/guile/2.0/language/tree-il/spec.scm ./share/guile/2.0/language/tree-il/peval.scm ./share/guile/2.0/language/tree-il/compile-glil.scm ./share/guile/2.0/language/tree-il/cse.scm ./share/guile/2.0/language/tree-il/canonicalize.scm ./share/guile/2.0/language/tree-il/effects.scm ./share/guile/2.0/language/ecmascript/ ./share/guile/2.0/language/ecmascript/base.scm ./share/guile/2.0/language/ecmascript/compile-tree-il.scm ./share/guile/2.0/language/ecmascript/function.scm ./share/guile/2.0/language/ecmascript/array.scm ./share/guile/2.0/language/ecmascript/tokenize.scm ./share/guile/2.0/language/ecmascript/spec.scm ./share/guile/2.0/language/ecmascript/impl.scm ./share/guile/2.0/language/ecmascript/parse.scm ./share/guile/2.0/language/value/ ./share/guile/2.0/language/value/spec.scm ./share/guile/2.0/language/glil.scm ./share/guile/2.0/language/tree-il.scm ./share/guile/2.0/rnrs.scm ./share/guile/2.0/statprof.scm ./share/guile/2.0/web/ ./share/guile/2.0/web/client.scm ./share/guile/2.0/web/response.scm ./share/guile/2.0/web/uri.scm ./share/guile/2.0/web/server/ ./share/guile/2.0/web/server/http.scm ./share/guile/2.0/web/request.scm ./share/guile/2.0/web/server.scm ./share/guile/2.0/web/http.scm ./share/guile/2.0/oop/ ./share/guile/2.0/oop/goops.scm ./share/guile/2.0/oop/goops/ ./share/guile/2.0/oop/goops/save.scm ./share/guile/2.0/oop/goops/stklos.scm ./share/guile/2.0/oop/goops/accessors.scm ./share/guile/2.0/oop/goops/describe.scm ./share/guile/2.0/oop/goops/dispatch.scm ./share/guile/2.0/oop/goops/active-slot.scm ./share/guile/2.0/oop/goops/composite-slot.scm ./share/guile/2.0/oop/goops/compile.scm ./share/guile/2.0/oop/goops/internal.scm ./share/guile/2.0/oop/goops/util.scm ./share/guile/2.0/oop/goops/simple.scm ./share/guile/2.0/guile-procedures.txt ./share/guile/2.0/texinfo.scm ./share/guile/2.0/rnrs/ ./share/guile/2.0/rnrs/base.scm ./share/guile/2.0/rnrs/records/ ./share/guile/2.0/rnrs/records/syntactic.scm ./share/guile/2.0/rnrs/records/inspection.scm ./share/guile/2.0/rnrs/records/procedural.scm ./share/guile/2.0/rnrs/arithmetic/ ./share/guile/2.0/rnrs/arithmetic/bitwise.scm ./share/guile/2.0/rnrs/arithmetic/fixnums.scm ./share/guile/2.0/rnrs/arithmetic/flonums.scm ./share/guile/2.0/rnrs/unicode.scm ./share/guile/2.0/rnrs/enums.scm ./share/guile/2.0/rnrs/hashtables.scm ./share/guile/2.0/rnrs/control.scm ./share/guile/2.0/rnrs/syntax-case.scm ./share/guile/2.0/rnrs/sorting.scm ./share/guile/2.0/rnrs/lists.scm ./share/guile/2.0/rnrs/mutable-strings.scm ./share/guile/2.0/rnrs/conditions.scm ./share/guile/2.0/rnrs/r5rs.scm ./share/guile/2.0/rnrs/mutable-pairs.scm ./share/guile/2.0/rnrs/programs.scm ./share/guile/2.0/rnrs/exceptions.scm ./share/guile/2.0/rnrs/eval.scm ./share/guile/2.0/rnrs/files.scm ./share/guile/2.0/rnrs/io/ ./share/guile/2.0/rnrs/io/ports.scm ./share/guile/2.0/rnrs/io/simple.scm ./share/guile/2.0/rnrs/bytevectors.scm ./share/guile/2.0/sxml/ ./share/guile/2.0/sxml/sxml-match.ss ./share/guile/2.0/sxml/fold.scm ./share/guile/2.0/sxml/ssax.scm ./share/guile/2.0/sxml/apply-templates.scm ./share/guile/2.0/sxml/xpath.scm ./share/guile/2.0/sxml/upstream/ ./share/guile/2.0/sxml/upstream/SSAX.scm ./share/guile/2.0/sxml/upstream/assert.scm ./share/guile/2.0/sxml/upstream/SXPath-old.scm ./share/guile/2.0/sxml/upstream/input-parse.scm ./share/guile/2.0/sxml/upstream/SXML-tree-trans.scm ./share/guile/2.0/sxml/transform.scm ./share/guile/2.0/sxml/match.scm ./share/guile/2.0/sxml/simple.scm ./share/guile/2.0/sxml/ssax/ ./share/guile/2.0/sxml/ssax/input-parse.scm ./share/guile/2.0/srfi/ ./share/guile/2.0/srfi/srfi-88.scm ./share/guile/2.0/srfi/srfi-14.scm ./share/guile/2.0/srfi/srfi-6.scm ./share/guile/2.0/srfi/srfi-67.scm ./share/guile/2.0/srfi/srfi-42/ ./share/guile/2.0/srfi/srfi-42/ec.scm ./share/guile/2.0/srfi/srfi-19.scm ./share/guile/2.0/srfi/srfi-31.scm ./share/guile/2.0/srfi/srfi-41.scm ./share/guile/2.0/srfi/srfi-35.scm ./share/guile/2.0/srfi/srfi-34.scm ./share/guile/2.0/srfi/srfi-60.scm ./share/guile/2.0/srfi/srfi-18.scm ./share/guile/2.0/srfi/srfi-37.scm ./share/guile/2.0/srfi/srfi-4/ ./share/guile/2.0/srfi/srfi-4/gnu.scm ./share/guile/2.0/srfi/srfi-16.scm ./share/guile/2.0/srfi/srfi-69.scm ./share/guile/2.0/srfi/srfi-17.scm ./share/guile/2.0/srfi/srfi-2.scm ./share/guile/2.0/srfi/srfi-27.scm ./share/guile/2.0/srfi/srfi-26.scm ./share/guile/2.0/srfi/srfi-8.scm ./share/guile/2.0/srfi/srfi-4.scm ./share/guile/2.0/srfi/srfi-11.scm ./share/guile/2.0/srfi/srfi-13.scm ./share/guile/2.0/srfi/srfi-67/ ./share/guile/2.0/srfi/srfi-67/compare.scm ./share/guile/2.0/srfi/srfi-45.scm ./share/guile/2.0/srfi/srfi-9.scm ./share/guile/2.0/srfi/srfi-9/ ./share/guile/2.0/srfi/srfi-9/gnu.scm ./share/guile/2.0/srfi/srfi-10.scm ./share/guile/2.0/srfi/srfi-42.scm ./share/guile/2.0/srfi/srfi-39.scm ./share/guile/2.0/srfi/srfi-1.scm ./share/guile/2.0/srfi/srfi-38.scm ./share/guile/2.0/srfi/srfi-98.scm ./lib/ ./lib/guile/ ./lib/guile/2.0/ ./lib/guile/2.0/ccache/ ./lib/guile/2.0/ccache/system/ ./lib/guile/2.0/ccache/system/foreign.go ./lib/guile/2.0/ccache/system/repl/ ./lib/guile/2.0/ccache/system/repl/command.go ./lib/guile/2.0/ccache/system/repl/error-handling.go ./lib/guile/2.0/ccache/system/repl/repl.go ./lib/guile/2.0/ccache/system/repl/debug.go ./lib/guile/2.0/ccache/system/repl/server.go ./lib/guile/2.0/ccache/system/repl/common.go ./lib/guile/2.0/ccache/system/xref.go ./lib/guile/2.0/ccache/system/base/ ./lib/guile/2.0/ccache/system/base/ck.go ./lib/guile/2.0/ccache/system/base/lalr.go ./lib/guile/2.0/ccache/system/base/pmatch.go ./lib/guile/2.0/ccache/system/base/message.go ./lib/guile/2.0/ccache/system/base/syntax.go ./lib/guile/2.0/ccache/system/base/language.go ./lib/guile/2.0/ccache/system/base/target.go ./lib/guile/2.0/ccache/system/base/compile.go ./lib/guile/2.0/ccache/system/vm/ ./lib/guile/2.0/ccache/system/vm/traps.go ./lib/guile/2.0/ccache/system/vm/frame.go ./lib/guile/2.0/ccache/system/vm/objcode.go ./lib/guile/2.0/ccache/system/vm/program.go ./lib/guile/2.0/ccache/system/vm/instruction.go ./lib/guile/2.0/ccache/system/vm/coverage.go ./lib/guile/2.0/ccache/system/vm/vm.go ./lib/guile/2.0/ccache/system/vm/trap-state.go ./lib/guile/2.0/ccache/system/vm/inspect.go ./lib/guile/2.0/ccache/system/vm/trace.go ./lib/guile/2.0/ccache/scripts/ ./lib/guile/2.0/ccache/scripts/scan-api.go ./lib/guile/2.0/ccache/scripts/use2dot.go ./lib/guile/2.0/ccache/scripts/autofrisk.go ./lib/guile/2.0/ccache/scripts/api-diff.go ./lib/guile/2.0/ccache/scripts/read-text-outline.go ./lib/guile/2.0/ccache/scripts/punify.go ./lib/guile/2.0/ccache/scripts/snarf-guile-m4-docs.go ./lib/guile/2.0/ccache/scripts/read-scheme-source.go ./lib/guile/2.0/ccache/scripts/frisk.go ./lib/guile/2.0/ccache/scripts/summarize-guile-TODO.go ./lib/guile/2.0/ccache/scripts/lint.go ./lib/guile/2.0/ccache/scripts/display-commentary.go ./lib/guile/2.0/ccache/scripts/disassemble.go ./lib/guile/2.0/ccache/scripts/generate-autoload.go ./lib/guile/2.0/ccache/scripts/snarf-check-and-output-texi.go ./lib/guile/2.0/ccache/scripts/read-rfc822.go ./lib/guile/2.0/ccache/scripts/doc-snarf.go ./lib/guile/2.0/ccache/scripts/compile.go ./lib/guile/2.0/ccache/scripts/help.go ./lib/guile/2.0/ccache/scripts/list.go ./lib/guile/2.0/ccache/texinfo/ ./lib/guile/2.0/ccache/texinfo/docbook.go ./lib/guile/2.0/ccache/texinfo/serialize.go ./lib/guile/2.0/ccache/texinfo/html.go ./lib/guile/2.0/ccache/texinfo/reflection.go ./lib/guile/2.0/ccache/texinfo/indexing.go ./lib/guile/2.0/ccache/texinfo/plain-text.go ./lib/guile/2.0/ccache/texinfo/string-utils.go ./lib/guile/2.0/ccache/ice-9/ ./lib/guile/2.0/ccache/ice-9/r4rs.go ./lib/guile/2.0/ccache/ice-9/poll.go ./lib/guile/2.0/ccache/ice-9/syncase.go ./lib/guile/2.0/ccache/ice-9/common-list.go ./lib/guile/2.0/ccache/ice-9/stack-catch.go ./lib/guile/2.0/ccache/ice-9/control.go ./lib/guile/2.0/ccache/ice-9/binary-ports.go ./lib/guile/2.0/ccache/ice-9/regex.go ./lib/guile/2.0/ccache/ice-9/safe.go ./lib/guile/2.0/ccache/ice-9/buffered-input.go ./lib/guile/2.0/ccache/ice-9/boot-9.go ./lib/guile/2.0/ccache/ice-9/and-let-star.go ./lib/guile/2.0/ccache/ice-9/expect.go ./lib/guile/2.0/ccache/ice-9/gap-buffer.go ./lib/guile/2.0/ccache/ice-9/pretty-print.go ./lib/guile/2.0/ccache/ice-9/time.go ./lib/guile/2.0/ccache/ice-9/serialize.go ./lib/guile/2.0/ccache/ice-9/debug.go ./lib/guile/2.0/ccache/ice-9/rw.go ./lib/guile/2.0/ccache/ice-9/command-line.go ./lib/guile/2.0/ccache/ice-9/networking.go ./lib/guile/2.0/ccache/ice-9/posix.go ./lib/guile/2.0/ccache/ice-9/psyntax-pp.go ./lib/guile/2.0/ccache/ice-9/format.go ./lib/guile/2.0/ccache/ice-9/optargs.go ./lib/guile/2.0/ccache/ice-9/history.go ./lib/guile/2.0/ccache/ice-9/vlist.go ./lib/guile/2.0/ccache/ice-9/threads.go ./lib/guile/2.0/ccache/ice-9/safe-r5rs.go ./lib/guile/2.0/ccache/ice-9/streams.go ./lib/guile/2.0/ccache/ice-9/readline.go ./lib/guile/2.0/ccache/ice-9/slib.go ./lib/guile/2.0/ccache/ice-9/scm-style-repl.go ./lib/guile/2.0/ccache/ice-9/session.go ./lib/guile/2.0/ccache/ice-9/top-repl.go ./lib/guile/2.0/ccache/ice-9/channel.go ./lib/guile/2.0/ccache/ice-9/q.go ./lib/guile/2.0/ccache/ice-9/string-fun.go ./lib/guile/2.0/ccache/ice-9/r5rs.go ./lib/guile/2.0/ccache/ice-9/calling.go ./lib/guile/2.0/ccache/ice-9/futures.go ./lib/guile/2.0/ccache/ice-9/null.go ./lib/guile/2.0/ccache/ice-9/occam-channel.go ./lib/guile/2.0/ccache/ice-9/eval.go ./lib/guile/2.0/ccache/ice-9/receive.go ./lib/guile/2.0/ccache/ice-9/ftw.go ./lib/guile/2.0/ccache/ice-9/runq.go ./lib/guile/2.0/ccache/ice-9/rdelim.go ./lib/guile/2.0/ccache/ice-9/save-stack.go ./lib/guile/2.0/ccache/ice-9/local-eval.go ./lib/guile/2.0/ccache/ice-9/getopt-long.go ./lib/guile/2.0/ccache/ice-9/ls.go ./lib/guile/2.0/ccache/ice-9/lineio.go ./lib/guile/2.0/ccache/ice-9/i18n.go ./lib/guile/2.0/ccache/ice-9/deprecated.go ./lib/guile/2.0/ccache/ice-9/hcons.go ./lib/guile/2.0/ccache/ice-9/popen.go ./lib/guile/2.0/ccache/ice-9/curried-definitions.go ./lib/guile/2.0/ccache/ice-9/eval-string.go ./lib/guile/2.0/ccache/ice-9/match.go ./lib/guile/2.0/ccache/ice-9/weak-vector.go ./lib/guile/2.0/ccache/ice-9/poe.go ./lib/guile/2.0/ccache/ice-9/mapping.go ./lib/guile/2.0/ccache/ice-9/list.go ./lib/guile/2.0/ccache/ice-9/documentation.go ./lib/guile/2.0/ccache/ice-9/iconv.go ./lib/guile/2.0/ccache/language/ ./lib/guile/2.0/ccache/language/assembly.go ./lib/guile/2.0/ccache/language/elisp/ ./lib/guile/2.0/ccache/language/elisp/compile-tree-il.go ./lib/guile/2.0/ccache/language/elisp/spec.go ./lib/guile/2.0/ccache/language/elisp/parser.go ./lib/guile/2.0/ccache/language/elisp/runtime.go ./lib/guile/2.0/ccache/language/elisp/bindings.go ./lib/guile/2.0/ccache/language/elisp/lexer.go ./lib/guile/2.0/ccache/language/elisp/runtime/ ./lib/guile/2.0/ccache/language/elisp/runtime/value-slot.go ./lib/guile/2.0/ccache/language/elisp/runtime/function-slot.go ./lib/guile/2.0/ccache/language/elisp/runtime/subrs.go ./lib/guile/2.0/ccache/language/elisp/runtime/macros.go ./lib/guile/2.0/ccache/language/assembly/ ./lib/guile/2.0/ccache/language/assembly/decompile-bytecode.go ./lib/guile/2.0/ccache/language/assembly/spec.go ./lib/guile/2.0/ccache/language/assembly/compile-bytecode.go ./lib/guile/2.0/ccache/language/assembly/disassemble.go ./lib/guile/2.0/ccache/language/tree-il.go ./lib/guile/2.0/ccache/language/glil.go ./lib/guile/2.0/ccache/language/scheme/ ./lib/guile/2.0/ccache/language/scheme/compile-tree-il.go ./lib/guile/2.0/ccache/language/scheme/spec.go ./lib/guile/2.0/ccache/language/scheme/decompile-tree-il.go ./lib/guile/2.0/ccache/language/brainfuck/ ./lib/guile/2.0/ccache/language/brainfuck/compile-tree-il.go ./lib/guile/2.0/ccache/language/brainfuck/spec.go ./lib/guile/2.0/ccache/language/brainfuck/parse.go ./lib/guile/2.0/ccache/language/brainfuck/compile-scheme.go ./lib/guile/2.0/ccache/language/objcode/ ./lib/guile/2.0/ccache/language/objcode/spec.go ./lib/guile/2.0/ccache/language/bytecode/ ./lib/guile/2.0/ccache/language/bytecode/spec.go ./lib/guile/2.0/ccache/language/glil/ ./lib/guile/2.0/ccache/language/glil/compile-assembly.go ./lib/guile/2.0/ccache/language/glil/spec.go ./lib/guile/2.0/ccache/language/tree-il/ ./lib/guile/2.0/ccache/language/tree-il/debug.go ./lib/guile/2.0/ccache/language/tree-il/compile-glil.go ./lib/guile/2.0/ccache/language/tree-il/optimize.go ./lib/guile/2.0/ccache/language/tree-il/spec.go ./lib/guile/2.0/ccache/language/tree-il/canonicalize.go ./lib/guile/2.0/ccache/language/tree-il/inline.go ./lib/guile/2.0/ccache/language/tree-il/analyze.go ./lib/guile/2.0/ccache/language/tree-il/peval.go ./lib/guile/2.0/ccache/language/tree-il/cse.go ./lib/guile/2.0/ccache/language/tree-il/fix-letrec.go ./lib/guile/2.0/ccache/language/tree-il/effects.go ./lib/guile/2.0/ccache/language/tree-il/primitives.go ./lib/guile/2.0/ccache/language/ecmascript/ ./lib/guile/2.0/ccache/language/ecmascript/compile-tree-il.go ./lib/guile/2.0/ccache/language/ecmascript/spec.go ./lib/guile/2.0/ccache/language/ecmascript/parse.go ./lib/guile/2.0/ccache/language/ecmascript/tokenize.go ./lib/guile/2.0/ccache/language/ecmascript/array.go ./lib/guile/2.0/ccache/language/ecmascript/impl.go ./lib/guile/2.0/ccache/language/ecmascript/function.go ./lib/guile/2.0/ccache/language/ecmascript/base.go ./lib/guile/2.0/ccache/language/value/ ./lib/guile/2.0/ccache/language/value/spec.go ./lib/guile/2.0/ccache/web/ ./lib/guile/2.0/ccache/web/http.go ./lib/guile/2.0/ccache/web/server/ ./lib/guile/2.0/ccache/web/server/http.go ./lib/guile/2.0/ccache/web/client.go ./lib/guile/2.0/ccache/web/request.go ./lib/guile/2.0/ccache/web/server.go ./lib/guile/2.0/ccache/web/uri.go ./lib/guile/2.0/ccache/web/response.go ./lib/guile/2.0/ccache/oop/ ./lib/guile/2.0/ccache/oop/goops.go ./lib/guile/2.0/ccache/oop/goops/ ./lib/guile/2.0/ccache/oop/goops/composite-slot.go ./lib/guile/2.0/ccache/oop/goops/internal.go ./lib/guile/2.0/ccache/oop/goops/stklos.go ./lib/guile/2.0/ccache/oop/goops/save.go ./lib/guile/2.0/ccache/oop/goops/dispatch.go ./lib/guile/2.0/ccache/oop/goops/util.go ./lib/guile/2.0/ccache/oop/goops/active-slot.go ./lib/guile/2.0/ccache/oop/goops/simple.go ./lib/guile/2.0/ccache/oop/goops/describe.go ./lib/guile/2.0/ccache/oop/goops/compile.go ./lib/guile/2.0/ccache/oop/goops/accessors.go ./lib/guile/2.0/ccache/rnrs/ ./lib/guile/2.0/ccache/rnrs/mutable-pairs.go ./lib/guile/2.0/ccache/rnrs/control.go ./lib/guile/2.0/ccache/rnrs/records/ ./lib/guile/2.0/ccache/rnrs/records/procedural.go ./lib/guile/2.0/ccache/rnrs/records/syntactic.go ./lib/guile/2.0/ccache/rnrs/records/inspection.go ./lib/guile/2.0/ccache/rnrs/arithmetic/ ./lib/guile/2.0/ccache/rnrs/arithmetic/fixnums.go ./lib/guile/2.0/ccache/rnrs/arithmetic/bitwise.go ./lib/guile/2.0/ccache/rnrs/arithmetic/flonums.go ./lib/guile/2.0/ccache/rnrs/enums.go ./lib/guile/2.0/ccache/rnrs/programs.go ./lib/guile/2.0/ccache/rnrs/exceptions.go ./lib/guile/2.0/ccache/rnrs/files.go ./lib/guile/2.0/ccache/rnrs/syntax-case.go ./lib/guile/2.0/ccache/rnrs/lists.go ./lib/guile/2.0/ccache/rnrs/mutable-strings.go ./lib/guile/2.0/ccache/rnrs/unicode.go ./lib/guile/2.0/ccache/rnrs/r5rs.go ./lib/guile/2.0/ccache/rnrs/hashtables.go ./lib/guile/2.0/ccache/rnrs/eval.go ./lib/guile/2.0/ccache/rnrs/conditions.go ./lib/guile/2.0/ccache/rnrs/bytevectors.go ./lib/guile/2.0/ccache/rnrs/sorting.go ./lib/guile/2.0/ccache/rnrs/base.go ./lib/guile/2.0/ccache/rnrs/io/ ./lib/guile/2.0/ccache/rnrs/io/ports.go ./lib/guile/2.0/ccache/rnrs/io/simple.go ./lib/guile/2.0/ccache/sxml/ ./lib/guile/2.0/ccache/sxml/transform.go ./lib/guile/2.0/ccache/sxml/ssax.go ./lib/guile/2.0/ccache/sxml/simple.go ./lib/guile/2.0/ccache/sxml/apply-templates.go ./lib/guile/2.0/ccache/sxml/xpath.go ./lib/guile/2.0/ccache/sxml/match.go ./lib/guile/2.0/ccache/sxml/fold.go ./lib/guile/2.0/ccache/sxml/ssax/ ./lib/guile/2.0/ccache/sxml/ssax/input-parse.go ./lib/guile/2.0/ccache/rnrs.go ./lib/guile/2.0/ccache/srfi/ ./lib/guile/2.0/ccache/srfi/srfi-4.go ./lib/guile/2.0/ccache/srfi/srfi-14.go ./lib/guile/2.0/ccache/srfi/srfi-26.go ./lib/guile/2.0/ccache/srfi/srfi-17.go ./lib/guile/2.0/ccache/srfi/srfi-27.go ./lib/guile/2.0/ccache/srfi/srfi-38.go ./lib/guile/2.0/ccache/srfi/srfi-34.go ./lib/guile/2.0/ccache/srfi/srfi-13.go ./lib/guile/2.0/ccache/srfi/srfi-41.go ./lib/guile/2.0/ccache/srfi/srfi-19.go ./lib/guile/2.0/ccache/srfi/srfi-67.go ./lib/guile/2.0/ccache/srfi/srfi-9.go ./lib/guile/2.0/ccache/srfi/srfi-2.go ./lib/guile/2.0/ccache/srfi/srfi-4/ ./lib/guile/2.0/ccache/srfi/srfi-4/gnu.go ./lib/guile/2.0/ccache/srfi/srfi-60.go ./lib/guile/2.0/ccache/srfi/srfi-11.go ./lib/guile/2.0/ccache/srfi/srfi-69.go ./lib/guile/2.0/ccache/srfi/srfi-6.go ./lib/guile/2.0/ccache/srfi/srfi-37.go ./lib/guile/2.0/ccache/srfi/srfi-39.go ./lib/guile/2.0/ccache/srfi/srfi-1.go ./lib/guile/2.0/ccache/srfi/srfi-8.go ./lib/guile/2.0/ccache/srfi/srfi-9/ ./lib/guile/2.0/ccache/srfi/srfi-9/gnu.go ./lib/guile/2.0/ccache/srfi/srfi-45.go ./lib/guile/2.0/ccache/srfi/srfi-42.go ./lib/guile/2.0/ccache/srfi/srfi-16.go ./lib/guile/2.0/ccache/srfi/srfi-31.go ./lib/guile/2.0/ccache/srfi/srfi-18.go ./lib/guile/2.0/ccache/srfi/srfi-88.go ./lib/guile/2.0/ccache/srfi/srfi-10.go ./lib/guile/2.0/ccache/srfi/srfi-35.go ./lib/guile/2.0/ccache/srfi/srfi-98.go ./lib/guile/2.0/ccache/texinfo.go ./lib/guile/2.0/ccache/statprof.go ./bin/ ./bin/guile guile (GNU Guile) 2.0.9 Copyright (C) 2013 Free Software Foundation, Inc. License LGPLv3+: GNU LGPL 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. @ build-succeeded /home/jorge/repos/guix/test-tmp/store/3qfxb66gv54z729zwg5qylc88rifq47d-guile-bootstrap-2.0.drv - @ build-started /home/jorge/repos/guix/test-tmp/store/mif4v2zc85ss1fhqlwlg0rwnsakkp2wg-sleep-then-succeed.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/mi//f4v2zc85ss1fhqlwlg0rwnsakkp2wg-sleep-then-succeed.drv.bz2 @ build-succeeded /home/jorge/repos/guix/test-tmp/store/mif4v2zc85ss1fhqlwlg0rwnsakkp2wg-sleep-then-succeed.drv - actual-value: #t result: PASS test-name: identical files are deduplicated location: /home/jorge/repos/guix/tests/derivations.scm:192 source: + (test-assert + "identical files are deduplicated" + (let* ((build1 + (add-text-to-store + %store + "one.sh" + "echo hello, world > \"$out\"\n" + '())) + (build2 + (add-text-to-store + %store + "two.sh" + "# Hey!\necho hello, world > \"$out\"\n" + '())) + (drv1 (derivation + %store + "foo" + %bash + `(,build1) + #:inputs + `((,%bash) (,build1)))) + (drv2 (derivation + %store + "bar" + %bash + `(,build2) + #:inputs + `((,%bash) (,build2))))) + (and (build-derivations %store (list drv1 drv2)) + (let ((file1 (derivation->output-path drv1)) + (file2 (derivation->output-path drv2))) + (and (valid-path? %store file1) + (valid-path? %store file2) + (string=? + (call-with-input-file file1 get-string-all) + "hello, world\n") + (= (stat:ino (lstat file1)) + (stat:ino (lstat file2)))))))) actual-value: #t result: PASS test-name: built-in-builders location: /home/jorge/repos/guix/tests/derivations.scm:214 source: + (test-equal + "built-in-builders" + '("download") + (built-in-builders %store)) expected-value: ("download") actual-value: ("download") result: PASS test-name: unknown built-in builder location: /home/jorge/repos/guix/tests/derivations.scm:218 source: + (test-assert + "unknown built-in builder" + (let ((drv (derivation + %store + "ohoh" + "builtin:does-not-exist" + '()))) + (guard (c ((nix-protocol-error? c) + (string-contains + (nix-protocol-error-message c) + "failed"))) + (build-derivations %store (list drv)) + #f))) @ build-started /home/jorge/repos/guix/test-tmp/store/4nzfdmnw9y5ssdb0zfbi8wy6flasr6l0-ohoh.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/4n//zfdmnw9y5ssdb0zfbi8wy6flasr6l0-ohoh.drv.bz2 error: unsupported builtin function 'does-not-exist' builder for `/home/jorge/repos/guix/test-tmp/store/4nzfdmnw9y5ssdb0zfbi8wy6flasr6l0-ohoh.drv' failed with exit code 1 @ build-failed /home/jorge/repos/guix/test-tmp/store/4nzfdmnw9y5ssdb0zfbi8wy6flasr6l0-ohoh.drv - 1 builder for `/home/jorge/repos/guix/test-tmp/store/4nzfdmnw9y5ssdb0zfbi8wy6flasr6l0-ohoh.drv' failed with exit code 1 actual-value: 91 result: PASS test-name: 'download' built-in builder location: /home/jorge/repos/guix/tests/derivations.scm:227 source: + (test-assert + "'download' built-in builder" + (let ((text (random-text))) + (with-http-server + 200 + text + (let* ((drv (derivation + %store + "world" + "builtin:download" + '() + #:env-vars + `(("url" unquote (object->string (%local-url)))) + #:hash-algo + 'sha256 + #:hash + (sha256 (string->utf8 text))))) + (and (build-derivations %store (list drv)) + (string=? + (call-with-input-file + (derivation->output-path drv) + get-string-all) + text)))))) @ build-started /home/jorge/repos/guix/test-tmp/store/24ibbvll6jdr9ri6qp7z1vgcl4vjljwv-world.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/24//ibbvll6jdr9ri6qp7z1vgcl4vjljwv-world.drv.bz2 Starting download of /home/jorge/repos/guix/test-tmp/store/25k9f37z2l775rbj4kianf5g1k9vnczj-world From http://localhost:10500/foo/bar... download failed "http://localhost:10500/foo/bar" 503 "Service Unavailable" failed to download "/home/jorge/repos/guix/test-tmp/store/25k9f37z2l775rbj4kianf5g1k9vnczj-world" from "http://localhost:10500/foo/bar" builder for `/home/jorge/repos/guix/test-tmp/store/24ibbvll6jdr9ri6qp7z1vgcl4vjljwv-world.drv' failed to produce output path `/home/jorge/repos/guix/test-tmp/store/25k9f37z2l775rbj4kianf5g1k9vnczj-world' @ build-failed /home/jorge/repos/guix/test-tmp/store/24ibbvll6jdr9ri6qp7z1vgcl4vjljwv-world.drv - 1 builder for `/home/jorge/repos/guix/test-tmp/store/24ibbvll6jdr9ri6qp7z1vgcl4vjljwv-world.drv' failed to produce output path `/home/jorge/repos/guix/test-tmp/store/25k9f37z2l775rbj4kianf5g1k9vnczj-world' actual-value: #f actual-error: + (srfi-34 + #) result: FAIL test-name: 'download' built-in builder, invalid hash location: /home/jorge/repos/guix/tests/derivations.scm:243 source: + (test-assert + "'download' built-in builder, invalid hash" + (with-http-server + 200 + "hello, world!" + (let* ((drv (derivation + %store + "world" + "builtin:download" + '() + #:env-vars + `(("url" unquote (object->string (%local-url)))) + #:hash-algo + 'sha256 + #:hash + (sha256 (random-bytevector 100))))) + (guard (c ((nix-protocol-error? c) + (string-contains + (nix-protocol-error-message c) + "failed"))) + (build-derivations %store (list drv)) + #f)))) result: SKIP test-name: 'download' built-in builder, not found location: /home/jorge/repos/guix/tests/derivations.scm:258 source: + (test-assert + "'download' built-in builder, not found" + (with-http-server + 404 + "not found" + (let* ((drv (derivation + %store + "will-never-be-found" + "builtin:download" + '() + #:env-vars + `(("url" unquote (object->string (%local-url)))) + #:hash-algo + 'sha256 + #:hash + (sha256 (random-bytevector 100))))) + (guard (c ((nix-protocol-error? c) + (string-contains + (nix-protocol-error-message (pk c)) + "failed"))) + (build-derivations %store (list drv)) + #f)))) result: SKIP test-name: 'download' built-in builder, not fixed-output location: /home/jorge/repos/guix/tests/derivations.scm:271 source: + (test-assert + "'download' built-in builder, not fixed-output" + (let* ((source (add-text-to-store %store "hello" "hi!")) + (url (string-append "file://" source)) + (drv (derivation + %store + "world" + "builtin:download" + '() + #:env-vars + `(("url" unquote (object->string url)))))) + (guard (c ((nix-protocol-error? c) + (string-contains + (nix-protocol-error-message c) + "failed"))) + (build-derivations %store (list drv)) + #f))) warning: cannot run Web server for tests: Address already in use warning: cannot run Web server for tests: Address already in use @ build-started /home/jorge/repos/guix/test-tmp/store/6gq5sis8rbkzm6byqv6lkinql3625sjn-world.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/6g//q5sis8rbkzm6byqv6lkinql3625sjn-world.drv.bz2 guix perform-download: error: /home/jorge/repos/guix/test-tmp/store/6gq5sis8rbkzm6byqv6lkinql3625sjn-world.drv is not a fixed-output derivation builder for `/home/jorge/repos/guix/test-tmp/store/6gq5sis8rbkzm6byqv6lkinql3625sjn-world.drv' failed with exit code 1 @ build-failed /home/jorge/repos/guix/test-tmp/store/6gq5sis8rbkzm6byqv6lkinql3625sjn-world.drv - 1 builder for `/home/jorge/repos/guix/test-tmp/store/6gq5sis8rbkzm6byqv6lkinql3625sjn-world.drv' failed with exit code 1 actual-value: 92 result: PASS test-name: 'download' built-in builder, check mode location: /home/jorge/repos/guix/tests/derivations.scm:284 source: + (test-assert + "'download' built-in builder, check mode" + (let* ((text (random-text)) + (drv (derivation + %store + "world" + "builtin:download" + '() + #:env-vars + `(("url" unquote (object->string (%local-url)))) + #:hash-algo + 'sha256 + #:hash + (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)))) result: SKIP test-name: derivation-name location: /home/jorge/repos/guix/tests/derivations.scm:303 source: + (test-equal + "derivation-name" + "foo-0.0" + (let ((drv (derivation %store "foo-0.0" %bash '()))) + (derivation-name drv))) expected-value: "foo-0.0" actual-value: "foo-0.0" result: PASS test-name: derivation-output-names location: /home/jorge/repos/guix/tests/derivations.scm:308 source: + (test-equal + "derivation-output-names" + '(("out") ("bar" "chbouib")) + (let ((drv1 (derivation %store "foo-0.0" %bash '())) + (drv2 (derivation + %store + "foo-0.0" + %bash + '() + #:outputs + '("bar" "chbouib")))) + (list (derivation-output-names drv1) + (derivation-output-names drv2)))) expected-value: (("out") ("bar" "chbouib")) actual-value: (("out") ("bar" "chbouib")) result: PASS test-name: offloadable-derivation? location: /home/jorge/repos/guix/tests/derivations.scm:316 source: + (test-assert + "offloadable-derivation?" + (and (offloadable-derivation? + (derivation %store "foo" %bash '())) + (offloadable-derivation? + (derivation + %store + "foo" + %bash + '() + #:substitutable? + #f)) + (not (offloadable-derivation? + (derivation + %store + "foo" + %bash + '() + #:local-build? + #t))))) actual-value: #t result: PASS test-name: substitutable-derivation? location: /home/jorge/repos/guix/tests/derivations.scm:325 source: + (test-assert + "substitutable-derivation?" + (and (substitutable-derivation? + (derivation %store "foo" %bash '())) + (substitutable-derivation? + (derivation + %store + "foo" + %bash + '() + #:local-build? + #t)) + (not (substitutable-derivation? + (derivation + %store + "foo" + %bash + '() + #:substitutable? + #f))))) actual-value: #t result: PASS test-name: fixed-output-derivation? location: /home/jorge/repos/guix/tests/derivations.scm:334 source: + (test-assert + "fixed-output-derivation?" + (let* ((builder + (add-text-to-store + %store + "my-fixed-builder.sh" + "echo -n hello > $out" + '())) + (hash (sha256 (string->utf8 "hello"))) + (drv (derivation + %store + "fixed" + %bash + `(,builder) + #:inputs + `((,builder)) + #:hash + hash + #:hash-algo + 'sha256))) + (fixed-output-derivation? drv))) actual-value: #t result: PASS test-name: fixed-output derivation location: /home/jorge/repos/guix/tests/derivations.scm:344 source: + (test-assert + "fixed-output derivation" + (let* ((builder + (add-text-to-store + %store + "my-fixed-builder.sh" + "echo -n hello > $out" + '())) + (hash (sha256 (string->utf8 "hello"))) + (drv (derivation + %store + "fixed" + %bash + `(,builder) + #:inputs + `((,builder)) + #:hash + hash + #:hash-algo + 'sha256)) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((p (derivation->output-path drv))) + (and (equal? + (string->utf8 "hello") + (call-with-input-file p get-bytevector-all)) + (bytevector? (query-path-hash %store p))))))) actual-value: #t result: PASS test-name: fixed-output derivation: output paths are equal location: /home/jorge/repos/guix/tests/derivations.scm:359 source: + (test-assert + "fixed-output derivation: output paths are equal" + (let* ((builder1 + (add-text-to-store + %store + "fixed-builder1.sh" + "echo -n hello > $out" + '())) + (builder2 + (add-text-to-store + %store + "fixed-builder2.sh" + "echo hey; echo -n hello > $out" + '())) + (hash (sha256 (string->utf8 "hello"))) + (drv1 (derivation + %store + "fixed" + %bash + `(,builder1) + #:hash + hash + #:hash-algo + 'sha256)) + (drv2 (derivation + %store + "fixed" + %bash + `(,builder2) + #:hash + hash + #:hash-algo + 'sha256)) + (succeeded? + (build-derivations %store (list drv1 drv2)))) + (and succeeded? + (equal? + (derivation->output-path drv1) + (derivation->output-path drv2))))) actual-value: #t result: PASS test-name: fixed-output derivation, recursive location: /home/jorge/repos/guix/tests/derivations.scm:376 source: + (test-assert + "fixed-output derivation, recursive" + (let* ((builder + (add-text-to-store + %store + "my-fixed-builder.sh" + "echo -n hello > $out" + '())) + (hash (sha256 (string->utf8 "hello"))) + (drv (derivation + %store + "fixed-rec" + %bash + `(,builder) + #:inputs + `((,builder)) + #:hash + (base32 + "0sg9f58l1jj88w6pdrfdpj5x9b1zrwszk84j81zvby36q9whhhqa") + #:hash-algo + 'sha256 + #:recursive? + #t)) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((p (derivation->output-path drv))) + (and (equal? + (string->utf8 "hello") + (call-with-input-file p get-bytevector-all)) + (bytevector? (query-path-hash %store p))))))) actual-value: #t result: PASS test-name: derivation with a fixed-output input location: /home/jorge/repos/guix/tests/derivations.scm:393 source: + (test-assert + "derivation with a fixed-output input" + (let* ((builder1 + (add-text-to-store + %store + "fixed-builder1.sh" + "echo -n hello > $out" + '())) + (builder2 + (add-text-to-store + %store + "fixed-builder2.sh" + "echo hey; echo -n hello > $out" + '())) + (hash (sha256 (string->utf8 "hello"))) + (fixed1 + (derivation + %store + "fixed" + %bash + `(,builder1) + #:hash + hash + #:hash-algo + 'sha256)) + (fixed2 + (derivation + %store + "fixed" + %bash + `(,builder2) + #:hash + hash + #:hash-algo + 'sha256)) + (fixed-out (derivation->output-path fixed1)) + (builder3 + (add-text-to-store + %store + "final-builder.sh" + "echo $in ; (read -u 3 c; echo $c) 3< $in > $out" + '())) + (final1 + (derivation + %store + "final" + %bash + `(,builder3) + #:env-vars + `(("in" unquote fixed-out)) + #:inputs + `((,%bash) (,builder3) (,fixed1)))) + (final2 + (derivation + %store + "final" + %bash + `(,builder3) + #:env-vars + `(("in" unquote fixed-out)) + #:inputs + `((,%bash) (,builder3) (,fixed2)))) + (succeeded? + (build-derivations %store (list final1 final2)))) + (and succeeded? + (equal? + (derivation->output-path final1) + (derivation->output-path final2))))) actual-value: #t result: PASS test-name: multiple-output derivation location: /home/jorge/repos/guix/tests/derivations.scm:427 source: + (test-assert + "multiple-output derivation" + (let* ((builder + (add-text-to-store + %store + "my-fixed-builder.sh" + "echo one > $out ; echo two > $second" + '())) + (drv (derivation + %store + "fixed" + %bash + `(,builder) + #:env-vars + '(("HOME" . "/homeless") + ("zzz" . "Z!") + ("AAA" . "A!")) + #:inputs + `((,%bash) (,builder)) + #:outputs + '("out" "second"))) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((one (derivation->output-path drv "out")) + (two (derivation->output-path drv "second"))) + (and (lset= equal? + (derivation->output-paths drv) + `(("out" unquote one) ("second" unquote two))) + (eq? 'one (call-with-input-file one read)) + (eq? 'two (call-with-input-file two read))))))) actual-value: #t result: PASS test-name: multiple-output derivation, non-alphabetic order location: /home/jorge/repos/guix/tests/derivations.scm:448 source: + (test-assert + "multiple-output derivation, non-alphabetic order" + (let* ((builder + (add-text-to-store + %store + "my-fixed-builder.sh" + "echo one > $out ; echo two > $AAA" + '())) + (drv (derivation + %store + "fixed" + %bash + `(,builder) + #:inputs + `((,%bash) (,builder)) + #:outputs + '("out" "AAA"))) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((one (derivation->output-path drv "out")) + (two (derivation->output-path drv "AAA"))) + (and (eq? 'one (call-with-input-file one read)) + (eq? 'two (call-with-input-file two read))))))) actual-value: #t result: PASS test-name: read-derivation vs. derivation location: /home/jorge/repos/guix/tests/derivations.scm:465 source: + (test-assert + "read-derivation vs. derivation" + (let* ((sources + (unfold + (cut >= <> 10) + (lambda (n) + (add-text-to-store + %store + (format #f "input~a" n) + (random-text))) + #{1+}# + 0)) + (inputs + (map (lambda (file) + (derivation + %store + "derivation-input" + %bash + '() + #:inputs + `((,%bash) (,file)))) + sources)) + (builder + (add-text-to-store + %store + "builder.sh" + "echo one > $one ; echo two > $two" + '())) + (drv (derivation + %store + "derivation" + %bash + `(,builder) + #:inputs + `((,%bash) + (,builder) + ,@(map list (append sources inputs))) + #:outputs + '("two" "one"))) + (drv* (call-with-input-file + (derivation-file-name drv) + read-derivation))) + (equal? drv* drv))) actual-value: #t result: PASS test-name: multiple-output derivation, derivation-path->output-path location: /home/jorge/repos/guix/tests/derivations.scm:492 source: + (test-assert + "multiple-output derivation, derivation-path->output-path" + (let* ((builder + (add-text-to-store + %store + "builder.sh" + "echo one > $out ; echo two > $second" + '())) + (drv (derivation + %store + "multiple" + %bash + `(,builder) + #:outputs + '("out" "second"))) + (drv-file (derivation-file-name drv)) + (one (derivation->output-path drv "out")) + (two (derivation->output-path drv "second")) + (first (derivation-path->output-path drv-file "out")) + (second + (derivation-path->output-path drv-file "second"))) + (and (not (string=? one two)) + (string-suffix? "-second" two) + (string=? first one) + (string=? second two)))) actual-value: #t result: PASS test-name: user of multiple-output derivation location: /home/jorge/repos/guix/tests/derivations.scm:509 source: + (test-assert + "user of multiple-output derivation" + (let* ((builder1 + (add-text-to-store + %store + "my-mo-builder.sh" + "echo one > $out ; echo two > $two" + '())) + (mdrv (derivation + %store + "multiple-output" + %bash + `(,builder1) + #:inputs + `((,%bash) (,builder1)) + #:outputs + '("out" "two"))) + (builder2 + (add-text-to-store + %store + "my-mo-user-builder.sh" + "read x < $one;\n read y < $two;\n echo \"($x $y)\" > $out" + '())) + (udrv (derivation + %store + "multiple-output-user" + %bash + `(,builder2) + #:env-vars + `(("one" + unquote + (derivation->output-path mdrv "out")) + ("two" + unquote + (derivation->output-path mdrv "two"))) + #:inputs + `((,%bash) (,builder2) (,mdrv) (,mdrv "two"))))) + (and (build-derivations %store (list (pk 'udrv udrv))) + (let ((p (derivation->output-path udrv))) + (and (valid-path? %store p) + (equal? '(one two) (call-with-input-file p read))))))) ;;; (udrv # /home/jorge/repos/guix/test-tmp/store/jgdgwrh5fk6nw9z4ryhbhrkymk5d16p9-multiple-output-user 5577e080f960>) actual-value: #t result: PASS test-name: derivation with #:references-graphs location: /home/jorge/repos/guix/tests/derivations.scm:542 source: + (test-assert + "derivation with #:references-graphs" + (let* ((input1 + (add-text-to-store + %store + "foo" + "hello" + (list %bash))) + (input2 + (add-text-to-store + %store + "bar" + (number->string (random 7777)) + (list input1))) + (builder + (add-text-to-store + %store + "build-graph" + (format + #f + "\n~a $out\n (while read l ; do echo $l ; done) < bash > $out/bash\n (while read l ; do echo $l ; done) < input1 > $out/input1\n (while read l ; do echo $l ; done) < input2 > $out/input2" + %mkdir) + (list %mkdir))) + (drv (derivation + %store + "closure-graphs" + %bash + `(,builder) + #:references-graphs + `(("bash" unquote %bash) + ("input1" unquote input1) + ("input2" unquote input2)) + #:inputs + `((,%bash) (,builder)))) + (out (derivation->output-path drv))) + (define (deps path . deps) + (let ((count (length deps))) + (string-append + path + "\n\n" + (number->string count) + "\n" + (string-join (sort deps string? input1 %bash) + (string-append (deps %bash) (deps input1 %bash)) + (string-append (deps input1 %bash) (deps %bash)))) + ("/input2" + unquote + (string-concatenate + (map cdr + (sort (map (lambda (p d) (cons p (apply deps p d))) + (list %bash input1 input2) + (list '() (list %bash) (list input1))) + (lambda (x y) + (match x + ((p1 . _) + (match y + ((p2 . _) + (string $out") + #:inputs + `((,%bash)) + #:allowed-references + '()))) + (build-derivations %store (list drv)))) actual-value: #t result: PASS test-name: derivation #:allowed-references, not allowed location: /home/jorge/repos/guix/tests/derivations.scm:599 source: + (test-assert + "derivation #:allowed-references, not allowed" + (let* ((txt (add-text-to-store %store "foo" "Hello, world.")) + (drv (derivation + %store + "disallowed" + %bash + `("-c" ,(string-append "echo " txt "> $out")) + #:inputs + `((,%bash) (,txt)) + #:allowed-references + '()))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list drv)) + #f))) warning: cannot run Web server for tests: Address already in use @ build-started /home/jorge/repos/guix/test-tmp/store/f7j0mnxv1p0swhj1qihb7jwsr7g0dv1z-disallowed.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/f7//j0mnxv1p0swhj1qihb7jwsr7g0dv1z-disallowed.drv.bz2 output (`/home/jorge/repos/guix/test-tmp/store/yccz4qjbr1jp7z5f112qll9sq1jpc097-disallowed') is not allowed to refer to path `/home/jorge/repos/guix/test-tmp/store/wpq9l41rvc3vilaysmmmcl603a7k86cr-foo' @ build-failed /home/jorge/repos/guix/test-tmp/store/f7j0mnxv1p0swhj1qihb7jwsr7g0dv1z-disallowed.drv - 1 output (`/home/jorge/repos/guix/test-tmp/store/yccz4qjbr1jp7z5f112qll9sq1jpc097-disallowed') is not allowed to refer to path `/home/jorge/repos/guix/test-tmp/store/wpq9l41rvc3vilaysmmmcl603a7k86cr-foo' actual-value: #t result: PASS test-name: derivation #:allowed-references, self allowed location: /home/jorge/repos/guix/tests/derivations.scm:611 source: + (test-assert + "derivation #:allowed-references, self allowed" + (let ((drv (derivation + %store + "allowed" + %bash + '("-c" "echo $out > $out") + #:inputs + `((,%bash)) + #:allowed-references + '("out")))) + (build-derivations %store (list drv)))) actual-value: #t result: PASS test-name: derivation #:allowed-references, self not allowed location: /home/jorge/repos/guix/tests/derivations.scm:618 source: + (test-assert + "derivation #:allowed-references, self not allowed" + (let ((drv (derivation + %store + "disallowed" + %bash + `("-c" ,"echo $out > $out") + #:inputs + `((,%bash)) + #:allowed-references + '()))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list drv)) + #f))) @ build-started /home/jorge/repos/guix/test-tmp/store/hhy2f55mf5mq26v0v9hyfn2wzy8fm8m2-disallowed.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/hh//y2f55mf5mq26v0v9hyfn2wzy8fm8m2-disallowed.drv.bz2 output (`/home/jorge/repos/guix/test-tmp/store/iw4milncppznr2d4d7aw90badb3xn6av-disallowed') is not allowed to refer to path `/home/jorge/repos/guix/test-tmp/store/iw4milncppznr2d4d7aw90badb3xn6av-disallowed' @ build-failed /home/jorge/repos/guix/test-tmp/store/hhy2f55mf5mq26v0v9hyfn2wzy8fm8m2-disallowed.drv - 1 output (`/home/jorge/repos/guix/test-tmp/store/iw4milncppznr2d4d7aw90badb3xn6av-disallowed') is not allowed to refer to path `/home/jorge/repos/guix/test-tmp/store/iw4milncppznr2d4d7aw90badb3xn6av-disallowed' actual-value: #t result: PASS test-name: derivation #:disallowed-references, ok location: /home/jorge/repos/guix/tests/derivations.scm:629 source: + (test-assert + "derivation #:disallowed-references, ok" + (let ((drv (derivation + %store + "disallowed" + %bash + '("-c" "echo hello > $out") + #:inputs + `((,%bash)) + #:disallowed-references + '("out")))) + (build-derivations %store (list drv)))) actual-value: #t result: PASS test-name: derivation #:disallowed-references, not ok location: /home/jorge/repos/guix/tests/derivations.scm:636 source: + (test-assert + "derivation #:disallowed-references, not ok" + (let* ((txt (add-text-to-store %store "foo" "Hello, world.")) + (drv (derivation + %store + "disdisallowed" + %bash + `("-c" ,(string-append "echo " txt "> $out")) + #:inputs + `((,%bash) (,txt)) + #:disallowed-references + (list txt)))) + (guard (c ((nix-protocol-error? c) #t)) + (build-derivations %store (list drv)) + #f))) @ build-started /home/jorge/repos/guix/test-tmp/store/93zbxyagimcfdiwkxl0s6yxnfhcp5b7l-disdisallowed.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/93//zbxyagimcfdiwkxl0s6yxnfhcp5b7l-disdisallowed.drv.bz2 output (`/home/jorge/repos/guix/test-tmp/store/14b8q5k83z2kcvaqfa4bd86z88qzkfds-disdisallowed') is not allowed to refer to path `/home/jorge/repos/guix/test-tmp/store/wpq9l41rvc3vilaysmmmcl603a7k86cr-foo' @ build-failed /home/jorge/repos/guix/test-tmp/store/93zbxyagimcfdiwkxl0s6yxnfhcp5b7l-disdisallowed.drv - 1 output (`/home/jorge/repos/guix/test-tmp/store/14b8q5k83z2kcvaqfa4bd86z88qzkfds-disdisallowed') is not allowed to refer to path `/home/jorge/repos/guix/test-tmp/store/wpq9l41rvc3vilaysmmmcl603a7k86cr-foo' actual-value: #t result: PASS test-name: derivation #:leaked-env-vars location: /home/jorge/repos/guix/tests/derivations.scm:651 source: + (test-equal + "derivation #:leaked-env-vars" + (getenv "NIX_STATE_DIR") + (let* ((value (getenv "NIX_STATE_DIR")) + (drv (derivation + %store + "leaked-env-vars" + %bash + '("-c" "echo -n $NIX_STATE_DIR > $out") + #:hash + (sha256 (string->utf8 value)) + #:hash-algo + 'sha256 + #:inputs + `((,%bash)) + #:leaked-env-vars + '("NIX_STATE_DIR")))) + (and (build-derivations %store (list drv)) + (call-with-input-file + (derivation->output-path drv) + get-string-all)))) @ build-started /home/jorge/repos/guix/test-tmp/store/flqjkyqwdlxshhzgyf8nhygi38b1y95s-leaked-env-vars.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/fl//qjkyqwdlxshhzgyf8nhygi38b1y95s-leaked-env-vars.drv.bz2 @ build-succeeded /home/jorge/repos/guix/test-tmp/store/flqjkyqwdlxshhzgyf8nhygi38b1y95s-leaked-env-vars.drv - expected-value: "/home/jorge/repos/guix/test-tmp/var/31131" actual-value: "/home/jorge/repos/guix/test-tmp/var/31131" result: PASS test-name: build derivation with coreutils location: /home/jorge/repos/guix/tests/derivations.scm:672 source: + (test-assert + "build derivation with coreutils" + (let* ((builder + (add-text-to-store + %store + "build-with-coreutils.sh" + "echo $PATH ; mkdir --version ; mkdir $out ; touch $out/good" + '())) + (drv (derivation + %store + "foo" + %bash + `(,builder) + #:env-vars + `(("PATH" + unquote + (string-append + (derivation->output-path %coreutils) + "/bin"))) + #:inputs + `((,builder) (,%coreutils)))) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((p (derivation->output-path drv))) + (and (valid-path? %store p) + (file-exists? (string-append p "/good"))))))) actual-value: #t result: PASS test-name: build-expression->derivation and invalid module name location: /home/jorge/repos/guix/tests/derivations.scm:695 source: + (test-equal + "build-expression->derivation and invalid module name" + '(file-search-error + "guix/module/that/does/not/exist.scm") + (guard (c ((file-search-error? c) + (list 'file-search-error + (file-search-error-file-name c)))) + (build-expression->derivation + %store + "foo" + #t + #:modules + '((guix module that does not exist))))) expected-value: (file-search-error "guix/module/that/does/not/exist.scm") actual-value: (file-search-error "guix/module/that/does/not/exist.scm") result: PASS test-name: build-expression->derivation and builder encoding location: /home/jorge/repos/guix/tests/derivations.scm:704 source: + (test-equal + "build-expression->derivation and builder encoding" + '("UTF-8" #t) + (let* ((exp '(λ (α) (+ α 1))) + (drv (build-expression->derivation %store "foo" exp))) + (match (derivation-builder-arguments drv) + ((... builder) + (with-fluids + ((%default-port-encoding "UTF-8")) + (call-with-input-file + builder + (lambda (port) + (list (port-encoding port) + (->bool + (string-contains + (get-string-all port) + "(λ (α) (+ α 1))")))))))))) expected-value: ("UTF-8" #t) actual-value: ("UTF-8" #t) result: PASS test-name: build-expression->derivation and derivation-prerequisites location: /home/jorge/repos/guix/tests/derivations.scm:718 source: + (test-assert + "build-expression->derivation and derivation-prerequisites" + (let ((drv (build-expression->derivation %store "fail" #f))) + (any (match-lambda + (($ path) + (string=? + path + (derivation-file-name (%guile-for-build))))) + (derivation-prerequisites drv)))) actual-value: #t result: PASS test-name: derivation-prerequisites and valid-derivation-input? location: /home/jorge/repos/guix/tests/derivations.scm:725 source: + (test-assert + "derivation-prerequisites and valid-derivation-input?" + (let* ((a (build-expression->derivation + %store + "a" + '(mkdir %output))) + (b (build-expression->derivation + %store + "b" + `(list ,(random-text)))) + (c (build-expression->derivation + %store + "c" + `(mkdir %output) + #:inputs + `(("a" ,a) ("b" ,b))))) + (build-derivations + %store + (list a + (package-derivation %store %bootstrap-guile))) + (match (derivation-prerequisites + c + (cut valid-derivation-input? %store <>)) + ((($ file ("out"))) + (string=? file (derivation-file-name b))) + (x (pk 'fail x #f))))) actual-value: #t result: PASS test-name: build-expression->derivation without inputs location: /home/jorge/repos/guix/tests/derivations.scm:743 source: + (test-assert + "build-expression->derivation without inputs" + (let* ((builder + '(begin + (mkdir %output) + (call-with-output-file + (string-append %output "/test") + (lambda (p) (display '(hello guix) p))))) + (drv (build-expression->derivation + %store + "goo" + builder)) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((p (derivation->output-path drv))) + (equal? + '(hello guix) + (call-with-input-file + (string-append p "/test") + read)))))) actual-value: #t result: PASS test-name: build-expression->derivation and max-silent-time location: /home/jorge/repos/guix/tests/derivations.scm:756 source: + (test-assert + "build-expression->derivation and max-silent-time" + (let* ((store (let ((s (open-connection))) + (set-build-options s #:max-silent-time 1) + s)) + (builder '(begin (sleep 100) (mkdir %output) #t)) + (drv (build-expression->derivation + store + "silent" + builder)) + (out-path (derivation->output-path drv))) + (guard (c ((nix-protocol-error? c) + (and (string-contains + (nix-protocol-error-message c) + "failed") + (not (valid-path? store out-path))))) + (build-derivations store (list drv)) + #f))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ build-started /home/jorge/repos/guix/test-tmp/store/v1bfcr4qh12mgsy5ad79vqz2qrnh234s-silent.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/v1//bfcr4qh12mgsy5ad79vqz2qrnh234s-silent.drv.bz2 building of `/home/jorge/repos/guix/test-tmp/store/v1bfcr4qh12mgsy5ad79vqz2qrnh234s-silent.drv' timed out after 1 seconds of silence @ build-failed /home/jorge/repos/guix/test-tmp/store/v1bfcr4qh12mgsy5ad79vqz2qrnh234s-silent.drv - timeout killing process 32077 actual-value: #t result: PASS test-name: build-expression->derivation and timeout location: /home/jorge/repos/guix/tests/derivations.scm:770 source: + (test-assert + "build-expression->derivation and timeout" + (let* ((store (let ((s (open-connection))) + (set-build-options s #:timeout 1) + s)) + (builder '(begin (sleep 100) (mkdir %output) #t)) + (drv (build-expression->derivation + store + "slow" + builder)) + (out-path (derivation->output-path drv))) + (guard (c ((nix-protocol-error? c) + (and (string-contains + (nix-protocol-error-message c) + "failed") + (not (valid-path? store out-path))))) + (build-derivations store (list drv)) + #f))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable @ build-started /home/jorge/repos/guix/test-tmp/store/zyal8wbnqd4yni82bsyi61laf3rkv7kk-slow.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/zy//al8wbnqd4yni82bsyi61laf3rkv7kk-slow.drv.bz2 building of `/home/jorge/repos/guix/test-tmp/store/zyal8wbnqd4yni82bsyi61laf3rkv7kk-slow.drv' timed out after 1 seconds @ build-failed /home/jorge/repos/guix/test-tmp/store/zyal8wbnqd4yni82bsyi61laf3rkv7kk-slow.drv - timeout killing process 32240 actual-value: #t result: PASS test-name: build-expression->derivation and derivation-prerequisites-to-build location: /home/jorge/repos/guix/tests/derivations.scm:784 source: + (test-assert + "build-expression->derivation and derivation-prerequisites-to-build" + (let ((drv (build-expression->derivation %store "fail" #f))) + (null? (derivation-prerequisites-to-build %store drv)))) actual-value: #t result: PASS test-name: derivation-prerequisites-to-build when outputs already present location: /home/jorge/repos/guix/tests/derivations.scm:790 source: + (test-assert + "derivation-prerequisites-to-build when outputs already present" + (let* ((builder '(begin (mkdir %output) #t)) + (input-drv + (build-expression->derivation + %store + "input" + builder)) + (input-path + (derivation-output-path + (assoc-ref (derivation-outputs input-drv) "out"))) + (drv (build-expression->derivation + %store + "something" + builder + #:inputs + `(("i" ,input-drv)))) + (output (derivation->output-path drv))) + (when (valid-path? %store input-path) + (delete-paths %store (list input-path))) + (when (valid-path? %store output) + (delete-paths %store (list output))) + (and (equal? + (map derivation-input-path + (derivation-prerequisites-to-build %store drv)) + (list (derivation-file-name input-drv))) + (build-derivations %store (list drv)) + (delete-paths %store (list input-path)) + (not (valid-path? %store input-path)) + (null? (derivation-prerequisites-to-build %store drv))))) finding garbage collector roots... removing stale temporary roots file `/home/jorge/repos/guix/test-tmp/var/31131/temproots/31409' deleting unused links... @ build-started /home/jorge/repos/guix/test-tmp/store/a5dp04hag61qqxz8vyvc85ilrdi79xx9-input.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/a5//dp04hag61qqxz8vyvc85ilrdi79xx9-input.drv.bz2 @ build-succeeded /home/jorge/repos/guix/test-tmp/store/a5dp04hag61qqxz8vyvc85ilrdi79xx9-input.drv - @ build-started /home/jorge/repos/guix/test-tmp/store/l3jf2b3dq2z8lpwjyi8a4vwip691j9mj-something.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/l3//jf2b3dq2z8lpwjyi8a4vwip691j9mj-something.drv.bz2 @ build-succeeded /home/jorge/repos/guix/test-tmp/store/l3jf2b3dq2z8lpwjyi8a4vwip691j9mj-something.drv - finding garbage collector roots... deleting unused links... actual-value: #t result: PASS test-name: derivation-prerequisites-to-build and substitutes location: /home/jorge/repos/guix/tests/derivations.scm:819 source: + (test-assert + "derivation-prerequisites-to-build and substitutes" + (let* ((store (open-connection)) + (drv (build-expression->derivation + store + "prereq-subst" + (random 1000))) + (output (derivation->output-path drv))) + (set-build-options + store + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (with-derivation-narinfo + drv + (let-values + (((build download) + (derivation-prerequisites-to-build store drv)) + ((build* download*) + (derivation-prerequisites-to-build + store + drv + #:substitutable-info + (const #f)))) + (and (null? build) + (equal? + (map substitutable-path download) + (list output)) + (null? download*) + (null? build*)))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable actual-value: #t result: PASS test-name: derivation-prerequisites-to-build and substitutes, non-substitutable build location: /home/jorge/repos/guix/tests/derivations.scm:841 source: + (test-assert + "derivation-prerequisites-to-build and substitutes, non-substitutable build" + (let* ((store (open-connection)) + (drv (build-expression->derivation + store + "prereq-no-subst" + (random 1000) + #:substitutable? + #f)) + (output (derivation->output-path drv))) + (set-build-options + store + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (with-derivation-narinfo + drv + (let-values + (((build download) + (derivation-prerequisites-to-build store drv))) + (and (null? download) + (match build + (((? derivation-input? input)) + (string=? + (derivation-input-path input) + (derivation-file-name drv))))))))) actual-value: #t result: PASS test-name: derivation-prerequisites-to-build and substitutes, local build location: /home/jorge/repos/guix/tests/derivations.scm:863 source: + (test-assert + "derivation-prerequisites-to-build and substitutes, local build" + (with-store + store + (let* ((drv (build-expression->derivation + store + "prereq-subst-local" + (random 1000) + #:local-build? + #t)) + (output (derivation->output-path drv))) + (set-build-options + store + #:use-substitutes? + #t + #:substitute-urls + (%test-substitute-urls)) + (with-derivation-narinfo + drv + (let-values + (((build download) + (derivation-prerequisites-to-build store drv))) + (and (null? build) + (match download + (((= substitutable-path item)) + (string=? item (derivation->output-path drv)))))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable actual-value: #t result: PASS test-name: derivation-prerequisites-to-build in 'check' mode location: /home/jorge/repos/guix/tests/derivations.scm:885 source: + (test-assert + "derivation-prerequisites-to-build in 'check' mode" + (with-store + store + (let* ((dep (build-expression->derivation + store + "dep" + `(begin ,(random-text) (mkdir %output)))) + (drv (build-expression->derivation + store + "to-check" + '(mkdir %output) + #:inputs + `(("dep" ,dep))))) + (build-derivations store (list drv)) + (delete-paths + store + (list (derivation->output-path dep))) + (and (null? (derivation-prerequisites-to-build store drv)) + (match (derivation-prerequisites-to-build + store + drv + #:mode + (build-mode check)) + ((input) + (string=? + (derivation-input-path input) + (derivation-file-name dep)))))))) substitute: warning: authentication and authorization of substitutes disabled! substitute: guix substitute: warning: ACL for archive imports seems to be uninitialized, substitutes may be unavailable building path(s) `/home/jorge/repos/guix/test-tmp/store/lhwcyzy8ks2pf54c3vz6vzhzgm3lagmp-dep' building path(s) `/home/jorge/repos/guix/test-tmp/store/wxn9bn564m155jmz75m8517vlamx8c8z-to-check' finding garbage collector roots... removing stale temporary roots file `/home/jorge/repos/guix/test-tmp/var/31131/temproots/32665' deleting `/home/jorge/repos/guix/test-tmp/store/lhwcyzy8ks2pf54c3vz6vzhzgm3lagmp-dep' deleting `/home/jorge/repos/guix/test-tmp/store/trash' deleting unused links... note: currently hard linking saves 25.96 MiB actual-value: #t result: PASS test-name: substitution-oracle and #:substitute? #f location: /home/jorge/repos/guix/tests/derivations.scm:905 source: + (test-assert + "substitution-oracle and #:substitute? #f" + (with-store + store + (let* ((dep (build-expression->derivation + store + "dep" + `(begin ,(random-text) (mkdir %output)))) + (drv (build-expression->derivation + store + "not-subst" + `(begin ,(random-text) (mkdir %output)) + #:substitutable? + #f + #:inputs + `(("dep" ,dep)))) + (query #f)) + (define (record-substitutable-path-query store paths) + (when query (error "already called!" query)) + (set! query paths) + '()) + (mock ((guix store) + substitutable-path-info + record-substitutable-path-query) + (let ((pred (substitution-oracle store (list drv)))) + (pred (derivation->output-path drv)))) + (equal? + (pk 'query query) + (list (derivation->output-path dep)))))) ;;; (query ("/home/jorge/repos/guix/test-tmp/store/jwd7rvnc2myay3wd1nglnlldgcixfmfz-dep")) actual-value: #t result: PASS test-name: build-expression->derivation with expression returning #f location: /home/jorge/repos/guix/tests/derivations.scm:934 source: + (test-assert + "build-expression->derivation with expression returning #f" + (let* ((builder '(begin (mkdir %output) #f)) + (drv (build-expression->derivation + %store + "fail" + builder)) + (out-path (derivation->output-path drv))) + (guard (c ((nix-protocol-error? c) + (and (string-match + "build .* failed" + (nix-protocol-error-message c)) + (not (valid-path? %store out-path))))) + (build-derivations %store (list drv)) + #f))) @ build-started /home/jorge/repos/guix/test-tmp/store/j9p2cv04r76aq45x24pxw36jgrc2jddd-fail.drv - x86_64-linux /home/jorge/repos/guix/test-tmp/var/log/guix/drvs/j9//p2cv04r76aq45x24pxw36jgrc2jddd-fail.drv.bz2 builder for `/home/jorge/repos/guix/test-tmp/store/j9p2cv04r76aq45x24pxw36jgrc2jddd-fail.drv' failed with exit code 1 @ build-failed /home/jorge/repos/guix/test-tmp/store/j9p2cv04r76aq45x24pxw36jgrc2jddd-fail.drv - 1 builder for `/home/jorge/repos/guix/test-tmp/store/j9p2cv04r76aq45x24pxw36jgrc2jddd-fail.drv' failed with exit code 1 actual-value: #t result: PASS test-name: build-expression->derivation with two outputs location: /home/jorge/repos/guix/tests/derivations.scm:949 source: + (test-assert + "build-expression->derivation with two outputs" + (let* ((builder + '(begin + (call-with-output-file + (assoc-ref %outputs "out") + (lambda (p) (display '(hello) p))) + (call-with-output-file + (assoc-ref %outputs "second") + (lambda (p) (display '(world) p))))) + (drv (build-expression->derivation + %store + "double" + builder + #:outputs + '("out" "second"))) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((one (derivation->output-path drv)) + (two (derivation->output-path drv "second"))) + (and (equal? '(hello) (call-with-input-file one read)) + (equal? '(world) (call-with-input-file two read))))))) actual-value: #t result: PASS test-name: build-expression->derivation with one input location: /home/jorge/repos/guix/tests/derivations.scm:968 source: + (test-assert + "build-expression->derivation with one input" + (let* ((builder + '(call-with-output-file + %output + (lambda (p) + (let ((cu (assoc-ref %build-inputs "cu"))) + (close 1) + (dup2 (port->fdes p) 1) + (execl (string-append cu "/bin/uname") + "uname" + "-a"))))) + (drv (build-expression->derivation + %store + "uname" + builder + #:inputs + `(("cu" ,%coreutils)))) + (succeeded? + (build-derivations %store (list drv)))) + (and succeeded? + (let ((p (derivation->output-path drv))) + (string-contains + (call-with-input-file p read-line) + "GNU"))))) actual-value: 93 result: PASS test-name: build-expression->derivation with modules location: /home/jorge/repos/guix/tests/derivations.scm:984 source: + (test-assert + "build-expression->derivation with modules" + (let* ((builder + `(begin + (use-modules (guix build utils)) + (let ((out (assoc-ref %outputs "out"))) + (mkdir-p (string-append out "/guile/guix/nix")) + #t))) + (drv (build-expression->derivation + %store + "test-with-modules" + builder + #:modules + '((guix build utils))))) + (and (build-derivations %store (list drv)) + (let* ((p (derivation->output-path drv)) + (s (stat (string-append p "/guile/guix/nix")))) + (eq? (stat:type s) 'directory))))) actual-value: #t result: PASS test-name: build-expression->derivation: same fixed-output path location: /home/jorge/repos/guix/tests/derivations.scm:999 source: + (test-assert + "build-expression->derivation: same fixed-output path" + (let* ((builder1 + '(call-with-output-file + %output + (lambda (p) (write "hello" p)))) + (builder2 + '(call-with-output-file + (pk 'difference-here! %output) + (lambda (p) (write "hello" p)))) + (hash (sha256 (string->utf8 "hello"))) + (input1 + (build-expression->derivation + %store + "fixed" + builder1 + #:hash + hash + #:hash-algo + 'sha256)) + (input2 + (build-expression->derivation + %store + "fixed" + builder2 + #:hash + hash + #:hash-algo + 'sha256)) + (succeeded? + (build-derivations %store (list input1 input2)))) + (and succeeded? + (not (string=? + (derivation-file-name input1) + (derivation-file-name input2))) + (string=? + (derivation->output-path input1) + (derivation->output-path input2))))) actual-value: #t result: PASS test-name: build-expression->derivation with a fixed-output input location: /home/jorge/repos/guix/tests/derivations.scm:1020 source: + (test-assert + "build-expression->derivation with a fixed-output input" + (let* ((builder1 + '(call-with-output-file + %output + (lambda (p) (write "hello" p)))) + (builder2 + '(call-with-output-file + (pk 'difference-here! %output) + (lambda (p) (write "hello" p)))) + (hash (sha256 (string->utf8 "hello"))) + (input1 + (build-expression->derivation + %store + "fixed" + builder1 + #:hash + hash + #:hash-algo + 'sha256)) + (input2 + (build-expression->derivation + %store + "fixed" + builder2 + #:hash + hash + #:hash-algo + 'sha256)) + (builder3 + '(let ((input (assoc-ref %build-inputs "input"))) + (call-with-output-file + %output + (lambda (out) + (format #f "My input is ~a.~%" input))))) + (final1 + (build-expression->derivation + %store + "final" + builder3 + #:inputs + `(("input" ,input1)))) + (final2 + (build-expression->derivation + %store + "final" + builder3 + #:inputs + `(("input" ,input2))))) + (and (string=? + (derivation->output-path final1) + (derivation->output-path final2)) + (string=? + (derivation->output-path final1) + (derivation-path->output-path + (derivation-file-name final1))) + (build-derivations %store (list final1 final2))))) actual-value: #t result: PASS test-name: build-expression->derivation produces recursive fixed-output location: /home/jorge/repos/guix/tests/derivations.scm:1051 source: + (test-assert + "build-expression->derivation produces recursive fixed-output" + (let* ((builder + '(begin + (use-modules (srfi srfi-26)) + (mkdir %output) + (chdir %output) + (call-with-output-file + "exe" + (cut display "executable" <>)) + (chmod "exe" 511) + (symlink "exe" "symlink") + (mkdir "subdir"))) + (drv (build-expression->derivation + %store + "fixed-rec" + builder + #:hash-algo + 'sha256 + #:hash + (base32 + "10k1lw41wyrjf9mxydi0is5nkpynlsvgslinics4ppir13g7d74p") + #:recursive? + #t))) + (and (build-derivations %store (list drv)) + (let* ((dir (derivation->output-path drv)) + (exe (string-append dir "/exe")) + (link (string-append dir "/symlink")) + (subdir (string-append dir "/subdir"))) + (and (executable-file? exe) + (string=? + "executable" + (call-with-input-file exe get-string-all)) + (string=? "exe" (readlink link)) + (file-is-directory? subdir)))))) actual-value: #t result: PASS test-name: build-expression->derivation uses recursive fixed-output location: /home/jorge/repos/guix/tests/derivations.scm:1077 source: + (test-assert + "build-expression->derivation uses recursive fixed-output" + (let* ((builder + '(call-with-output-file + %output + (lambda (port) (display "hello" port)))) + (fixed (build-expression->derivation + %store + "small-fixed-rec" + builder + #:hash-algo + 'sha256 + #:hash + (base32 + "0sg9f58l1jj88w6pdrfdpj5x9b1zrwszk84j81zvby36q9whhhqa") + #:recursive? + #t)) + (in (derivation->output-path fixed)) + (builder + `(begin + (mkdir %output) + (chdir %output) + (symlink ,in "symlink"))) + (drv (build-expression->derivation + %store + "fixed-rec-user" + builder + #:inputs + `(("fixed" ,fixed))))) + (and (build-derivations %store (list drv)) + (let ((out (derivation->output-path drv))) + (string=? + (readlink (string-append out "/symlink")) + in))))) actual-value: #t result: PASS test-name: build-expression->derivation with #:references-graphs location: /home/jorge/repos/guix/tests/derivations.scm:1099 source: + (test-assert + "build-expression->derivation with #:references-graphs" + (let* ((input (add-text-to-store + %store + "foo" + "hello" + (list %bash %mkdir))) + (builder '(copy-file "input" %output)) + (drv (build-expression->derivation + %store + "references-graphs" + builder + #:references-graphs + `(("input" unquote input)))) + (out (derivation->output-path drv))) + (define (deps path . deps) + (let ((count (length deps))) + (string-append + path + "\n\n" + (number->string count) + "\n" + (string-join (sort deps stringderivation + %store + "original-drv1" + #f + #:guile-for-build + joke)) + (drv2 (build-expression->derivation + %store + "original-drv2" + '(call-with-output-file + %output + (lambda (p) (display "hello" p))))) + (drv3 (build-expression->derivation + %store + "drv-to-remap" + '(let ((in (assoc-ref %build-inputs "in"))) + (copy-file in %output)) + #:inputs + `(("in" ,drv1)) + #:guile-for-build + joke)) + (drv4 (map-derivation + %store + drv3 + `((,drv1 unquote drv2) (,joke unquote good)))) + (out (derivation->output-path drv4))) + (and (build-derivations + %store + (list (pk 'remapped drv4))) + (call-with-input-file out get-string-all)))) ;;; (remapped # /home/jorge/repos/guix/test-tmp/store/9vsn60spp33x4iq51vlmd1vmlzpa83ix-drv-to-remap 5577e29590f0>) expected-value: "hello" actual-value: "hello" result: PASS test-name: map-derivation, sources location: /home/jorge/repos/guix/tests/derivations.scm:1153 source: + (test-equal + "map-derivation, sources" + "hello" + (let* ((script1 + (add-text-to-store %store "fail.sh" "exit 1")) + (script2 + (add-text-to-store + %store + "hi.sh" + "echo -n hello > $out")) + (bash-full + (package-derivation + %store + (@ (gnu packages bash) bash))) + (drv1 (derivation + %store + "drv-to-remap" + (derivation->output-path bash-full) + `("-e" ,script1) + #:inputs + `((,bash-full) (,script1)))) + (drv2 (map-derivation + %store + drv1 + `((,bash-full unquote %bash) + (,script1 unquote script2)))) + (out (derivation->output-path drv2))) + (and (build-derivations + %store + (list (pk 'remapped* drv2))) + (call-with-input-file out get-string-all)))) ;;; (remapped* # /home/jorge/repos/guix/test-tmp/store/l7rxv83lwgp1zhz27d2p3cb89b7ihp6n-drv-to-remap 5577e2517fa0>) expected-value: "hello" actual-value: "hello" result: PASS SKIP: tests/snix ================ test-name: factorize-uri location: /home/jorge/repos/guix/tests/snix.scm:36 source: + (test-assert + "factorize-uri" + (every? + (match-lambda + ((uri version '-> expected) + (equal? (factorize-uri uri version) expected))) + '(("http://example.com/foo.tgz" + "1.0" + -> + "http://example.com/foo.tgz") + ("http://example.com/foo-2.8.tgz" + "2.8" + -> + ("http://example.com/foo-" version ".tgz")) + ("http://example.com/2.8/foo-2.8.tgz" + "2.8" + -> + ("http://example.com/" + version + "/foo-" + version + ".tgz"))))) actual-value: #t result: PASS test-name: nixpkgs->guix-package location: /home/jorge/repos/guix/tests/snix.scm:54 source: + (test-assert + "nixpkgs->guix-package" + (match (nixpkgs->guix-package + %nixpkgs-directory + "guile") + (('package + ('name "guile") + ('version (? string?)) + ('source ('origin _ ...)) + ('build-system _) + ('inputs ('quasiquote (inputs ...))) + ('propagated-inputs ('quasiquote (pinputs ...))) + ('home-page (? string?)) + ('synopsis (? string?)) + ('description (? string?)) + ('license (? symbol?))) + (and (member '("libffi" ,libffi) inputs) + (member '("gmp" ,gmp) pinputs) + #t)) + (x (pk 'fail x #f)))) result: SKIP SKIP: tests/syscalls ==================== test-name: mount, ENOENT location: /home/jorge/repos/guix/tests/syscalls.scm:40 source: + (test-equal + "mount, ENOENT" + ENOENT + (catch 'system-error + (lambda () + (mount "/dev/null" "/does-not-exist" "ext2") + #f) + (compose system-error-errno list))) expected-value: 2 actual-value: 2 result: PASS test-name: umount, ENOENT/EPERM location: /home/jorge/repos/guix/tests/syscalls.scm:48 source: + (test-assert + "umount, ENOENT/EPERM" + (catch 'system-error + (lambda () (umount "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM ENOENT))))) actual-value: (1 2) result: PASS test-name: mount-points location: /home/jorge/repos/guix/tests/syscalls.scm:57 source: + (test-assert + "mount-points" + (any (cute member <> (mount-points)) + '("/" "/proc" "/sys" "/dev"))) actual-value: ("/" "/sys/kernel/security" "/dev/shm" "/run/lock" "/sys/fs/cgroup" "/sys/fs/cgroup/unified" "/sys/fs/cgroup/systemd" "/sys/fs/pstore" "/sys/firmware/efi/efivars" "/sys/fs/cgroup/devices" "/sys/fs/cgroup/net_cls,net_prio" "/sys/fs/cgroup/freezer" "/sys/fs/cgroup/perf_event" "/sys/fs/cgroup/cpu,cpuacct" "/sys/fs/cgroup/pids" "/sys/fs/cgroup/memory" "/sys/fs/cgroup/cpuset" "/sys/fs/cgroup/blkio" "/proc/sys/fs/binfmt_misc" "/dev/mqueue" "/sys/kernel/debug" "/dev/hugepages" "/boot/efi" "/Dados" "/tmp" "/run/user/117" "/run/user/1000" "/run/user/1000/gvfs" "/sys/fs/fuse/connections") result: PASS test-name: swapon, ENOENT/EPERM location: /home/jorge/repos/guix/tests/syscalls.scm:63 source: + (test-assert + "swapon, ENOENT/EPERM" + (catch 'system-error + (lambda () (swapon "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM ENOENT))))) actual-value: (1 2) result: PASS test-name: swapoff, ENOENT/EINVAL/EPERM location: /home/jorge/repos/guix/tests/syscalls.scm:71 source: + (test-assert + "swapoff, ENOENT/EINVAL/EPERM" + (catch 'system-error + (lambda () (swapoff "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM EINVAL ENOENT))))) actual-value: (1 22 2) result: PASS test-name: mkdtemp! location: /home/jorge/repos/guix/tests/syscalls.scm:79 source: + (test-assert + "mkdtemp!" + (let* ((tmp (or (getenv "TMPDIR") "/tmp")) + (dir (mkdtemp! + (string-append tmp "/guix-test-XXXXXX")))) + (and (file-exists? dir) (begin (rmdir dir) #t)))) actual-value: #t result: PASS test-name: statfs, ENOENT location: /home/jorge/repos/guix/tests/syscalls.scm:87 source: + (test-equal + "statfs, ENOENT" + ENOENT + (catch 'system-error + (lambda () (statfs "/does-not-exist")) + (compose system-error-errno list))) expected-value: 2 actual-value: 2 result: PASS test-name: statfs location: /home/jorge/repos/guix/tests/syscalls.scm:94 source: + (test-assert + "statfs" + (let ((fs (statfs "/"))) + (and (file-system? fs) + (> (file-system-block-size fs) 0) + (>= (file-system-blocks-available fs) 0) + (>= (file-system-blocks-free fs) + (file-system-blocks-available fs))))) actual-value: #t result: PASS test-name: clone location: /home/jorge/repos/guix/tests/syscalls.scm:111 source: + (test-assert + "clone" + (match (clone (logior CLONE_NEWUSER SIGCHLD)) + (0 (primitive-exit 42)) + (pid (and (not (equal? + (readlink (user-namespace pid)) + (readlink (user-namespace (getpid))))) + (match (waitpid pid) + ((_ . status) (= 42 (status:exit-val status)))))))) result: SKIP test-name: setns location: /home/jorge/repos/guix/tests/syscalls.scm:124 source: + (test-assert + "setns" + (match (clone (logior CLONE_NEWUSER SIGCHLD)) + (0 (primitive-exit 0)) + (clone-pid + (match (pipe) + ((in . out) + (match (primitive-fork) + (0 + (close in) + (call-with-input-file + (user-namespace clone-pid) + (lambda (port) (setns (port->fdes port) 0))) + (write 'done out) + (close out) + (primitive-exit 0)) + (fork-pid + (close out) + (read in) + (let ((result + (and (equal? + (readlink + (user-namespace clone-pid)) + (readlink + (user-namespace fork-pid)))))) + (waitpid clone-pid) + (waitpid fork-pid) + result)))))))) result: SKIP test-name: pivot-root location: /home/jorge/repos/guix/tests/syscalls.scm:156 source: + (test-equal + "pivot-root" + #t + (match (pipe) + ((in . out) + (match (clone (logior CLONE_NEWUSER CLONE_NEWNS SIGCHLD)) + (0 + (dynamic-wind + (const #t) + (lambda () + (close in) + (call-with-temporary-directory + (lambda (root) + (let ((put-old (string-append root "/real-root"))) + (mount "none" root "tmpfs") + (mkdir put-old) + (call-with-output-file + (string-append root "/test") + (lambda (port) (display "testing\n" port))) + (pivot-root root put-old) + (write (file-exists? "/test") out) + (close out))))) + (lambda () (primitive-exit 0)))) + (pid (close out) + (let ((result (read in))) + (close in) + (and (zero? (match (waitpid pid) + ((_ . status) + (status:exit-val status)))) + (eq? #t result)))))))) result: SKIP test-name: scandir*, ENOENT location: /home/jorge/repos/guix/tests/syscalls.scm:189 source: + (test-equal + "scandir*, ENOENT" + ENOENT + (catch 'system-error + (lambda () (scandir* "/does/not/exist")) + (lambda args (system-error-errno args)))) expected-value: 2 actual-value: 2 result: PASS test-name: scandir*, ASCII file names location: /home/jorge/repos/guix/tests/syscalls.scm:197 source: + (test-equal + "scandir*, ASCII file names" + (scandir + (dirname + (search-path %load-path "guix/base32.scm")) + (const #t) + stringprocedure + int + (dynamic-func "creat" (dynamic-link)) + (list '* int)))) + (creat (string->pointer + (string-append directory "/α") + "UTF-8") + 420) + (creat (string->pointer + (string-append directory "/λ") + "UTF-8") + 420) + (let ((locale (setlocale LC_ALL))) + (dynamic-wind + (lambda () (setlocale LC_ALL "C")) + (lambda () + (match (scandir* directory) + (((names . properties) ...) names))) + (lambda () (setlocale LC_ALL locale)))))))) expected-value: ("." ".." "α" "λ") actual-value: ("." ".." "α" "λ") result: PASS test-name: scandir*, properties location: /home/jorge/repos/guix/tests/syscalls.scm:231 source: + (test-assert + "scandir*, properties" + (let ((directory + (dirname + (search-path %load-path "guix/base32.scm")))) + (every (lambda (entry name) + (match entry + ((name2 . properties) + (and (string=? name2 name) + (let* ((full (string-append directory "/" name)) + (stat (lstat full)) + (inode (assoc-ref properties 'inode)) + (type (assoc-ref properties 'type))) + (and (= inode (stat:ino stat)) + (or (eq? type 'unknown) + (eq? type (stat:type stat))))))))) + (scandir* directory) + (scandir directory (const #t) string (termios-input-speed termios) 0) + (> (termios-output-speed termios) 0)))) result: SKIP test-name: tcsetattr location: /home/jorge/repos/guix/tests/syscalls.scm:499 source: + (test-assert + "tcsetattr" + (let ((first (tcgetattr 0))) + (tcsetattr 0 (tcsetattr-action TCSANOW) first) + (equal? first (tcgetattr 0)))) result: SKIP test-name: terminal-window-size ENOTTY location: /home/jorge/repos/guix/tests/syscalls.scm:504 source: + (test-assert + "terminal-window-size ENOTTY" + (call-with-input-file + "/dev/null" + (lambda (port) + (catch 'system-error + (lambda () (terminal-window-size port)) + (lambda args + (memv (system-error-errno args) + (list ENOTTY EINVAL))))))) actual-value: (25 22) result: PASS test-name: terminal-columns location: /home/jorge/repos/guix/tests/syscalls.scm:515 source: + (test-assert + "terminal-columns" + (> (terminal-columns) 0)) actual-value: #t result: PASS test-name: terminal-columns non-file port location: /home/jorge/repos/guix/tests/syscalls.scm:518 source: + (test-assert + "terminal-columns non-file port" + (> (terminal-columns + (open-input-string + "Join us now, share the software!")) + 0)) actual-value: #t result: PASS test-name: utmpx-entries location: /home/jorge/repos/guix/tests/syscalls.scm:522 source: + (test-assert + "utmpx-entries" + (match (utmpx-entries) + (((? utmpx? entries) ...) + (every (lambda (entry) + (match (utmpx-user entry) + ((? string?) + (or (not (memv (utmpx-login-type entry) + (list (login-type INIT_PROCESS) + (login-type LOGIN_PROCESS) + (login-type USER_PROCESS)))) + (> (utmpx-pid entry) 0))) + (#f #t))) + entries)))) actual-value: #t result: PASS test-name: read-utmpx, EOF location: /home/jorge/repos/guix/tests/syscalls.scm:539 source: + (test-assert + "read-utmpx, EOF" + (eof-object? (read-utmpx (%make-void-port "r")))) actual-value: #t result: PASS test-name: read-utmpx location: /home/jorge/repos/guix/tests/syscalls.scm:544 source: + (test-assert + "read-utmpx" + (let ((result + (call-with-input-file + "/var/run/utmpx" + read-utmpx))) + (or (utmpx? result) (eof-object? result)))) result: SKIP SKIP: tests/gremlin =================== test-name: elf-dynamic-info-needed, executable location: /home/jorge/repos/guix/tests/gremlin.scm:44 source: + (test-assert + "elf-dynamic-info-needed, executable" + (let* ((elf (call-with-input-file %guile-executable read-elf)) + (dyninfo (elf-dynamic-info elf))) + (or (not dyninfo) + (lset<= + string=? + (list (string-append "libguile-" (effective-version)) + "libgc" + "libunistring" + "libffi") + (map (lambda (lib) + (string-take lib (string-contains lib ".so"))) + (elf-dynamic-info-needed dyninfo)))))) result: SKIP test-name: expand-origin location: /home/jorge/repos/guix/tests/gremlin.scm:55 source: + (test-equal + "expand-origin" + '("OOO/../lib" + "OOO" + "../OOO/bar/OOO/baz" + "ORIGIN/foo") + (map (cut expand-origin <> "OOO") + '("$ORIGIN/../lib" + "${ORIGIN}" + "../${ORIGIN}/bar/$ORIGIN/baz" + "ORIGIN/foo"))) expected-value: ("OOO/../lib" "OOO" "../OOO/bar/OOO/baz" "ORIGIN/foo") actual-value: ("OOO/../lib" "OOO" "../OOO/bar/OOO/baz" "ORIGIN/foo") result: PASS SKIP: tests/containers ====================== test-name: call-with-container, exit with 0 when there is no error location: /home/jorge/repos/guix/tests/containers.scm:41 source: + (test-assert + "call-with-container, exit with 0 when there is no error" + (zero? (call-with-container + '() + (const #t) + #:namespaces + '(user)))) result: SKIP test-name: call-with-container, user namespace location: /home/jorge/repos/guix/tests/containers.scm:46 source: + (test-assert + "call-with-container, user namespace" + (zero? (call-with-container + '() + (lambda () + (assert-exit + (and (zero? (getuid)) (zero? (getgid))))) + #:namespaces + '(user)))) result: SKIP test-name: call-with-container, uts namespace location: /home/jorge/repos/guix/tests/containers.scm:55 source: + (test-assert + "call-with-container, uts namespace" + (zero? (call-with-container + '() + (lambda () + (sethostname "test-container") + (primitive-exit 0)) + #:namespaces + '(user uts)))) result: SKIP test-name: call-with-container, pid namespace location: /home/jorge/repos/guix/tests/containers.scm:66 source: + (test-assert + "call-with-container, pid namespace" + (zero? (call-with-container + '() + (lambda () + (match (primitive-fork) + (0 (assert-exit (= 2 (getpid)))) + (pid (primitive-exit + (match (waitpid pid) + ((_ . status) + (status:exit-val status))))))) + #:namespaces + '(user pid)))) result: SKIP test-name: call-with-container, mnt namespace location: /home/jorge/repos/guix/tests/containers.scm:82 source: + (test-assert + "call-with-container, mnt namespace" + (zero? (call-with-container + (list (file-system + (device "none") + (mount-point "/testing") + (type "tmpfs") + (check? #f))) + (lambda () + (assert-exit (file-exists? "/testing"))) + #:namespaces + '(user mnt)))) result: SKIP test-name: call-with-container, mnt namespace, wrong bind mount location: /home/jorge/repos/guix/tests/containers.scm:94 source: + (test-equal + "call-with-container, mnt namespace, wrong bind mount" + `(system-error ,ENOENT) + (catch 'system-error + (lambda () + (call-with-container + (list (file-system + (device "/does-not-exist") + (mount-point "/foo") + (type "none") + (flags '(bind-mount)) + (check? #f))) + (const #t) + #:namespaces + '(user mnt))) + (lambda args + (list 'system-error (system-error-errno args))))) result: SKIP test-name: call-with-container, all namespaces location: /home/jorge/repos/guix/tests/containers.scm:111 source: + (test-assert + "call-with-container, all namespaces" + (zero? (call-with-container + '() + (lambda () (primitive-exit 0))))) result: SKIP test-name: container-excursion location: /home/jorge/repos/guix/tests/containers.scm:118 source: + (test-assert + "container-excursion" + (call-with-temporary-directory + (lambda (root) + (match (list (pipe) (pipe)) + (((start-in . start-out) (end-in . end-out)) + (define (container) + (close end-out) + (close start-in) + (write 'ready start-out) + (close start-out) + (read end-in) + (close end-in)) + (define (namespaces pid) + (let ((pid (number->string pid))) + (map (lambda (ns) + (readlink (string-append "/proc/" pid "/ns/" ns))) + '("user" "ipc" "uts" "net" "pid" "mnt")))) + (let* ((pid (run-container root '() %namespaces 1 container)) + (container-namespaces (namespaces pid)) + (result + (begin + (close start-out) + (read start-in) + (close start-in) + (container-excursion + pid + (lambda () + (match (primitive-fork) + (0 + (assert-exit + (equal? + container-namespaces + (namespaces (getpid))))) + (fork-pid + (match (waitpid fork-pid) + ((_ . status) + (primitive-exit + (status:exit-val + status))))))))))) + (close end-in) + (write 'done end-out) + (close end-out) + (waitpid pid) + (zero? result))))))) result: SKIP test-name: container-excursion, same namespaces location: /home/jorge/repos/guix/tests/containers.scm:175 source: + (test-equal + "container-excursion, same namespaces" + 42 + (container-excursion + (getpid) + (lambda () (primitive-exit 42)))) result: SKIP test-name: container-excursion* location: /home/jorge/repos/guix/tests/containers.scm:184 source: + (test-assert + "container-excursion*" + (call-with-temporary-directory + (lambda (root) + (define (namespaces pid) + (let ((pid (number->string pid))) + (map (lambda (ns) + (readlink (string-append "/proc/" pid "/ns/" ns))) + '("user" "ipc" "uts" "net" "pid" "mnt")))) + (let* ((pid (run-container + root + '() + %namespaces + 1 + (lambda () (sleep 100)))) + (expected (namespaces pid)) + (result + (container-excursion* + pid + (lambda () (namespaces 1))))) + (kill pid SIGKILL) + (equal? result expected))))) result: SKIP test-name: container-excursion*, same namespaces location: /home/jorge/repos/guix/tests/containers.scm:205 source: + (test-equal + "container-excursion*, same namespaces" + 42 + (container-excursion* + (getpid) + (lambda () (* 6 7)))) result: SKIP SKIP: tests/guix-environment-container ====================================== + set -e + guix environment --version guix environment (GNU Guix) 0.14.0.1193-4f34e Copyright (C) 2018 the Guix authors License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. + guile -c '((@@ (guix scripts environment) assert-container-features))' error: cannot create container: unprivileged user cannot create user namespaces error: please set /proc/sys/kernel/unprivileged_userns_clone to "1" + exit 77 SKIP tests/guix-environment-container.sh (exit status: 77)