======================================== GNU Guix UNKNOWN: ./test-suite.log ======================================== # TOTAL: 2022 # PASS: 1973 # SKIP: 46 # XFAIL: 1 # FAIL: 2 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 SKIP: tests/channels ==================== test-name: channel-instance-metadata returns default if .guix-channel does not exist location: /home/bost/dev/guix/tests/channels.scm:117 source: + (test-equal + "channel-instance-metadata returns default if .guix-channel does not exist" + '("/" ()) + (let ((metadata + (channel-instance-metadata instance--boring))) + (list (channel-metadata-directory metadata) + (channel-metadata-dependencies metadata)))) expected-value: ("/" ()) actual-value: ("/" ()) result: PASS test-name: channel-instance-metadata and default dependencies location: /home/bost/dev/guix/tests/channels.scm:123 source: + (test-equal + "channel-instance-metadata and default dependencies" + '() + (channel-metadata-dependencies + (channel-instance-metadata instance--no-deps))) expected-value: () actual-value: () result: PASS test-name: channel-instance-metadata and directory location: /home/bost/dev/guix/tests/channels.scm:127 source: + (test-equal + "channel-instance-metadata and directory" + "/modules" + (channel-metadata-directory + (channel-instance-metadata + instance--sub-directory))) expected-value: "/modules" actual-value: "/modules" result: PASS test-name: channel-instance-metadata rejects unsupported version location: /home/bost/dev/guix/tests/channels.scm:132 source: + (test-equal + "channel-instance-metadata rejects unsupported version" + 1 + (guard (c ((and (message-condition? c) (error-location? c)) + (location-line (error-location c)))) + (channel-instance-metadata + instance--unsupported-version))) expected-value: 1 actual-value: 1 result: PASS test-name: channel-instance-metadata returns location: /home/bost/dev/guix/tests/channels.scm:138 source: + (test-assert + "channel-instance-metadata returns " + (every (@@ (guix channels) channel-metadata?) + (map channel-instance-metadata + (list instance--no-deps + instance--simple + instance--with-dupes)))) actual-value: #t result: PASS test-name: channel-instance-metadata dependencies are channels location: /home/bost/dev/guix/tests/channels.scm:145 source: + (test-assert + "channel-instance-metadata dependencies are channels" + (let ((deps ((@@ (guix channels) + channel-metadata-dependencies) + (channel-instance-metadata instance--simple)))) + (match deps (((? channel? dep)) #t) (_ #f)))) actual-value: #t result: PASS test-name: latest-channel-instances includes channel dependencies location: /home/bost/dev/guix/tests/channels.scm:152 source: + (test-assert + "latest-channel-instances includes channel dependencies" + (let* ((channel (channel (name 'test) (url "test"))) + (test-dir + (channel-instance-checkout instance--simple))) + (mock ((guix git) + update-cached-checkout + (lambda* (url #:key ref starting-commit) + (match url + ("test" (values test-dir "caf3cabba9e" #f)) + (_ (values + (channel-instance-checkout instance--no-deps) + "abcde1234" + #f))))) + (with-store + store + (let ((instances + (latest-channel-instances store (list channel)))) + (and (eq? 2 (length instances)) + (lset= eq? + '(test test-channel) + (map (compose + channel-name + channel-instance-channel) + instances)))))))) actual-value: #t result: PASS test-name: latest-channel-instances excludes duplicate channel dependencies location: /home/bost/dev/guix/tests/channels.scm:171 source: + (test-assert + "latest-channel-instances excludes duplicate channel dependencies" + (let* ((channel (channel (name 'test) (url "test"))) + (test-dir + (channel-instance-checkout instance--with-dupes))) + (mock ((guix git) + update-cached-checkout + (lambda* (url #:key ref starting-commit) + (match url + ("test" (values test-dir "caf3cabba9e" #f)) + (_ (values + (channel-instance-checkout instance--no-deps) + "abcde1234" + #f))))) + (with-store + store + (let ((instances + (latest-channel-instances store (list channel)))) + (and (= 2 (length instances)) + (lset= eq? + '(test test-channel) + (map (compose + channel-name + channel-instance-channel) + instances)) + (find (lambda (instance) + (and (eq? (channel-name + (channel-instance-channel instance)) + 'test-channel) + (string=? + (channel-commit + (channel-instance-channel instance)) + "abc1234"))) + instances))))))) actual-value: #< channel: #< name: test-channel url: "https://example.com/test-channel" branch: "master" commit: "abc1234" introduction: #f location: ((filename . "guix/channels.scm") (line . 261) (column . 19))> commit: "abcde1234" checkout: "/home/bost/dev/guix/test-tmp/store/2f93jq1zm9wcnj7jc91ayhz686yp6ynp-test-channel-abcde12"> result: PASS test-name: latest-channel-instances #:validate-pull location: /home/bost/dev/guix/tests/channels.scm:201 source: + (test-equal + "latest-channel-instances #:validate-pull" + 'descendant + (let/ec + return + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "first commit") + (add "b.scm" "#t") + (commit "second commit")) + (with-repository + directory + repository + (let* ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (spec (channel + (url (string-append "file://" directory)) + (name 'foo))) + (new (channel + (inherit spec) + (commit (oid->string (commit-id commit2))))) + (old (channel + (inherit spec) + (commit (oid->string (commit-id commit1)))))) + (define (validate-pull channel current commit relation) + (return + (and (eq? channel old) + (string=? + (oid->string (commit-id commit2)) + current) + (string=? + (oid->string (commit-id commit1)) + commit) + relation))) + (with-store + store + (latest-channel-instances + store + (list old) + #:current-channels + (list new) + #:validate-pull + validate-pull))))))) result: SKIP test-name: channel-instances->manifest location: /home/bost/dev/guix/tests/channels.scm:234 source: + (test-assert + "channel-instances->manifest" + (let* ((spec (lambda deps + `(channel + (version 0) + (dependencies + ,@(map (lambda (dep) + `(channel + (name ,dep) + (url "http://example.org"))) + deps))))) + (guix (make-instance #:name 'guix)) + (instance0 (make-instance #:name 'a)) + (instance1 + (make-instance #:name 'b #:spec (spec 'a))) + (instance2 + (make-instance #:name 'c #:spec (spec 'b))) + (instance3 + (make-instance #:name 'd #:spec (spec 'c 'a)))) + (%graft? #f) + (let ((source (channel-instance-checkout guix))) + (mkdir (string-append source "/build-aux")) + (call-with-output-file + (string-append + source + "/build-aux/build-self.scm") + (lambda (port) + (write '(begin + (use-modules (guix) (gnu packages bootstrap)) + (lambda _ (package->derivation %bootstrap-guile))) + port)))) + (with-store + store + (let () + (define manifest + (run-with-store + store + (channel-instances->manifest + (list guix + instance0 + instance1 + instance2 + instance3)))) + (define entries (manifest-entries manifest)) + (define (depends? drv in out) + (let ((set (list->set + (requisites + store + (list (derivation-file-name drv))))) + (in (map derivation-file-name in)) + (out (map derivation-file-name out))) + (and (every (cut set-contains? set <>) in) + (not (any (cut set-contains? set <>) out))))) + (define (lookup name) + (run-with-store + store + (lower-object + (manifest-entry-item + (manifest-lookup + manifest + (manifest-pattern (name name))))))) + (let ((drv-guix (lookup "guix")) + (drv0 (lookup "a")) + (drv1 (lookup "b")) + (drv2 (lookup "c")) + (drv3 (lookup "d"))) + (and (depends? + drv-guix + '() + (list drv0 drv1 drv2 drv3)) + (depends? drv0 (list) (list drv1 drv2 drv3)) + (depends? drv1 (list drv0) (list drv2 drv3)) + (depends? drv2 (list drv1) (list drv3)) + (depends? drv3 (list drv2 drv0) (list)))))))) actual-value: #t result: PASS test-name: channel-news, no news location: /home/bost/dev/guix/tests/channels.scm:311 source: + (test-equal + "channel-news, no news" + '() + (with-temporary-git-repository + directory + '((add "a.txt" "A") (commit "the commit")) + (with-repository + directory + repository + (let ((channel + (channel + (url (string-append "file://" directory)) + (name 'foo))) + (latest (reference-name->oid repository "HEAD"))) + (channel-news-for-commit + channel + (oid->string latest)))))) result: SKIP test-name: channel-news, one entry location: /home/bost/dev/guix/tests/channels.scm:323 source: + (test-assert + "channel-news, one entry" + (with-temporary-git-repository + directory + `((add ".guix-channel" + ,(object->string + '(channel (version 0) (news-file "news.scm")))) + (commit "first commit") + (add "src/a.txt" "A") + (commit "second commit") + (tag "tag-for-first-news-entry") + (add "news.scm" + ,(lambda (repository) + (let ((previous + (reference-name->oid repository "HEAD"))) + (object->string + `(channel-news + (version 0) + (entry (commit ,(oid->string previous)) + (title (en "New file!") (eo "Nova dosiero!")) + (body (en "Yeah, a.txt.")))))))) + (commit "third commit") + (add "src/b.txt" "B") + (commit "fourth commit") + (add "news.scm" + ,(lambda (repository) + (let ((second + (commit-id + (find-commit repository "second commit"))) + (previous + (reference-name->oid repository "HEAD"))) + (object->string + `(channel-news + (version 0) + (entry (commit ,(oid->string previous)) + (title (en "Another file!")) + (body (en "Yeah, b.txt."))) + (entry (tag "tag-for-first-news-entry") + (title (en "Old news.") (eo "Malnova?oj.")) + (body (en "For a.txt")))))))) + (commit "fifth commit")) + (with-repository + directory + repository + (define (find-commit* message) + (oid->string + (commit-id (find-commit repository message)))) + (let ((channel + (channel + (url (string-append "file://" directory)) + (name 'foo))) + (commit1 (find-commit* "first commit")) + (commit2 (find-commit* "second commit")) + (commit3 (find-commit* "third commit")) + (commit4 (find-commit* "fourth commit")) + (commit5 (find-commit* "fifth commit"))) + (and (null? (channel-news-for-commit channel commit2)) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit5)) + (list commit2 commit4)) + (lset= equal? + (map channel-news-entry-title + (channel-news-for-commit channel commit5)) + '((("en" . "Another file!")) + (("en" . "Old news.") ("eo" . "Malnova?oj.")))) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit3)) + (list commit2)) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit3 commit1)) + (list commit2)) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit5 commit3)) + (list commit4)) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit5 commit1)) + (list commit4 commit2)) + (lset= equal? + (map channel-news-entry-tag + (channel-news-for-commit channel commit5 commit1)) + '(#f "tag-for-first-news-entry"))))))) result: SKIP test-name: channel-news, annotated tag location: /home/bost/dev/guix/tests/channels.scm:411 source: + (test-assert + "channel-news, annotated tag" + (with-temporary-git-repository + directory + `((add ".guix-channel" + ,(object->string + '(channel (version 0) (news-file "news.scm")))) + (add "src/a.txt" "A") + (commit "first commit") + (tag "tag-for-first-news-entry" + "This is an annotated tag.") + (add "news.scm" + ,(lambda (repository) + (let ((previous + (reference-name->oid repository "HEAD"))) + (object->string + `(channel-news + (version 0) + (entry (tag "tag-for-first-news-entry") + (title (en "New file!")) + (body (en "Yeah, a.txt.")))))))) + (commit "second commit")) + (with-repository + directory + repository + (define (find-commit* message) + (oid->string + (commit-id (find-commit repository message)))) + (let ((channel + (channel + (url (string-append "file://" directory)) + (name 'foo))) + (commit1 (find-commit* "first commit")) + (commit2 (find-commit* "second commit"))) + (and (null? (channel-news-for-commit channel commit1)) + (lset= equal? + (map channel-news-entry-title + (channel-news-for-commit channel commit2)) + '((("en" . "New file!")))) + (lset= string=? + (map channel-news-entry-tag + (channel-news-for-commit channel commit2)) + (list "tag-for-first-news-entry")) + (lset= string=? + (map channel-news-entry-commit + (channel-news-for-commit channel commit2)) + (list commit1))))))) result: SKIP test-name: latest-channel-instances, missing introduction for 'guix' location: /home/bost/dev/guix/tests/channels.scm:458 source: + (test-assert + "latest-channel-instances, missing introduction for 'guix'" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "first commit") + (add "b.scm" "#t") + (commit "second commit")) + (with-repository + directory + repository + (let* ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (channel + (channel + (url (string-append "file://" directory)) + (name 'guix)))) + (guard (c ((formatted-message? c) + (->bool + (string-contains + (formatted-message-string c) + "introduction")))) + (with-store + store + (latest-channel-instances store (list channel)) + #f)))))) result: SKIP test-name: authenticate-channel, wrong first commit signer location: /home/bost/dev/guix/tests/channels.scm:479 source: + (test-equal + "authenticate-channel, wrong first commit signer" + #t + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519bis-public-key-file + %ed25519bis-secret-key-file) + (with-temporary-git-repository + directory + `((add ".guix-channel" + ,(object->string + '(channel + (version 0) + (keyring-reference "master")))) + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Charlie")))))) + (add "signer.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "random" ,(random-text)) + (commit + "second commit" + (signer + ,(key-fingerprint %ed25519-public-key-file)))) + (with-repository + directory + repository + (let* ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (intro (make-channel-introduction + (commit-id-string commit1) + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519bis-public-key-file)))) + (channel + (channel + (name 'example) + (url (string-append "file://" directory)) + (introduction intro)))) + (guard (c ((formatted-message? c) + (and (string-contains + (formatted-message-string c) + "initial commit") + (equal? + (formatted-message-arguments c) + (list (oid->string (commit-id commit1)) + (key-fingerprint %ed25519-public-key-file) + (key-fingerprint + %ed25519bis-public-key-file)))))) + (authenticate-channel + channel + directory + (commit-id-string commit2) + #:keyring-reference-prefix + "") + 'failed)))))) result: SKIP test-name: authenticate-channel, .guix-authorizations location: /home/bost/dev/guix/tests/channels.scm:529 source: + (test-equal + "authenticate-channel, .guix-authorizations" + #t + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519bis-public-key-file + %ed25519bis-secret-key-file) + (with-temporary-git-repository + directory + `((add ".guix-channel" + ,(object->string + '(channel + (version 0) + (keyring-reference "channel-keyring")))) + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Charlie")))))) + (commit "zeroth commit") + (add "a.txt" "A") + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "b.txt" "B") + (commit + "second commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "c.txt" "C") + (commit + "third commit" + (signer + ,(key-fingerprint %ed25519bis-public-key-file))) + (branch "channel-keyring") + (checkout "channel-keyring") + (add "signer.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (add "other.key" + ,(call-with-input-file + %ed25519bis-public-key-file + get-string-all)) + (commit "keyring commit") + (checkout "master")) + (with-repository + directory + repository + (let* ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (commit3 (find-commit repository "third")) + (intro (make-channel-introduction + (commit-id-string commit1) + (openpgp-public-key-fingerprint + (read-openpgp-packet %ed25519-public-key-file)))) + (channel + (channel + (name 'example) + (url (string-append "file://" directory)) + (introduction intro)))) + (and (authenticate-channel + channel + directory + (commit-id-string commit2) + #:keyring-reference-prefix + "") + (guard (c ((unauthorized-commit-error? c) + (and (oid=? (git-authentication-error-commit c) + (commit-id commit3)) + (bytevector=? + (openpgp-public-key-fingerprint + (unauthorized-commit-error-signing-key c)) + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519bis-public-key-file)))))) + (authenticate-channel + channel + directory + (commit-id-string commit3) + #:keyring-reference-prefix + "") + 'failed))))))) result: SKIP test-name: latest-channel-instances, authenticate dependency location: /home/bost/dev/guix/tests/channels.scm:598 source: + (test-equal + "latest-channel-instances, authenticate dependency" + #t + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (with-temporary-git-repository + dependency-directory + `((add ".guix-channel" + ,(object->string + '(channel + (version 0) + (keyring-reference "master")))) + (add ".guix-authorizations" + ,(object->string `(authorizations (version 0) ()))) + (add "signer.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (commit + "zeroth commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "foo.txt" "evil") + (commit "unsigned commit")) + (with-repository + dependency-directory + dependency + (let* ((commit0 (find-commit dependency "zeroth")) + (commit1 (find-commit dependency "unsigned")) + (intro `(channel-introduction + (version 0) + (commit ,(commit-id-string commit0)) + (signer + ,(openpgp-format-fingerprint + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519-public-key-file))))))) + (with-temporary-git-repository + directory + `((add ".guix-channel" + ,(object->string + `(channel + (version 0) + (dependencies + (channel + (name test-channel) + (url ,dependency-directory) + (introduction ,intro)))))) + (commit "single commit")) + (let ((channel (channel (name 'test) (url directory)))) + (guard (c ((unsigned-commit-error? c) + (oid=? (git-authentication-error-commit c) + (commit-id commit1)))) + (with-store + store + (latest-channel-instances store (list channel)) + 'failed))))))))) result: SKIP Updating channel 'test' from Git repository at 'test'... Updating channel 'test-channel' from Git repository at 'https://example.com/test-channel'... Updating channel 'test' from Git repository at 'test'... Updating channel 'test-channel' from Git repository at 'https://example.com/test-channel'... Updating channel 'test-channel' from Git repository at 'https://example.com/test-channel'... SKIP: tests/cpio ================ test-name: file->cpio-header + write-cpio-header + read-cpio-header location: /home/bost/dev/guix/tests/cpio.scm:37 source: + (test-assert + "file->cpio-header + write-cpio-header + read-cpio-header" + (let* ((file (search-path %load-path "guix.scm")) + (header (file->cpio-header file))) + (call-with-values + (lambda () (open-bytevector-output-port)) + (lambda (port get-bv) + (write-cpio-header header port) + (let ((port (open-bytevector-input-port (get-bv)))) + (equal? header (read-cpio-header port))))))) actual-value: #t result: PASS test-name: bit-identical to GNU cpio's output location: /home/bost/dev/guix/tests/cpio.scm:49 source: + (test-assert + "bit-identical to GNU cpio's output" + (call-with-temporary-output-file + (lambda (link _) + (delete-file link) + (symlink "chbouib" link) + (let ((files (cons* "/" + (canonicalize-path + (dirname (search-path %load-path "guix.scm"))) + link + (map (compose + canonicalize-path + (cut search-path %load-path <>)) + '("guix.scm" + "guix/build/syscalls.scm" + "guix/packages.scm"))))) + (call-with-temporary-output-file + (lambda (ref-file _) + (let ((pipe (open-pipe* + OPEN_WRITE + %cpio-program + "-o" + "-O" + ref-file + "-H" + "newc" + "--null"))) + (for-each + (lambda (file) (format pipe "~a\x00" file)) + files) + (and (zero? (close-pipe pipe)) + (call-with-temporary-output-file + (lambda (file port) + (write-cpio-archive files port) + (close-port port) + (or (file=? ref-file file) + (throw 'cpio-archives-differ + files + ref-file + file + (stat:size (stat ref-file)) + (stat:size (stat file)))))))))))))) result: SKIP SKIP: tests/crate ================= test-name: guix-package->crate-name location: /home/bost/dev/guix/tests/crate.scm:326 source: + (test-equal + "guix-package->crate-name" + "rustc-serialize" + (guix-package->crate-name + (dummy-package + "rust-rustc-serialize" + (source + (dummy-origin + (uri (crate-uri "rustc-serialize" "1.0"))))))) expected-value: "rustc-serialize" actual-value: "rustc-serialize" result: PASS test-name: crate->guix-package location: /home/bost/dev/guix/tests/crate.scm:335 source: + (test-assert + "crate->guix-package" + (mock ((guix http-client) + http-fetch + (lambda (url . rest) + (match url + ("https://crates.io/api/v1/crates/foo" + (open-input-string test-foo-crate)) + ("https://crates.io/api/v1/crates/foo/1.0.3/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/foo/1.0.3/dependencies" + (open-input-string test-foo-dependencies)) + ("https://crates.io/api/v1/crates/leaf-alice" + (open-input-string test-leaf-alice-crate)) + ("https://crates.io/api/v1/crates/leaf-alice/0.7.5/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/leaf-alice/0.7.5/dependencies" + (open-input-string test-leaf-alice-dependencies)) + (_ (error "Unexpected URL: " url))))) + (match (crate->guix-package "foo") + ((define-public 'rust-foo-1 + (package + (name "rust-foo") + (version "1.0.3") + (source + (origin + (method url-fetch) + (uri (crate-uri "foo" 'version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 (base32 (? string? hash))))) + (build-system 'cargo-build-system) + (arguments + ('quasiquote + (#:skip-build? + #t + #:cargo-inputs + (("rust-leaf-alice" + ('unquote 'rust-leaf-alice-0.7)))))) + (home-page "http://example.com") + (synopsis "summary") + (description "summary") + (license (list license:expat license:asl2.0)))) + (string=? test-source-hash hash)) + (x (pk 'fail x #f))))) result: SKIP test-name: cargo-recursive-import location: /home/bost/dev/guix/tests/crate.scm:388 source: + (test-assert + "cargo-recursive-import" + (mock ((guix http-client) + http-fetch + (lambda (url . rest) + (match url + ("https://crates.io/api/v1/crates/root" + (open-input-string test-root-crate)) + ("https://crates.io/api/v1/crates/root/1.0.4/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/root/1.0.4/dependencies" + (open-input-string test-root-dependencies)) + ("https://crates.io/api/v1/crates/intermediate-a" + (open-input-string test-intermediate-a-crate)) + ("https://crates.io/api/v1/crates/intermediate-a/1.0.42/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/intermediate-a/1.0.42/dependencies" + (open-input-string + test-intermediate-a-dependencies)) + ("https://crates.io/api/v1/crates/intermediate-b" + (open-input-string test-intermediate-b-crate)) + ("https://crates.io/api/v1/crates/intermediate-b/1.2.3/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/intermediate-b/1.2.3/dependencies" + (open-input-string + test-intermediate-b-dependencies)) + ("https://crates.io/api/v1/crates/leaf-alice" + (open-input-string test-leaf-alice-crate)) + ("https://crates.io/api/v1/crates/leaf-alice/0.7.5/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/leaf-alice/0.7.5/dependencies" + (open-input-string test-leaf-alice-dependencies)) + ("https://crates.io/api/v1/crates/leaf-bob" + (open-input-string test-leaf-bob-crate)) + ("https://crates.io/api/v1/crates/leaf-bob/3.0.1/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/leaf-bob/3.0.1/dependencies" + (open-input-string test-leaf-bob-dependencies)) + (_ (error "Unexpected URL: " url))))) + (match (crate-recursive-import "root") + (((define-public 'rust-leaf-alice-0.7 + (package + (name "rust-leaf-alice") + (version "0.7.5") + (source + (origin + (method url-fetch) + (uri (crate-uri "leaf-alice" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 (base32 (? string? hash))))) + (build-system cargo-build-system) + (arguments ('quasiquote (#:skip-build? #t))) + (home-page "http://example.com") + (synopsis "summary") + (description "summary") + (license (list license:expat license:asl2.0)))) + (define-public 'rust-leaf-bob-3 + (package + (name "rust-leaf-bob") + (version "3.0.1") + (source + (origin + (method url-fetch) + (uri (crate-uri "leaf-bob" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 (base32 (? string? hash))))) + (build-system cargo-build-system) + (arguments ('quasiquote (#:skip-build? #t))) + (home-page "http://example.com") + (synopsis "summary") + (description "summary") + (license (list license:expat license:asl2.0)))) + (define-public 'rust-intermediate-b-1 + (package + (name "rust-intermediate-b") + (version "1.2.3") + (source + (origin + (method url-fetch) + (uri (crate-uri "intermediate-b" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 (base32 (? string? hash))))) + (build-system cargo-build-system) + (arguments + ('quasiquote + (#:skip-build? + #t + #:cargo-inputs + (("rust-leaf-bob" ('unquote rust-leaf-bob-3)))))) + (home-page "http://example.com") + (synopsis "summary") + (description "summary") + (license (list license:expat license:asl2.0)))) + (define-public 'rust-intermediate-a-1 + (package + (name "rust-intermediate-a") + (version "1.0.42") + (source + (origin + (method url-fetch) + (uri (crate-uri "intermediate-a" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 (base32 (? string? hash))))) + (build-system cargo-build-system) + (arguments + ('quasiquote + (#:skip-build? + #t + #:cargo-inputs + (("rust-intermediate-b" + ('unquote rust-intermediate-b-1)) + ("rust-leaf-alice" + ('unquote 'rust-leaf-alice-0.7)) + ("rust-leaf-bob" ('unquote rust-leaf-bob-3)))))) + (home-page "http://example.com") + (synopsis "summary") + (description "summary") + (license (list license:expat license:asl2.0)))) + (define-public 'rust-root-1 + (package + (name "rust-root") + (version "1.0.4") + (source + (origin + (method url-fetch) + (uri (crate-uri "root" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 (base32 (? string? hash))))) + (build-system cargo-build-system) + (arguments + ('quasiquote + (#:cargo-inputs + (("rust-intermediate-a" + ('unquote rust-intermediate-a-1)) + ("rust-intermediate-b" + ('unquote rust-intermediate-b-1)) + ("rust-leaf-alice" + ('unquote 'rust-leaf-alice-0.7)) + ("rust-leaf-bob" ('unquote rust-leaf-bob-3)))))) + (home-page "http://example.com") + (synopsis "summary") + (description "summary") + (license (list license:expat license:asl2.0))))) + #t) + (x (pk 'fail x #f))))) result: SKIP test-name: licenses: MIT OR Apache-2.0 location: /home/bost/dev/guix/tests/crate.scm:562 source: + (test-equal + "licenses: MIT OR Apache-2.0" + '(license:expat license:asl2.0) + (string->license "MIT OR Apache-2.0")) expected-value: (license:expat license:asl2.0) actual-value: (license:expat license:asl2.0) result: PASS test-name: licenses: Apache-2.0 / MIT location: /home/bost/dev/guix/tests/crate.scm:566 source: + (test-equal + "licenses: Apache-2.0 / MIT" + '(license:asl2.0 license:expat) + (string->license "Apache-2.0 / MIT")) expected-value: (license:asl2.0 license:expat) actual-value: (license:asl2.0 license:expat) result: PASS test-name: licenses: Apache-2.0 WITH LLVM-exception location: /home/bost/dev/guix/tests/crate.scm:570 source: + (test-equal + "licenses: Apache-2.0 WITH LLVM-exception" + '(license:asl2.0 unknown-license!) + (string->license + "Apache-2.0 WITH LLVM-exception")) expected-value: (license:asl2.0 unknown-license!) actual-value: (license:asl2.0 unknown-license!) result: PASS test-name: licenses: MIT/Apache-2.0 AND BSD-2-Clause location: /home/bost/dev/guix/tests/crate.scm:574 source: + (test-equal + "licenses: MIT/Apache-2.0 AND BSD-2-Clause" + '(license:expat license:asl2.0 unknown-license!) + (string->license + "MIT/Apache-2.0 AND BSD-2-Clause")) expected-value: (license:expat license:asl2.0 unknown-license!) actual-value: (license:expat license:asl2.0 unknown-license!) result: PASS test-name: licenses: MIT/Apache-2.0 location: /home/bost/dev/guix/tests/crate.scm:578 source: + (test-equal + "licenses: MIT/Apache-2.0" + '(license:expat license:asl2.0) + (string->license "MIT/Apache-2.0")) expected-value: (license:expat license:asl2.0) actual-value: (license:expat license:asl2.0) result: PASS test-name: self-test: rust-docopt 0.8.x is gone, please adjust the test case location: /home/bost/dev/guix/tests/crate.scm:619 source: + (test-assert + "self-test: rust-docopt 0.8.x is gone, please adjust the test case" + (not (null? (find-packages-by-name "rust-docopt" "0.8")))) actual-value: #t result: PASS test-name: cargo-recursive-import-hoors-existing-packages location: /home/bost/dev/guix/tests/crate.scm:623 source: + (test-assert + "cargo-recursive-import-hoors-existing-packages" + (mock ((guix http-client) + http-fetch + (lambda (url . rest) + (match url + ("https://crates.io/api/v1/crates/doctool" + (open-input-string test-doctool-crate)) + ("https://crates.io/api/v1/crates/doctool/2.2.2/download" + (set! test-source-hash + (bytevector->nix-base32-string + (sha256 + (string->bytevector "empty file\n" "utf-8")))) + (open-input-string "empty file\n")) + ("https://crates.io/api/v1/crates/doctool/2.2.2/dependencies" + (open-input-string test-doctool-dependencies)) + (_ (error "Unexpected URL: " url))))) + (match (crate-recursive-import "doctool") + (((define-public 'rust-doctool-2 + (package + (name "rust-doctool") + (version "2.2.2") + (source + (origin + (method url-fetch) + (uri (crate-uri "doctool" version)) + (file-name + (string-append name "-" version ".tar.gz")) + (sha256 (base32 (? string? hash))))) + (build-system cargo-build-system) + (arguments + ('quasiquote + (#:cargo-inputs + (("rust-docopt" ('unquote 'rust-docopt-0.8)))))) + (home-page "http://example.com") + (synopsis "summary") + (description "summary") + (license (list license:expat license:asl2.0))))) + #t) + (x (pk 'fail x #f))))) result: SKIP SKIP: tests/git =============== test-name: commit-difference, linear history location: /home/bost/dev/guix/tests/git.scm:34 source: + (test-assert + "commit-difference, linear history" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "first commit") + (add "b.txt" "B") + (commit "second commit") + (add "c.txt" "C") + (commit "third commit") + (add "d.txt" "D") + (commit "fourth commit")) + (with-repository + directory + repository + (let ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (commit3 (find-commit repository "third")) + (commit4 (find-commit repository "fourth"))) + (and (lset= eq? + (commit-difference commit4 commit1) + (list commit2 commit3 commit4)) + (lset= eq? + (commit-difference commit4 commit2) + (list commit3 commit4)) + (equal? + (commit-difference commit3 commit2) + (list commit3)) + (null? (commit-difference commit1 commit4))))))) result: SKIP test-name: commit-difference, fork location: /home/bost/dev/guix/tests/git.scm:61 source: + (test-assert + "commit-difference, fork" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "first commit") + (branch "devel") + (checkout "devel") + (add "devel/1.txt" "1") + (commit "first devel commit") + (add "devel/2.txt" "2") + (commit "second devel commit") + (checkout "master") + (add "b.txt" "B") + (commit "second commit") + (add "c.txt" "C") + (commit "third commit") + (merge "devel" "merge") + (add "d.txt" "D") + (commit "fourth commit")) + (with-repository + directory + repository + (let ((master1 (find-commit repository "first commit")) + (master2 + (find-commit repository "second commit")) + (master3 (find-commit repository "third commit")) + (master4 + (find-commit repository "fourth commit")) + (devel1 (find-commit repository "first devel")) + (devel2 (find-commit repository "second devel")) + (merge (find-commit repository "merge"))) + (and (equal? + (commit-difference master4 merge) + (list master4)) + (lset= eq? + (commit-difference master3 master1) + (list master3 master2)) + (lset= eq? + (commit-difference devel2 master1) + (list devel2 devel1)) + (lset= eq? + (commit-difference master4 master2) + (list master4 merge master3 devel1 devel2))))))) result: SKIP test-name: commit-difference, excluded commits location: /home/bost/dev/guix/tests/git.scm:101 source: + (test-assert + "commit-difference, excluded commits" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "first commit") + (add "b.txt" "B") + (commit "second commit") + (add "c.txt" "C") + (commit "third commit") + (add "d.txt" "D") + (commit "fourth commit") + (add "e.txt" "E") + (commit "fifth commit")) + (with-repository + directory + repository + (let ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (commit3 (find-commit repository "third")) + (commit4 (find-commit repository "fourth")) + (commit5 (find-commit repository "fifth"))) + (and (lset= eq? + (commit-difference + commit4 + commit1 + (list commit2)) + (list commit3 commit4)) + (lset= eq? + (commit-difference + commit4 + commit1 + (list commit3)) + (list commit4)) + (null? (commit-difference + commit4 + commit1 + (list commit5)))))))) result: SKIP test-name: commit-relation location: /home/bost/dev/guix/tests/git.scm:126 source: + (test-equal + "commit-relation" + '(self ancestor + descendant + unrelated + unrelated + ancestor + descendant + ancestor + descendant) + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "first commit") + (branch "hack") + (checkout "hack") + (add "1.txt" "1") + (commit "branch commit") + (checkout "master") + (add "b.txt" "B") + (commit "second commit") + (add "c.txt" "C") + (commit "third commit") + (merge "hack" "merge")) + (with-repository + directory + repository + (let ((master1 (find-commit repository "first")) + (master2 (find-commit repository "second")) + (master3 (find-commit repository "third")) + (branch1 (find-commit repository "branch")) + (merge (find-commit repository "merge"))) + (list (commit-relation master3 master3) + (commit-relation master1 master3) + (commit-relation master3 master1) + (commit-relation master2 branch1) + (commit-relation branch1 master2) + (commit-relation branch1 merge) + (commit-relation merge branch1) + (commit-relation master1 merge) + (commit-relation merge master1)))))) result: SKIP test-name: remote-refs location: /home/bost/dev/guix/tests/git.scm:166 source: + (test-equal + "remote-refs" + '("refs/heads/develop" + "refs/heads/master" + "refs/tags/v1.0" + "refs/tags/v1.1") + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "v1.0" "release-1.0") + (branch "develop") + (checkout "develop") + (add "b.txt" "B") + (commit "Second commit") + (tag "v1.1" "release-1.1")) + (remote-refs directory))) result: SKIP test-name: remote-refs: only tags location: /home/bost/dev/guix/tests/git.scm:181 source: + (test-equal + "remote-refs: only tags" + '("refs/tags/v1.0" "refs/tags/v1.1") + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "v1.0" "Release 1.0") + (add "b.txt" "B") + (commit "Second commit") + (tag "v1.1" "Release 1.1")) + (remote-refs directory #:tags? #t))) result: SKIP SKIP: tests/git-authenticate ============================ test-name: unsigned commits location: /home/bost/dev/guix/tests/git-authenticate.scm:43 source: + (test-assert + "unsigned commits" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "first commit") + (add "b.txt" "B") + (commit "second commit")) + (with-repository + directory + repository + (let ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second"))) + (guard (c ((unsigned-commit-error? c) + (oid=? (git-authentication-error-commit c) + (commit-id commit1)))) + (authenticate-commits + repository + (list commit1 commit2) + #:keyring-reference + "master") + 'failed))))) result: SKIP test-name: signed commits, SHA1 signature location: /home/bost/dev/guix/tests/git-authenticate.scm:60 source: + (test-assert + "signed commits, SHA1 signature" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (call-with-output-file + (string-append (getenv "GNUPGHOME") "/gpg.conf") + (lambda (port) (display "digest-algo sha1" port))) + (with-temporary-git-repository + directory + `((add "a.txt" "A") + (add "signer.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Charlie")))))) + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file)))) + (with-repository + directory + repository + (let ((commit (find-commit repository "first"))) + (guard (c ((unsigned-commit-error? c) + (oid=? (git-authentication-error-commit c) + (commit-id commit)))) + (authenticate-commits + repository + (list commit) + #:keyring-reference + "master") + 'failed)))))) result: SKIP test-name: signed commits, default authorizations location: /home/bost/dev/guix/tests/git-authenticate.scm:89 source: + (test-assert + "signed commits, default authorizations" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (with-temporary-git-repository + directory + `((add "signer.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (commit "zeroth commit") + (add "a.txt" "A") + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "b.txt" "B") + (commit + "second commit" + (signer + ,(key-fingerprint %ed25519-public-key-file)))) + (with-repository + directory + repository + (let ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second"))) + (authenticate-commits + repository + (list commit1 commit2) + #:default-authorizations + (list (openpgp-public-key-fingerprint + (read-openpgp-packet %ed25519-public-key-file))) + #:keyring-reference + "master")))))) result: SKIP test-name: signed commits, .guix-authorizations location: /home/bost/dev/guix/tests/git-authenticate.scm:113 source: + (test-assert + "signed commits, .guix-authorizations" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (with-temporary-git-repository + directory + `((add "signer.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Charlie")))))) + (commit "zeroth commit") + (add "a.txt" "A") + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add ".guix-authorizations" + ,(object->string `(authorizations (version 0) ()))) + (commit + "second commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "b.txt" "B") + (commit + "third commit" + (signer + ,(key-fingerprint %ed25519-public-key-file)))) + (with-repository + directory + repository + (let ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (commit3 (find-commit repository "third"))) + (and (authenticate-commits + repository + (list commit1 commit2) + #:keyring-reference + "master") + (guard (c ((unauthorized-commit-error? c) + (and (oid=? (git-authentication-error-commit c) + (commit-id commit3)) + (bytevector=? + (openpgp-public-key-fingerprint + (unauthorized-commit-error-signing-key c)) + (openpgp-public-key-fingerprint + (read-openpgp-packet + %ed25519-public-key-file)))))) + (authenticate-commits + repository + (list commit1 commit2 commit3) + #:keyring-reference + "master") + 'failed))))))) result: SKIP test-name: signed commits, .guix-authorizations, unauthorized merge location: /home/bost/dev/guix/tests/git-authenticate.scm:161 source: + (test-assert + "signed commits, .guix-authorizations, unauthorized merge" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519bis-public-key-file + %ed25519bis-secret-key-file) + (with-temporary-git-repository + directory + `((add "signer1.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (add "signer2.key" + ,(call-with-input-file + %ed25519bis-public-key-file + get-string-all)) + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Alice")))))) + (commit "zeroth commit") + (add "a.txt" "A") + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (branch "devel") + (checkout "devel") + (add "devel/1.txt" "1") + (commit + "first devel commit" + (signer + ,(key-fingerprint %ed25519bis-public-key-file))) + (checkout "master") + (add "b.txt" "B") + (commit + "second commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (merge "devel" + "merge" + (signer + ,(key-fingerprint %ed25519-public-key-file)))) + (with-repository + directory + repository + (let ((master1 (find-commit repository "first commit")) + (master2 + (find-commit repository "second commit")) + (devel1 + (find-commit repository "first devel commit")) + (merge (find-commit repository "merge"))) + (define (correct? c commit) + (and (oid=? (git-authentication-error-commit c) + (commit-id commit)) + (bytevector=? + (openpgp-public-key-fingerprint + (unauthorized-commit-error-signing-key c)) + (openpgp-public-key-fingerprint + (read-openpgp-packet %ed25519bis-public-key-file))))) + (and (authenticate-commits + repository + (list master1 master2) + #:keyring-reference + "master") + (guard (c ((unauthorized-commit-error? c) + (correct? c devel1))) + (authenticate-commits + repository + (list master1 devel1) + #:keyring-reference + "master") + #f) + (guard (c ((unauthorized-commit-error? c) + (correct? c devel1))) + (authenticate-commits + repository + (list master1 master2 devel1 merge) + #:keyring-reference + "master") + #f))))))) result: SKIP test-name: signed commits, .guix-authorizations, authorized merge location: /home/bost/dev/guix/tests/git-authenticate.scm:230 source: + (test-assert + "signed commits, .guix-authorizations, authorized merge" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519bis-public-key-file + %ed25519bis-secret-key-file) + (with-temporary-git-repository + directory + `((add "signer1.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (add "signer2.key" + ,(call-with-input-file + %ed25519bis-public-key-file + get-string-all)) + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Alice")))))) + (commit "zeroth commit") + (add "a.txt" "A") + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (branch "devel") + (checkout "devel") + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Alice")) + (,(key-fingerprint %ed25519bis-public-key-file)))))) + (commit + "first devel commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "devel/2.txt" "2") + (commit + "second devel commit" + (signer + ,(key-fingerprint %ed25519bis-public-key-file))) + (checkout "master") + (add "b.txt" "B") + (commit + "second commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (merge "devel" + "merge" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "c.txt" "C") + (commit + "third commit" + (signer + ,(key-fingerprint %ed25519bis-public-key-file)))) + (with-repository + directory + repository + (let ((master1 (find-commit repository "first commit")) + (master2 + (find-commit repository "second commit")) + (devel1 + (find-commit repository "first devel commit")) + (devel2 + (find-commit repository "second devel commit")) + (merge (find-commit repository "merge")) + (master3 (find-commit repository "third commit"))) + (authenticate-commits + repository + (list master1 + master2 + devel1 + devel2 + merge + master3) + #:keyring-reference + "master")))))) result: SKIP test-name: signed commits, .guix-authorizations removed location: /home/bost/dev/guix/tests/git-authenticate.scm:290 source: + (test-assert + "signed commits, .guix-authorizations removed" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (with-temporary-git-repository + directory + `((add "signer.key" + ,(call-with-input-file + %ed25519-public-key-file + get-string-all)) + (add ".guix-authorizations" + ,(object->string + `(authorizations + (version 0) + ((,(key-fingerprint %ed25519-public-key-file) + (name "Charlie")))))) + (commit "zeroth commit") + (add "a.txt" "A") + (commit + "first commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (remove ".guix-authorizations") + (commit + "second commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (add "b.txt" "B") + (commit + "third commit" + (signer + ,(key-fingerprint %ed25519-public-key-file)))) + (with-repository + directory + repository + (let ((commit1 (find-commit repository "first")) + (commit2 (find-commit repository "second")) + (commit3 (find-commit repository "third"))) + (and (authenticate-commits + repository + (list commit1 commit2) + #:keyring-reference + "master") + (guard (c ((unauthorized-commit-error? c) + (oid=? (git-authentication-error-commit c) + (commit-id commit2)))) + (authenticate-commits + repository + (list commit1 commit2 commit3) + #:keyring-reference + "master") + 'failed))))))) result: SKIP SKIP: tests/hackage =================== Starting download of /tmp/guix-file.GdtMfN From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.GdtMfN From https://web.archive.org/web/20211114154130/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154130/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.GdtMfN... could not find its Disarchive specification failed to download "/tmp/guix-file.GdtMfN" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 1 location: /home/bost/dev/guix/tests/hackage.scm:193 source: + (test-assert + "hackage->guix-package test 1" + (eval-test-with-cabal test-cabal-1 match-ghc-foo)) actual-value: #t result: PASS Starting download of /tmp/guix-file.OcgwgN From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.OcgwgN From https://web.archive.org/web/20211114154131/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154131/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.OcgwgN... could not find its Disarchive specification failed to download "/tmp/guix-file.OcgwgN" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 2 location: /home/bost/dev/guix/tests/hackage.scm:196 source: + (test-assert + "hackage->guix-package test 2" + (eval-test-with-cabal test-cabal-2 match-ghc-foo)) actual-value: #t result: PASS Starting download of /tmp/guix-file.wHnWsM From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.wHnWsM From https://web.archive.org/web/20211114154133/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154133/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.wHnWsM... could not find its Disarchive specification failed to download "/tmp/guix-file.wHnWsM" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 3 location: /home/bost/dev/guix/tests/hackage.scm:199 source: + (test-assert + "hackage->guix-package test 3" + (eval-test-with-cabal + test-cabal-3 + match-ghc-foo + #:cabal-environment + '(("impl" . "ghc-7.8")))) actual-value: #t result: PASS Starting download of /tmp/guix-file.WkvmkN From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.WkvmkN From https://web.archive.org/web/20211114154135/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154135/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.WkvmkN... could not find its Disarchive specification failed to download "/tmp/guix-file.WkvmkN" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 4 location: /home/bost/dev/guix/tests/hackage.scm:203 source: + (test-assert + "hackage->guix-package test 4" + (eval-test-with-cabal + test-cabal-4 + match-ghc-foo + #:cabal-environment + '(("impl" . "ghc-7.8")))) actual-value: #t result: PASS Starting download of /tmp/guix-file.SewhkN From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.SewhkN From https://web.archive.org/web/20211114154137/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154137/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.SewhkN... could not find its Disarchive specification failed to download "/tmp/guix-file.SewhkN" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 5 location: /home/bost/dev/guix/tests/hackage.scm:207 source: + (test-assert + "hackage->guix-package test 5" + (eval-test-with-cabal + test-cabal-5 + match-ghc-foo + #:cabal-environment + '(("impl" . "ghc-7.8")))) actual-value: #t result: PASS Starting download of /tmp/guix-file.7l0DGM From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.7l0DGM From https://web.archive.org/web/20211114154139/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154139/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.7l0DGM... could not find its Disarchive specification failed to download "/tmp/guix-file.7l0DGM" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 6 location: /home/bost/dev/guix/tests/hackage.scm:238 source: + (test-assert + "hackage->guix-package test 6" + (eval-test-with-cabal + test-cabal-6 + match-ghc-foo-6)) actual-value: #t result: PASS Starting download of /tmp/guix-file.ywzUeK From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.ywzUeK From https://web.archive.org/web/20211114154140/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154140/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.ywzUeK... could not find its Disarchive specification failed to download "/tmp/guix-file.ywzUeK" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test multiline desc (layout) location: /home/bost/dev/guix/tests/hackage.scm:256 source: + (test-assert + "hackage->guix-package test multiline desc (layout)" + (eval-test-with-cabal + test-cabal-multiline-layout + match-ghc-foo)) actual-value: #t result: PASS Starting download of /tmp/guix-file.e234mM From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.e234mM From https://web.archive.org/web/20211114154141/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154141/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.e234mM... could not find its Disarchive specification failed to download "/tmp/guix-file.e234mM" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test multiline desc (braced) location: /home/bost/dev/guix/tests/hackage.scm:276 source: + (test-assert + "hackage->guix-package test multiline desc (braced)" + (eval-test-with-cabal + test-cabal-multiline-braced + match-ghc-foo)) actual-value: #t result: PASS Syntax error: unexpected token : (ghc-options (-Wall)) (at line 11, column 2) Syntax error: unexpected end of input ;;; (fail #f #f) test-name: hackage->guix-package test mixed layout location: /home/bost/dev/guix/tests/hackage.scm:296 source: + (test-assert + "hackage->guix-package test mixed layout" + (eval-test-with-cabal + test-cabal-mixed-layout + match-ghc-foo)) actual-value: #f result: XFAIL Starting download of /tmp/guix-file.eFqZLO From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.eFqZLO From https://web.archive.org/web/20211114154143/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154143/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.eFqZLO... could not find its Disarchive specification failed to download "/tmp/guix-file.eFqZLO" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test flag executable location: /home/bost/dev/guix/tests/hackage.scm:321 source: + (test-assert + "hackage->guix-package test flag executable" + (eval-test-with-cabal + test-cabal-flag-executable + match-ghc-foo)) actual-value: #t result: PASS Starting download of /tmp/guix-file.9qijaM From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.9qijaM From https://web.archive.org/web/20211114154144/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154144/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.9qijaM... could not find its Disarchive specification failed to download "/tmp/guix-file.9qijaM" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test cabal revision location: /home/bost/dev/guix/tests/hackage.scm:366 source: + (test-assert + "hackage->guix-package test cabal revision" + (eval-test-with-cabal + test-cabal-revision + match-ghc-foo-revision)) actual-value: #t result: PASS test-name: read-cabal test 1 location: /home/bost/dev/guix/tests/hackage.scm:369 source: + (test-assert + "read-cabal test 1" + (match (call-with-input-string + test-read-cabal-1 + read-cabal) + ((("name" ("test-me")) + ('section + 'library + (('if + ('flag "base4point8") + (("build-depends" ("base >= 4.8 && < 5"))) + (('if + ('flag "base4") + (("build-depends" ("base >= 4 && < 4.8"))) + (('if + ('flag "base3") + (("build-depends" ("base >= 3 && < 4"))) + (("build-depends" ("base < 3")))))))) + ('if + ('or + ('flag "base4point8") + ('and ('flag "base4") ('flag "base3"))) + (("build-depends" ("random"))) + ()) + ("build-depends" ("containers")) + ("exposed-modules" ("Test.QuickCheck.Exception"))))) + #t) + (x (pk 'fail x #f)))) actual-value: #t result: PASS Starting download of /tmp/guix-file.zewZwM From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "Not Found" Starting download of /tmp/guix-file.zewZwM From https://web.archive.org/web/20211114154145/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20211114154145/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.zewZwM... could not find its Disarchive specification failed to download "/tmp/guix-file.zewZwM" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test cabal import location: /home/bost/dev/guix/tests/hackage.scm:428 source: + (test-assert + "hackage->guix-package test cabal import" + (eval-test-with-cabal + test-cabal-import + match-ghc-foo-import)) actual-value: #t result: PASS FAIL: tests/home-import ======================= test-name: manifest->code: No services location: /home/bost/dev/guix/tests/home-import.scm:159 source: + (test-assert + "manifest->code: No services" + (eval-test-with-home-environment + '() + (make-manifest (list guile-2.0.9 gcc glibc)) + match-home-environment-no-services)) actual-value: #t result: PASS test-name: manifest->code: No services, package transformations location: /home/bost/dev/guix/tests/home-import.scm:165 source: + (test-assert + "manifest->code: No services, package transformations" + (eval-test-with-home-environment + '() + (make-manifest + (list (manifest-entry + (inherit guile-2.0.9) + (properties `((transformations (foo . "bar"))))) + gcc + glibc)) + match-home-environment-transformations)) actual-value: #t result: PASS test-name: manifest->code: No packages nor services location: /home/bost/dev/guix/tests/home-import.scm:175 source: + (test-assert + "manifest->code: No packages nor services" + (eval-test-with-home-environment + '() + (make-manifest '()) + match-home-environment-no-services-nor-packages)) actual-value: #t result: PASS ;;; (fail (begin (use-modules (gnu home) (gnu packages) (gnu services) (guix gexp) (gnu home services shells)) (home-environment (packages (map specification->package (list))) (services (list (service home-bash-service-type (home-bash-configuration (aliases (quote ())) (bashrc (list (local-file "/tmp/guix-config/.bashrc" "bashrc"))))))))) #f) test-name: manifest->code: Bash service location: /home/bost/dev/guix/tests/home-import.scm:181 source: + (test-assert + "manifest->code: Bash service" + (eval-test-with-home-environment + '((".bashrc" . "echo 'hello guix'")) + (make-manifest '()) + match-home-environment-bash-service)) actual-value: #f result: FAIL SKIP: tests/import-git ====================== test-name: latest-git-tag-version: no custom prefix, suffix, and delimiter location: /home/bost/dev/guix/tests/import-git.scm:50 source: + (test-equal + "latest-git-tag-version: no custom prefix, suffix, and delimiter" + "1.0.1" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "1.0.1" "Release 1.0.1")) + (let ((package (make-package directory "1.0.0"))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: custom prefix, no suffix and delimiter location: /home/bost/dev/guix/tests/import-git.scm:60 source: + (test-equal + "latest-git-tag-version: custom prefix, no suffix and delimiter" + "1.0.1" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "prefix-1.0.1" "Release 1.0.1")) + (let ((package + (make-package + directory + "1.0.0" + '((release-tag-prefix . "prefix-"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: custom suffix, no prefix and delimiter location: /home/bost/dev/guix/tests/import-git.scm:71 source: + (test-equal + "latest-git-tag-version: custom suffix, no prefix and delimiter" + "1.0.1" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "1.0.1-suffix-123" "Release 1.0.1")) + (let ((package + (make-package + directory + "1.0.0" + '((release-tag-suffix . "-suffix-[0-9]*"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: custom delimiter, no prefix and suffix location: /home/bost/dev/guix/tests/import-git.scm:82 source: + (test-equal + "latest-git-tag-version: custom delimiter, no prefix and suffix" + "2021.09.07" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "2021-09-07" "Release 2021-09-07")) + (let ((package + (make-package + directory + "2021-09-06" + '((release-tag-version-delimiter . "-"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: empty delimiter, no prefix and suffix location: /home/bost/dev/guix/tests/import-git.scm:93 source: + (test-equal + "latest-git-tag-version: empty delimiter, no prefix and suffix" + "20210907" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "20210907" "Release 20210907")) + (let ((package + (make-package + directory + "20210906" + '((release-tag-version-delimiter . ""))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: custom prefix and suffix, no delimiter location: /home/bost/dev/guix/tests/import-git.scm:104 source: + (test-equal + "latest-git-tag-version: custom prefix and suffix, no delimiter" + "2.0.0" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "Release-2.0.0suffix-1" "Release 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((release-tag-prefix . "Release-") + (release-tag-suffix . "suffix-[0-9]"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: custom prefix, suffix, and delimiter location: /home/bost/dev/guix/tests/import-git.scm:116 source: + (test-equal + "latest-git-tag-version: custom prefix, suffix, and delimiter" + "2.0.0" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "Release-2_0_0suffix-1" "Release 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((release-tag-prefix . "Release-") + (release-tag-suffix . "suffix-[0-9]") + (release-tag-version-delimiter . "_"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: only pre-releases available location: /home/bost/dev/guix/tests/import-git.scm:129 source: + (test-equal + "latest-git-tag-version: only pre-releases available" + #f + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "2.0.0-rc1" "Release candidate for 2.0.0")) + (let ((package (make-package directory "1.0.0"))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: accept pre-releases location: /home/bost/dev/guix/tests/import-git.scm:139 source: + (test-equal + "latest-git-tag-version: accept pre-releases" + "2.0.0-rc1" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "2.0.0-rc1" "Release candidate for 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((accept-pre-releases? . #t))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: accept pre-releases, and custom prefix location: /home/bost/dev/guix/tests/import-git.scm:150 source: + (test-equal + "latest-git-tag-version: accept pre-releases, and custom prefix" + "2.0.0-rc1" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "version-2.0.0-rc1" + "Release candidate for 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((accept-pre-releases? . #t) + (release-tag-prefix . "version-"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: accept pre-releases, and custom suffix location: /home/bost/dev/guix/tests/import-git.scm:162 source: + (test-equal + "latest-git-tag-version: accept pre-releases, and custom suffix" + "2.0.0-rc1" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "2.0.0-rc1-suffix" + "Release candidate for 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((accept-pre-releases? . #t) + (release-tag-suffix . "-suffix"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: accept pre-releases, delimiter conflicts with pre-release part location: /home/bost/dev/guix/tests/import-git.scm:174 source: + (test-equal + "latest-git-tag-version: accept pre-releases, delimiter conflicts with pre-release part" + "2.0.0_alpha" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "2_0_0_alpha" "Alpha release for 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((accept-pre-releases? . #t) + (release-tag-version-delimiter . "_"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: accept pre-releases, and custom suffix and prefix location: /home/bost/dev/guix/tests/import-git.scm:186 source: + (test-equal + "latest-git-tag-version: accept pre-releases, and custom suffix and prefix" + "2.0.0-alpha" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "prefix123-2.0.0-alpha-suffix" + "Alpha release for 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((accept-pre-releases? . #t) + (release-tag-prefix . "prefix[0-9]{3}-") + (release-tag-suffix . "-suffix"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: accept pre-releases, and custom suffix, prefix, and delimiter location: /home/bost/dev/guix/tests/import-git.scm:199 source: + (test-equal + "latest-git-tag-version: accept pre-releases, and custom suffix, prefix, and delimiter" + "2.0.0-alpha" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "prefix123-2-0-0-alpha-suffix" + "Alpha release for 2.0.0")) + (let ((package + (make-package + directory + "1.0.0" + '((accept-pre-releases? . #t) + (release-tag-prefix . "prefix[0-9]{3}-") + (release-tag-suffix . "-suffix") + (release-tag-version-delimiter . "-"))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: accept pre-releases, no delimiter, and custom suffix, prefix location: /home/bost/dev/guix/tests/import-git.scm:213 source: + (test-equal + "latest-git-tag-version: accept pre-releases, no delimiter, and custom suffix, prefix" + "2alpha" + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "prefix123-2alpha-suffix" + "Alpha release for version 2")) + (let ((package + (make-package + directory + "1.0.0" + '((accept-pre-releases? . #t) + (release-tag-prefix . "prefix[0-9]{3}-") + (release-tag-suffix . "-suffix") + (release-tag-version-delimiter . ""))))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: no tags found location: /home/bost/dev/guix/tests/import-git.scm:227 source: + (test-equal + "latest-git-tag-version: no tags found" + #f + (with-temporary-git-repository + directory + '((add "a.txt" "A") (commit "First commit")) + (let ((package (make-package directory "1.0.0"))) + (latest-git-tag-version package)))) result: SKIP test-name: latest-git-tag-version: no valid tags found location: /home/bost/dev/guix/tests/import-git.scm:236 source: + (test-equal + "latest-git-tag-version: no valid tags found" + #f + (with-temporary-git-repository + directory + '((add "a.txt" "A") + (commit "First commit") + (tag "Test" "Test tag")) + (let ((package (make-package directory "1.0.0"))) + (latest-git-tag-version package)))) result: SKIP SKIP: tests/pypi ================ test-name: guix-package->pypi-name, old URL style location: /home/bost/dev/guix/tests/pypi.scm:154 source: + (test-equal + "guix-package->pypi-name, old URL style" + "psutil" + (guix-package->pypi-name + (dummy-package + "foo" + (source + (dummy-origin + (uri "https://pypi.org/packages/source/p/psutil/psutil-4.3.0.tar.gz")))))) expected-value: "psutil" actual-value: "psutil" result: PASS test-name: guix-package->pypi-name, new URL style location: /home/bost/dev/guix/tests/pypi.scm:162 source: + (test-equal + "guix-package->pypi-name, new URL style" + "certbot" + (guix-package->pypi-name + (dummy-package + "foo" + (source + (dummy-origin + (uri "https://pypi.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz")))))) expected-value: "certbot" actual-value: "certbot" result: PASS test-name: guix-package->pypi-name, several URLs location: /home/bost/dev/guix/tests/pypi.scm:170 source: + (test-equal + "guix-package->pypi-name, several URLs" + "cram" + (guix-package->pypi-name + (dummy-package + "foo" + (source + (dummy-origin + (uri (list "https://bitheap.org/cram/cram-0.7.tar.gz" + (pypi-uri "cram" "0.7")))))))) expected-value: "cram" actual-value: "cram" result: PASS test-name: guix-package->pypi-name, honor 'upstream-name' location: /home/bost/dev/guix/tests/pypi.scm:179 source: + (test-equal + "guix-package->pypi-name, honor 'upstream-name'" + "bar-3" + (guix-package->pypi-name + (dummy-package + "foo" + (properties '((upstream-name . "bar-3")))))) expected-value: "bar-3" actual-value: "bar-3" result: PASS test-name: specification->requirement-name location: /home/bost/dev/guix/tests/pypi.scm:186 source: + (test-equal + "specification->requirement-name" + '("Fizzy" + "PickyThing" + "SomethingWithMarker" + "requests" + "pip") + (map specification->requirement-name + test-specifications)) expected-value: ("Fizzy" "PickyThing" "SomethingWithMarker" "requests" "pip") actual-value: ("Fizzy" "PickyThing" "SomethingWithMarker" "requests" "pip") result: PASS test-name: parse-requires.txt location: /home/bost/dev/guix/tests/pypi.scm:190 source: + (test-equal + "parse-requires.txt" + (list '("foo" "bar") '("pytest")) + (mock ((ice-9 ports) + call-with-input-file + call-with-input-string) + (parse-requires.txt test-requires.txt))) expected-value: (("foo" "bar") ("pytest")) actual-value: (("foo" "bar") ("pytest")) result: PASS test-name: parse-requires.txt - Beaker location: /home/bost/dev/guix/tests/pypi.scm:196 source: + (test-equal + "parse-requires.txt - Beaker" + (list '() '("Mock" "coverage")) + (mock ((ice-9 ports) + call-with-input-file + call-with-input-string) + (parse-requires.txt test-requires.txt-beaker))) expected-value: (() ("Mock" "coverage")) actual-value: (() ("Mock" "coverage")) result: PASS test-name: parse-wheel-metadata, with extras location: /home/bost/dev/guix/tests/pypi.scm:202 source: + (test-equal + "parse-wheel-metadata, with extras" + (list '("wrapt" "bar") '("tox" "bumpversion")) + (mock ((ice-9 ports) + call-with-input-file + call-with-input-string) + (parse-wheel-metadata test-metadata-with-extras))) expected-value: (("wrapt" "bar") ("tox" "bumpversion")) actual-value: (("wrapt" "bar") ("tox" "bumpversion")) result: PASS test-name: parse-wheel-metadata, with extras - Jedi location: /home/bost/dev/guix/tests/pypi.scm:208 source: + (test-equal + "parse-wheel-metadata, with extras - Jedi" + (list '("parso") '("pytest")) + (mock ((ice-9 ports) + call-with-input-file + call-with-input-string) + (parse-wheel-metadata + test-metadata-with-extras-jedi))) expected-value: (("parso") ("pytest")) actual-value: (("parso") ("pytest")) result: PASS test-name: pypi->guix-package, no wheel location: /home/bost/dev/guix/tests/pypi.scm:214 source: + (test-assert + "pypi->guix-package, no wheel" + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://example.com/foo-1.0.0.tar.gz" + (begin + (mkdir-p "foo-1.0.0/src/bizarre.egg-info") + (with-output-to-file + "foo-1.0.0/src/bizarre.egg-info/requires.txt" + (lambda () (display test-requires.txt))) + (parameterize + ((current-output-port (%make-void-port "rw+"))) + (system* "tar" "czvf" file-name "foo-1.0.0/")) + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (mock ((guix http-client) + http-fetch + (lambda (url . rest) + (match url + ("https://pypi.org/pypi/foo/json" + (values + (open-input-string test-json-1) + (string-length test-json-1))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (match (pypi->guix-package "foo") + (('package + ('name "python-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('pypi-uri "foo" 'version)) + ('sha256 ('base32 (? string? hash))))) + ('build-system 'python-build-system) + ('propagated-inputs + ('quasiquote + (("python-bar" ('unquote 'python-bar)) + ("python-foo" ('unquote 'python-foo))))) + ('native-inputs + ('quasiquote + (("python-pytest" ('unquote 'python-pytest))))) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'license:lgpl2.0)) + (and (string=? + (bytevector->nix-base32-string test-source-hash) + hash) + (equal? + (pypi->guix-package "foo" #:version "1.0.0") + (pypi->guix-package "foo")) + (catch 'quit + (lambda () + (pypi->guix-package + "foo" + #:version + "42")) + (const #t)))) + (x (pk 'fail x #f)))))) actual-value: #t result: PASS test-name: pypi->guix-package, wheels location: /home/bost/dev/guix/tests/pypi.scm:276 source: + (test-assert + "pypi->guix-package, wheels" + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://example.com/foo-1.0.0.tar.gz" + (begin + (mkdir-p "foo-1.0.0/foo.egg-info/") + (with-output-to-file + "foo-1.0.0/foo.egg-info/requires.txt" + (lambda () + (display + "wrong data to make sure we're testing wheels "))) + (parameterize + ((current-output-port (%make-void-port "rw+"))) + (system* "tar" "czvf" file-name "foo-1.0.0/")) + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + (begin + (mkdir "foo-1.0.0.dist-info") + (with-output-to-file + "foo-1.0.0.dist-info/METADATA" + (lambda () (display test-metadata))) + (let ((zip-file (string-append file-name ".zip"))) + (system* + "zip" + "-q" + zip-file + "foo-1.0.0.dist-info/METADATA") + (rename-file zip-file file-name)) + (delete-file-recursively "foo-1.0.0.dist-info"))) + (_ (error "Unexpected URL: " url))))) + (mock ((guix http-client) + http-fetch + (lambda (url . rest) + (match url + ("https://pypi.org/pypi/foo/json" + (values + (open-input-string test-json-1) + (string-length test-json-1))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (invalidate-memoization! pypi->guix-package) + (match (pypi->guix-package "foo") + (('package + ('name "python-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('pypi-uri "foo" 'version)) + ('sha256 ('base32 (? string? hash))))) + ('build-system 'python-build-system) + ('propagated-inputs + ('quasiquote + (("python-bar" ('unquote 'python-bar)) + ("python-baz" ('unquote 'python-baz))))) + ('native-inputs + ('quasiquote + (("python-pytest" ('unquote 'python-pytest))))) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'license:lgpl2.0)) + (string=? + (bytevector->nix-base32-string test-source-hash) + hash)) + (x (pk 'fail x #f)))))) result: SKIP test-name: pypi->guix-package, no usable requirement file. location: /home/bost/dev/guix/tests/pypi.scm:344 source: + (test-assert + "pypi->guix-package, no usable requirement file." + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://example.com/foo-1.0.0.tar.gz" + (mkdir-p "foo-1.0.0/foo.egg-info/") + (parameterize + ((current-output-port (%make-void-port "rw+"))) + (system* "tar" "czvf" file-name "foo-1.0.0/")) + (delete-file-recursively "foo-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (mock ((guix http-client) + http-fetch + (lambda (url . rest) + (match url + ("https://pypi.org/pypi/foo/json" + (values + (open-input-string test-json-1) + (string-length test-json-1))) + ("https://example.com/foo-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (invalidate-memoization! pypi->guix-package) + (match (pypi->guix-package "foo") + (('package + ('name "python-foo") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('pypi-uri "foo" 'version)) + ('sha256 ('base32 (? string? hash))))) + ('build-system 'python-build-system) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'license:lgpl2.0)) + (string=? + (bytevector->nix-base32-string test-source-hash) + hash)) + (x (pk 'fail x #f)))))) actual-value: #t result: PASS test-name: pypi->guix-package, package name contains "-" followed by digits location: /home/bost/dev/guix/tests/pypi.scm:390 source: + (test-assert + "pypi->guix-package, package name contains \"-\" followed by digits" + (mock ((guix import utils) + url-fetch + (lambda (url file-name) + (match url + ("https://example.com/foo-99-1.0.0.tar.gz" + (begin + (mkdir-p "foo-99-1.0.0/src/bizarre.egg-info") + (with-output-to-file + "foo-99-1.0.0/src/bizarre.egg-info/requires.txt" + (lambda () (display test-requires.txt))) + (parameterize + ((current-output-port (%make-void-port "rw+"))) + (system* "tar" "czvf" file-name "foo-99-1.0.0/")) + (delete-file-recursively "foo-99-1.0.0") + (set! test-source-hash + (call-with-input-file file-name port-sha256)))) + ("https://example.com/foo-99-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (mock ((guix http-client) + http-fetch + (lambda (url . rest) + (match url + ("https://pypi.org/pypi/foo-99/json" + (values + (open-input-string test-json-2) + (string-length test-json-2))) + ("https://example.com/foo-99-1.0.0-py2.py3-none-any.whl" + #f) + (_ (error "Unexpected URL: " url))))) + (match (pypi->guix-package "foo-99") + (('package + ('name "python-foo-99") + ('version "1.0.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('pypi-uri "foo-99" 'version)) + ('sha256 ('base32 (? string? hash))))) + ('properties + ('quote (("upstream-name" . "foo-99")))) + ('build-system 'python-build-system) + ('propagated-inputs + ('quasiquote + (("python-bar" ('unquote 'python-bar)) + ("python-foo" ('unquote 'python-foo))))) + ('native-inputs + ('quasiquote + (("python-pytest" ('unquote 'python-pytest))))) + ('home-page "http://example.com") + ('synopsis "summary") + ('description "summary") + ('license 'license:lgpl2.0)) + (string=? + (bytevector->nix-base32-string test-source-hash) + hash)) + (x (pk 'fail x #f)))))) actual-value: #t result: PASS error: no source release for pypi package foo 42 warning: Cannot guess requirements from source archive: no requires.txt file found. RUN: tests/services/configuration ================================= test-name: default value, no serialization location: /home/bost/dev/guix/tests/services/configuration.scm:39 source: + (test-equal + "default value, no serialization" + 80 + (port-configuration-port (port-configuration))) expected-value: 80 actual-value: 80 result: PASS test-name: default value, custom serializer location: /home/bost/dev/guix/tests/services/configuration.scm:46 source: + (test-equal + "default value, custom serializer" + 80 + (port-configuration-cs-port + (port-configuration-cs))) expected-value: 80 actual-value: 80 result: PASS test-name: no default value, provided location: /home/bost/dev/guix/tests/services/configuration.scm:54 source: + (test-equal + "no default value, provided" + 55 + (port-configuration-ndv-port + (port-configuration-ndv (port 55)))) expected-value: 55 actual-value: 55 result: PASS test-name: no default value, not provided location: /home/bost/dev/guix/tests/services/configuration.scm:59 source: + (test-assert + "no default value, not provided" + (guard (c ((configuration-error? c) #t)) + (port-configuration-ndv-port + (port-configuration-ndv)))) actual-value: #t result: PASS test-name: serialize-configuration location: /home/bost/dev/guix/tests/services/configuration.scm:70 source: + (test-assert + "serialize-configuration" + (gexp? (let ((config (serializable-configuration))) + (serialize-configuration + config + serializable-configuration-fields)))) actual-value: #t result: PASS test-name: serialize-configuration with no-serialization location: /home/bost/dev/guix/tests/services/configuration.scm:79 source: + (test-assert + "serialize-configuration with no-serialization" + (not (false-if-exception + (let ((config (serializable-configuration))) + (serialize-configuration + config + serializable-configuration-fields))))) actual-value: #t result: PASS test-name: serialize-configuration with prefix location: /home/bost/dev/guix/tests/services/configuration.scm:92 source: + (test-assert + "serialize-configuration with prefix" + (gexp? (let ((config (configuration-with-prefix))) + (serialize-configuration + config + configuration-with-prefix-fields)))) actual-value: #t result: PASS test-name: maybe value serialization location: /home/bost/dev/guix/tests/services/configuration.scm:109 source: + (test-equal + "maybe value serialization" + "port=80" + (serialize-maybe-number "port" 80)) expected-value: "port=80" actual-value: "port=80" result: PASS test-name: maybe value without serialization no procedure bound location: /home/bost/dev/guix/tests/services/configuration.scm:119 source: + (test-assert + "maybe value without serialization no procedure bound" + (not (defined? 'serialize-maybe-string))) actual-value: #t result: PASS SKIP: tests/syscalls ==================== test-name: mount, ENOENT location: /home/bost/dev/guix/tests/syscalls.scm:43 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/bost/dev/guix/tests/syscalls.scm:51 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: (2) result: PASS test-name: mounts location: /home/bost/dev/guix/tests/syscalls.scm:60 source: + (test-assert + "mounts" + (let ((mounts (mounts))) + (any (match-lambda + ((point . type) + (let ((mount (find (lambda (mount) + (string=? (mount-point mount) point)) + mounts))) + (and mount (string=? (mount-type mount) type))))) + '(("/proc" . "proc") + ("/sys" . "sysfs") + ("/dev/shm" . "tmpfs"))))) actual-value: #t result: PASS test-name: mount-points location: /home/bost/dev/guix/tests/syscalls.scm:74 source: + (test-assert + "mount-points" + (any (cute member <> (mount-points)) + '("/" "/proc" "/sys" "/dev"))) actual-value: ("/" "/boot/efi1" "/dev/pts" "/sys/kernel/debug" "/dev/shm" "/sys/firmware/efi/efivars" "/gnu/store" "/run/systemd" "/run/user" "/sys/fs/cgroup" "/sys/fs/cgroup/elogind" "/sys/fs/cgroup/cpuset" "/sys/fs/cgroup/cpu" "/sys/fs/cgroup/cpuacct" "/sys/fs/cgroup/memory" "/sys/fs/cgroup/devices" "/sys/fs/cgroup/freezer" "/sys/fs/cgroup/blkio" "/sys/fs/cgroup/perf_event" "/sys/fs/cgroup/pids" "/var/cache/fontconfig" "/sys/fs/cgroup/unified" "/run/user/983" "/run/user/1000" "/run/user/1000/gvfs") result: PASS test-name: utime with AT_SYMLINK_NOFOLLOW location: /home/bost/dev/guix/tests/syscalls.scm:81 source: + (test-equal + "utime with AT_SYMLINK_NOFOLLOW" + '(0 0) + (begin + (symlink "/nowhere" temp-file) + (utime temp-file 0 0 0 0 AT_SYMLINK_NOFOLLOW) + (let ((st (lstat temp-file))) + (delete-file temp-file) + (list (stat:mtime st) (stat:atime st))))) expected-value: (0 0) actual-value: (0 0) result: PASS test-name: swapon, ENOSYS/ENOENT/EPERM location: /home/bost/dev/guix/tests/syscalls.scm:93 source: + (test-assert + "swapon, ENOSYS/ENOENT/EPERM" + (catch 'system-error + (lambda () (swapon "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM ENOENT ENOSYS))))) actual-value: (1 2 38) result: PASS test-name: swapoff, ENOSYS/ENOENT/EINVAL/EPERM location: /home/bost/dev/guix/tests/syscalls.scm:101 source: + (test-assert + "swapoff, ENOSYS/ENOENT/EINVAL/EPERM" + (catch 'system-error + (lambda () (swapoff "/does-not-exist") #f) + (lambda args + (memv (system-error-errno args) + (list EPERM EINVAL ENOENT ENOSYS))))) actual-value: (1 22 2 38) result: PASS test-name: mkdtemp! location: /home/bost/dev/guix/tests/syscalls.scm:109 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/bost/dev/guix/tests/syscalls.scm:117 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/bost/dev/guix/tests/syscalls.scm:124 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/bost/dev/guix/tests/syscalls.scm:141 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)))))))) actual-value: #t result: PASS test-name: setns location: /home/bost/dev/guix/tests/syscalls.scm:154 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)))))))) actual-value: #t result: PASS test-name: pivot-root location: /home/bost/dev/guix/tests/syscalls.scm:183 source: + (test-equal + "pivot-root" + 'success! + (match (socketpair AF_UNIX SOCK_STREAM 0) + ((parent . child) + (match (clone (logior CLONE_NEWUSER CLONE_NEWNS SIGCHLD)) + (0 + (dynamic-wind + (const #t) + (lambda () + (close parent) + (call-with-temporary-directory + (lambda (root) + (display "ready\n" child) + (read child) + (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 (and (file-exists? "/test") 'success!) + child) + (close child))))) + (lambda () (primitive-exit 0)))) + (pid (close child) + (match (read parent) + ('ready + (call-with-output-file + (format #f "/proc/~d/setgroups" pid) + (lambda (port) (display "deny" port))) + (call-with-output-file + (format #f "/proc/~d/uid_map" pid) + (lambda (port) + (format port "0 ~d 1" (getuid)))) + (call-with-output-file + (format #f "/proc/~d/gid_map" pid) + (lambda (port) + (format port "0 ~d 1" (getgid)))) + (display "go!\n" parent) + (let ((result (read parent))) + (close parent) + (and (zero? (match (waitpid pid) + ((_ . status) + (status:exit-val + status)))) + result))))))))) expected-value: success! actual-value: success! result: PASS test-name: scandir*, ENOENT location: /home/bost/dev/guix/tests/syscalls.scm:232 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/bost/dev/guix/tests/syscalls.scm:240 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/bost/dev/guix/tests/syscalls.scm:274 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/bost/dev/guix/tests/syscalls.scm:560 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/bost/dev/guix/tests/syscalls.scm:565 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/bost/dev/guix/tests/syscalls.scm:576 source: + (test-assert + "terminal-columns" + (> (terminal-columns) 0)) actual-value: #t result: PASS test-name: terminal-columns non-file port location: /home/bost/dev/guix/tests/syscalls.scm:579 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: terminal-rows location: /home/bost/dev/guix/tests/syscalls.scm:583 source: + (test-assert + "terminal-rows" + (> (terminal-rows) 0)) actual-value: #t result: PASS test-name: openpty location: /home/bost/dev/guix/tests/syscalls.scm:586 source: + (test-assert + "openpty" + (let ((head inferior (openpty))) + (and (integer? head) + (integer? inferior) + (let ((port (fdopen inferior "r+0"))) + (and (isatty? port) + (begin (close-port port) (close-fdes head) #t)))))) actual-value: #t result: PASS test-name: openpty + login-tty location: /home/bost/dev/guix/tests/syscalls.scm:596 source: + (test-equal + "openpty + login-tty" + '(hello world) + (let ((head inferior (openpty))) + (match (primitive-fork) + (0 + (dynamic-wind + (const #t) + (lambda () + (setvbuf (current-input-port) 'none) + (close-fdes head) + (login-tty inferior) + (write (read)) + (read)) + (lambda () (primitive-_exit 42)))) + (pid (close-fdes inferior) + (let ((head (fdopen head "r+0"))) + (write '(hello world) head) + (let ((result (read head))) + (close-port head) + (waitpid pid) + result)))))) expected-value: (hello world) actual-value: (hello world) result: PASS test-name: utmpx-entries location: /home/bost/dev/guix/tests/syscalls.scm:620 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/bost/dev/guix/tests/syscalls.scm:637 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/bost/dev/guix/tests/syscalls.scm:642 source: + (test-assert + "read-utmpx" + (let ((result + (call-with-input-file + "/var/run/utmpx" + read-utmpx))) + (or (utmpx? result) (eof-object? result)))) actual-value: #t result: PASS test-name: add-to-entropy-count location: /home/bost/dev/guix/tests/syscalls.scm:648 source: + (test-equal + "add-to-entropy-count" + EPERM + (call-with-output-file + "/dev/urandom" + (lambda (port) + (catch 'system-error + (lambda () (add-to-entropy-count port 77) #f) + (lambda args (system-error-errno args)))))) expected-value: 1 actual-value: 1 result: PASS warning: failed to delete /tmp/guix-directory.iP4vwx/??: No such file or directory warning: failed to delete /tmp/guix-directory.iP4vwx/??: No such file or directory SKIP: tests/upstream ==================== test-name: coalesce-sources same version location: /home/bost/dev/guix/tests/upstream.scm:30 source: + (test-equal + "coalesce-sources same version" + (list (upstream-source + (package "foo") + (version "1") + (urls '("ftp://example.org/foo-1.tar.xz" + "ftp://example.org/foo-1.tar.gz")) + (signature-urls + '("ftp://example.org/foo-1.tar.xz.sig" + "ftp://example.org/foo-1.tar.gz.sig")))) + (coalesce-sources + (list (upstream-source + (package "foo") + (version "1") + (urls '("ftp://example.org/foo-1.tar.gz")) + (signature-urls + '("ftp://example.org/foo-1.tar.gz.sig"))) + (upstream-source + (package "foo") + (version "1") + (urls '("ftp://example.org/foo-1.tar.xz")) + (signature-urls + '("ftp://example.org/foo-1.tar.xz.sig")))))) result: SKIP RUN: tests/offload ================== test-name: #f location: /home/bost/dev/guix/tests/offload.scm:55 source: + (test-assert + (machine-matches? + (deprecated-build-machine "i686-linux") + (build-requirements (system "i686-linux")))) actual-value: #t result: PASS test-name: #f location: /home/bost/dev/guix/tests/offload.scm:60 source: + (test-assert + (machine-matches? + (new-build-machine '("i686-linux")) + (build-requirements (system "i686-linux")))) actual-value: #t result: PASS test-name: #f location: /home/bost/dev/guix/tests/offload.scm:66 source: + (test-assert + (machine-matches? + (new-build-machine + '("armhf-linux" + "aarch64-linux" + "i686-linux" + "x86_64-linux")) + (build-requirements (system "armhf-linux")))) actual-value: #t result: PASS /home/bost/dev/guix/tests/offload.scm:41:2: warning: The 'system' field is deprecated, please use 'systems' instead. FAIL: tests/guix-home ===================== + set -e + guix home --version guix show (GNU Guix) UNKNOWN Copyright (C) 2021 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 '(use-modules (guix config))(display %storedir)' + NIX_STORE_DIR=/gnu/store ++ guile -c '(use-modules (guix config))(display %localstatedir)' + localstatedir=/var + GUIX_DAEMON_SOCKET=/var/guix/daemon-socket/socket + export NIX_STORE_DIR GUIX_DAEMON_SOCKET + guile -c '(use-modules (guix)) (exit (false-if-exception (open-connection)))' ++ dirname /gnu/store + STORE_PARENT=/gnu + export STORE_PARENT + test /gnu = / ++ mktemp -d + test_directory=/tmp/tmp.w1KMqcP6M3 + trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT + cd /tmp/tmp.w1KMqcP6M3 + HOME=/tmp/tmp.w1KMqcP6M3 + export HOME + printf '# dot-bashrc test file for guix home' + cat + guix home reconfigure /tmp/tmp.w1KMqcP6M3/home.scm substitute: substitute: updating substitutes from 'https://ci.guix.gnu.org'... 0.0% substitute: updating substitutes from 'https://ci.guix.gnu.org'... 25.0% substitute: updating substitutes from 'https://ci.guix.gnu.org'... 50.0% substitute: updating substitutes from 'https://ci.guix.gnu.org'... 75.0% substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0% substitute: substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 0.0% substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 25.0% substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 50.0% substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 75.0% substitute: updating substitutes from 'https://bordeaux.guix.gnu.org'... 100.0% The following derivations will be built: /gnu/store/0927j5md0cpsqdvz2nkaqzfgj7sbirl7-home.drv /gnu/store/8ymzlxfvfx1y3sgnxpfyfy4kmglvll6s-profile.drv /gnu/store/9nnlx4pvd0hrznkns0i5jxylbbszxyj2-activate.drv /gnu/store/kqz78drdkckji5asc88ala6g9dsna2g4-files.drv /gnu/store/86hf7g1vwwcdm1in5sj890fmkx0d1145-bash_profile.drv /gnu/store/lp71sfk6z43x088jgk1j1mkh1n62m3xj-bashrc.drv /gnu/store/x0y4lj1fjnjbhpf090kfh993qvxkhb8g-provenance.drv The following profile hooks will be built: /gnu/store/fmi9dvi24iccg7f4c24ay539kmzlhskm-fonts-dir.drv /gnu/store/g8v1ncrglcw95086g91sl1sxs99sxcrp-info-dir.drv /gnu/store/klva6qyk17gzl5ns2adyqjpxxzjs9y9l-ca-certificate-bundle.drv /gnu/store/py0krc8bwagrhdms8zzp9jp9000lran8-emacs-subdirs.drv building /gnu/store/9nnlx4pvd0hrznkns0i5jxylbbszxyj2-activate.drv... successfully built /gnu/store/9nnlx4pvd0hrznkns0i5jxylbbszxyj2-activate.drv building /gnu/store/86hf7g1vwwcdm1in5sj890fmkx0d1145-bash_profile.drv... successfully built /gnu/store/86hf7g1vwwcdm1in5sj890fmkx0d1145-bash_profile.drv building /gnu/store/lp71sfk6z43x088jgk1j1mkh1n62m3xj-bashrc.drv... successfully built /gnu/store/lp71sfk6z43x088jgk1j1mkh1n62m3xj-bashrc.drv building CA certificate bundle... successfully built /gnu/store/klva6qyk17gzl5ns2adyqjpxxzjs9y9l-ca-certificate-bundle.drv listing Emacs sub-directories... successfully built /gnu/store/py0krc8bwagrhdms8zzp9jp9000lran8-emacs-subdirs.drv building /gnu/store/kqz78drdkckji5asc88ala6g9dsna2g4-files.drv... successfully built /gnu/store/kqz78drdkckji5asc88ala6g9dsna2g4-files.drv building fonts directory... successfully built /gnu/store/fmi9dvi24iccg7f4c24ay539kmzlhskm-fonts-dir.drv building directory of Info manuals... successfully built /gnu/store/g8v1ncrglcw95086g91sl1sxs99sxcrp-info-dir.drv building /gnu/store/x0y4lj1fjnjbhpf090kfh993qvxkhb8g-provenance.drv... successfully built /gnu/store/x0y4lj1fjnjbhpf090kfh993qvxkhb8g-provenance.drv building profile with 2 packages... successfully built /gnu/store/8ymzlxfvfx1y3sgnxpfyfy4kmglvll6s-profile.drv building /gnu/store/0927j5md0cpsqdvz2nkaqzfgj7sbirl7-home.drv... successfully built /gnu/store/0927j5md0cpsqdvz2nkaqzfgj7sbirl7-home.drv /gnu/store/dwf71bcwp3d93375r46j89sib2fj0qj1-home New symlinks to home-environment will be created soon. All conflicting files will go to /tmp/tmp.w1KMqcP6M3/1636900908-guix-home-legacy-configs-backup. Skipping /tmp/tmp.w1KMqcP6M3/.config (directory already exists)... done Creating /tmp/tmp.w1KMqcP6M3/.config/fontconfig... done Symlinking /tmp/tmp.w1KMqcP6M3/.config/fontconfig/fonts.conf -> /gnu/store/phj2z2iiqdhryfy7mqral0b9qz3hlva6-fonts.conf... done Symlinking /tmp/tmp.w1KMqcP6M3/.config/test.conf -> /gnu/store/bdixb09v30bvhpgi2f6ndiq25wzb9l74-tmp-file.txt... done Symlinking /tmp/tmp.w1KMqcP6M3/.profile -> /gnu/store/fxbppk3pqzdi3zzy0xl5vg1ir6c5jzq5-shell-profile... done Symlinking /tmp/tmp.w1KMqcP6M3/.bash_profile -> /gnu/store/lw6r3rqp7a0slsad42ybvps6976nr9g4-bash_profile... done Symlinking /tmp/tmp.w1KMqcP6M3/.bashrc -> /gnu/store/fzb3q33zqkjcwdj6diq8473adapikhk6-bashrc... done done Finished updating symlinks. Comparing /gnu/store/non-existing-generation/profile/share/fonts and /gnu/store/dwf71bcwp3d93375r46j89sib2fj0qj1-home/profile/share/fonts... done (same) Evaling on-change gexps. On-change gexps evaluation finished. + test -d /tmp/tmp.w1KMqcP6M3/.guix-home + test -h /tmp/tmp.w1KMqcP6M3/.bash_profile + test -h /tmp/tmp.w1KMqcP6M3/.bashrc ++ tail -n 2 /tmp/tmp.w1KMqcP6M3/.bashrc + test 'alias ll='\''ls -l'\'' alias grep='\''grep --color=auto'\''' == '# dot-bashrc test file for guix home # the content of bashrc-test-config.sh' + chmod -Rf +w /tmp/tmp.w1KMqcP6M3 + rm -rf /tmp/tmp.w1KMqcP6M3 FAIL tests/guix-home.sh (exit status: 1)