================================================== GNU Guix 1.3.0.19080-38bf6: ./test-suite.log ================================================== # TOTAL: 2207 # PASS: 2186 # SKIP: 18 # XFAIL: 1 # FAIL: 2 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 FAIL: tests/channels ==================== test-name: channel-instance-metadata returns default if .guix-channel does not exist location: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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 . 262) (column . 19))> commit: "abcde1234" checkout: "/data/src/guix/test-tmp/store/nwds585cl9sivbcxz12b5lb7611a9zsc-test-channel-abcde12"> result: PASS hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /tmp/guix-directory.xhmL8p/.git/ [master (root-commit) 21c0010] first commit 1 file changed, 1 insertion(+) create mode 100644 a.txt [master 2d50a03] second commit 1 file changed, 1 insertion(+) create mode 100644 b.scm test-name: latest-channel-instances #:validate-pull location: /data/src/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))))))) expected-value: descendant actual-value: descendant result: PASS test-name: channel-instances->manifest location: /data/src/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 hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /tmp/guix-directory.X6mqT5/.git/ [master (root-commit) e7978b4] the commit 1 file changed, 1 insertion(+) create mode 100644 a.txt test-name: channel-news, no news location: /data/src/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)))))) expected-value: () actual-value: () result: PASS hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /tmp/guix-directory.7jW8Xf/.git/ [master (root-commit) 0c3914c] first commit 1 file changed, 1 insertion(+) create mode 100644 .guix-channel [master f4247e9] second commit 1 file changed, 1 insertion(+) create mode 100644 src/a.txt [master 7a1eba7] third commit 1 file changed, 1 insertion(+) create mode 100644 news.scm [master 69359fa] fourth commit 1 file changed, 1 insertion(+) create mode 100644 src/b.txt [master daa4999] fifth commit 1 file changed, 1 insertion(+), 1 deletion(-) test-name: channel-news, one entry location: /data/src/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"))))))) actual-value: #f result: FAIL hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /tmp/guix-directory.5Uqx3x/.git/ [master (root-commit) d8da0bb] first commit 2 files changed, 2 insertions(+) create mode 100644 .guix-channel create mode 100644 src/a.txt [master b2d8390] second commit 1 file changed, 1 insertion(+) create mode 100644 news.scm test-name: channel-news, annotated tag location: /data/src/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))))))) actual-value: #t result: PASS hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /tmp/guix-directory.cxwIpE/.git/ [master (root-commit) a630402] first commit 1 file changed, 1 insertion(+) create mode 100644 a.txt [master 9956d6a] second commit 1 file changed, 1 insertion(+) create mode 100644 b.scm test-name: latest-channel-instances, missing introduction for 'guix' location: /data/src/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)))))) actual-value: #t result: PASS test-name: authenticate-channel, wrong first commit signer location: /data/src/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 + %ed25519-2-public-key-file + %ed25519-2-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 %ed25519-2-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 + %ed25519-2-public-key-file)))))) + (authenticate-channel + channel + directory + (commit-id-string commit2) + #:keyring-reference-prefix + "") + 'failed)))))) result: SKIP test-name: authenticate-channel, not a descendant of introductory commit location: /data/src/guix/tests/channels.scm:529 source: + (test-equal + "authenticate-channel, not a descendant of introductory commit" + #t + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519-2-public-key-file + %ed25519-2-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))) + (branch "alternate-branch") + (checkout "alternate-branch") + (add "something.txt" ,(random-text)) + (commit + "intro commit" + (signer + ,(key-fingerprint %ed25519-public-key-file))) + (checkout "master") + (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")) + (commit0 + (commit-lookup + repository + (reference-target + (branch-lookup repository "alternate-branch")))) + (intro (make-channel-introduction + (commit-id-string commit0) + (openpgp-public-key-fingerprint + (read-openpgp-packet %ed25519-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) + "not a descendant") + (equal? + (formatted-message-arguments c) + (list (oid->string (commit-id commit2)) + (oid->string (commit-id commit0))))))) + (authenticate-channel + channel + directory + (commit-id-string commit2) + #:keyring-reference-prefix + "") + 'failed)))))) result: SKIP test-name: authenticate-channel, .guix-authorizations location: /data/src/guix/tests/channels.scm:587 source: + (test-equal + "authenticate-channel, .guix-authorizations" + #t + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519-2-public-key-file + %ed25519-2-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 %ed25519-2-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 + %ed25519-2-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 + %ed25519-2-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: /data/src/guix/tests/channels.scm:656 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'... Updating channel 'foo' from Git repository at 'file:///tmp/guix-directory.xhmL8p'... Updating channel 'guix' from Git repository at 'file:///tmp/guix-directory.cxwIpE'... SKIP: tests/cpio ================ test-name: file->cpio-header + write-cpio-header + read-cpio-header location: /data/src/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: /data/src/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 FAIL: tests/crate ================= test-name: guix-package->crate-name location: /data/src/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: /data/src/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))))) actual-value: #t result: PASS test-name: cargo-recursive-import location: /data/src/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))))) actual-value: #t result: PASS test-name: licenses: MIT OR Apache-2.0 location: /data/src/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: /data/src/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: /data/src/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: /data/src/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 license:bsd-2) result: FAIL test-name: licenses: MIT/Apache-2.0 location: /data/src/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: /data/src/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: /data/src/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))))) actual-value: #t result: PASS SKIP: tests/git-authenticate ============================ hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /tmp/guix-directory.dpSDkE/.git/ [master (root-commit) 08f3bdb] first commit 1 file changed, 1 insertion(+) create mode 100644 a.txt [master 0865cb5] second commit 1 file changed, 1 insertion(+) create mode 100644 b.txt test-name: unsigned commits location: /data/src/guix/tests/git-authenticate.scm:48 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))))) actual-value: #t result: PASS test-name: signed commits, SHA1 signature location: /data/src/guix/tests/git-authenticate.scm:65 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: /data/src/guix/tests/git-authenticate.scm:94 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: /data/src/guix/tests/git-authenticate.scm:118 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: /data/src/guix/tests/git-authenticate.scm:166 source: + (test-assert + "signed commits, .guix-authorizations, unauthorized merge" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519-2-public-key-file + %ed25519-2-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 + %ed25519-2-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 %ed25519-2-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 %ed25519-2-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: /data/src/guix/tests/git-authenticate.scm:235 source: + (test-assert + "signed commits, .guix-authorizations, authorized merge" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519-2-public-key-file + %ed25519-2-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 + %ed25519-2-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 %ed25519-2-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 %ed25519-2-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 %ed25519-2-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: /data/src/guix/tests/git-authenticate.scm:295 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 test-name: introductory commit, valid signature location: /data/src/guix/tests/git-authenticate.scm:336 source: + (test-assert + "introductory commit, valid signature" + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (let ((fingerprint + (key-fingerprint %ed25519-public-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" (signer ,fingerprint)) + (add "a.txt" "A") + (commit "first commit" (signer ,fingerprint))) + (with-repository + directory + repository + (let ((commit0 (find-commit repository "zero")) + (commit1 (find-commit repository "first"))) + (authenticate-repository + repository + (commit-id commit0) + (openpgp-fingerprint fingerprint) + #:keyring-reference + "master" + #:cache-key + (random-text)))))))) result: SKIP test-name: introductory commit, missing signature location: /data/src/guix/tests/git-authenticate.scm:363 source: + (test-equal + "introductory commit, missing signature" + 'intro-lacks-signature + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (let ((fingerprint + (key-fingerprint %ed25519-public-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 ,fingerprint))) + (with-repository + directory + repository + (let ((commit0 (find-commit repository "zero"))) + (guard (c ((formatted-message? c) + (and (equal? + (formatted-message-arguments c) + (list (oid->string (commit-id commit0)))) + 'intro-lacks-signature))) + (authenticate-repository + repository + (commit-id commit0) + (openpgp-fingerprint fingerprint) + #:keyring-reference + "master" + #:cache-key + (random-text))))))))) result: SKIP test-name: introductory commit, wrong signature location: /data/src/guix/tests/git-authenticate.scm:395 source: + (test-equal + "introductory commit, wrong signature" + 'wrong-intro-signing-key + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file + %ed25519-2-public-key-file + %ed25519-2-secret-key-file) + (let ((fingerprint + (key-fingerprint %ed25519-public-key-file)) + (wrong-fingerprint + (key-fingerprint %ed25519-2-public-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 + %ed25519-2-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" + (signer ,wrong-fingerprint)) + (add "a.txt" "A") + (commit "first commit" (signer ,fingerprint))) + (with-repository + directory + repository + (let ((commit0 (find-commit repository "zero")) + (commit1 (find-commit repository "first"))) + (guard (c ((formatted-message? c) + (and (equal? + (formatted-message-arguments c) + (list (oid->string (commit-id commit0)) + wrong-fingerprint + fingerprint)) + 'wrong-intro-signing-key))) + (authenticate-repository + repository + (commit-id commit0) + (openpgp-fingerprint fingerprint) + #:keyring-reference + "master" + #:cache-key + (random-text))))))))) result: SKIP test-name: authenticate-repository, target not a descendant of intro location: /data/src/guix/tests/git-authenticate.scm:435 source: + (test-equal + "authenticate-repository, target not a descendant of intro" + 'target-commit-not-a-descendant-of-intro + (with-fresh-gnupg-setup + (list %ed25519-public-key-file + %ed25519-secret-key-file) + (let ((fingerprint + (key-fingerprint %ed25519-public-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" (signer ,fingerprint)) + (branch "pre-intro-branch") + (checkout "pre-intro-branch") + (add "b.txt" "B") + (commit "alternate commit" (signer ,fingerprint)) + (checkout "master") + (add "a.txt" "A") + (commit "first commit" (signer ,fingerprint)) + (add "c.txt" "C") + (commit "second commit" (signer ,fingerprint))) + (with-repository + directory + repository + (let ((commit1 (find-commit repository "first")) + (commit-alt + (commit-lookup + repository + (reference-target + (branch-lookup repository "pre-intro-branch"))))) + (guard (c ((formatted-message? c) + (and (equal? + (formatted-message-arguments c) + (list (oid->string (commit-id commit-alt)) + (oid->string (commit-id commit1)))) + 'target-commit-not-a-descendant-of-intro))) + (authenticate-repository + repository + (commit-id commit1) + (openpgp-fingerprint fingerprint) + #:end + (commit-id commit-alt) + #:keyring-reference + "master" + #:cache-key + (random-text))))))))) result: SKIP SKIP: tests/hackage =================== Starting download of /tmp/guix-file.w9P7Co >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.w9P7Co >From https://web.archive.org/web/20220527122906/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122906/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.w9P7Co... could not find its Disarchive specification failed to download "/tmp/guix-file.w9P7Co" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 1 location: /data/src/guix/tests/hackage.scm:189 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.MpO2s4 >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.MpO2s4 >From https://web.archive.org/web/20220527122910/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122910/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.MpO2s4... could not find its Disarchive specification failed to download "/tmp/guix-file.MpO2s4" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 2 location: /data/src/guix/tests/hackage.scm:192 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.4Nf5S1 >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.4Nf5S1 >From https://web.archive.org/web/20220527122912/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122912/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.4Nf5S1... could not find its Disarchive specification failed to download "/tmp/guix-file.4Nf5S1" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 3 location: /data/src/guix/tests/hackage.scm:195 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.XoTojc >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.XoTojc >From https://web.archive.org/web/20220527122913/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122913/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.XoTojc... could not find its Disarchive specification failed to download "/tmp/guix-file.XoTojc" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 4 location: /data/src/guix/tests/hackage.scm:199 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.oYLjYo >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.oYLjYo >From https://web.archive.org/web/20220527122915/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122915/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.oYLjYo... could not find its Disarchive specification failed to download "/tmp/guix-file.oYLjYo" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 5 location: /data/src/guix/tests/hackage.scm:203 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.2dXblr >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.2dXblr >From https://web.archive.org/web/20220527122916/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122916/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.2dXblr... could not find its Disarchive specification failed to download "/tmp/guix-file.2dXblr" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test 6 location: /data/src/guix/tests/hackage.scm:226 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.Za5ehc >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.Za5ehc >From https://web.archive.org/web/20220527122917/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122917/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.Za5ehc... could not find its Disarchive specification failed to download "/tmp/guix-file.Za5ehc" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test multiline desc (layout) location: /data/src/guix/tests/hackage.scm:244 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.ycm4Gn >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.ycm4Gn >From https://web.archive.org/web/20220527122918/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122918/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.ycm4Gn... could not find its Disarchive specification failed to download "/tmp/guix-file.ycm4Gn" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test multiline desc (braced) location: /data/src/guix/tests/hackage.scm:264 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: /data/src/guix/tests/hackage.scm:284 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.1G42Pv >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.1G42Pv >From https://web.archive.org/web/20220527122920/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122920/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.1G42Pv... could not find its Disarchive specification failed to download "/tmp/guix-file.1G42Pv" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test flag executable location: /data/src/guix/tests/hackage.scm:309 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.pI2PJT >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.pI2PJT >From https://web.archive.org/web/20220527122921/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122921/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.pI2PJT... could not find its Disarchive specification failed to download "/tmp/guix-file.pI2PJT" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test cabal revision location: /data/src/guix/tests/hackage.scm:349 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: /data/src/guix/tests/hackage.scm:352 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.oeodD8 >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.oeodD8 >From https://web.archive.org/web/20220527122922/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz... download failed "https://web.archive.org/web/20220527122922/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" 404 "NOT FOUND" Trying to use Disarchive to assemble /tmp/guix-file.oeodD8... could not find its Disarchive specification failed to download "/tmp/guix-file.oeodD8" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz" test-name: hackage->guix-package test cabal import location: /data/src/guix/tests/hackage.scm:406 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 SKIP: tests/inferior ==================== test-name: open-inferior location: /data/src/guix/tests/inferior.scm:54 source: + (test-equal + "open-inferior" + '(42 #t) + (let ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix"))) + (and (inferior? inferior) + (let ((a (inferior-eval '(apply * '(6 7)) inferior)) + (b (inferior-eval + '(@ (gnu packages base) coreutils) + inferior))) + (close-inferior inferior) + (list a (inferior-object? b)))))) expected-value: (42 #t) actual-value: (42 #t) result: PASS test-name: close-inferior location: /data/src/guix/tests/inferior.scm:65 source: + (test-equal + "close-inferior" + '((hello) (world)) + (let* ((inferior1 + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (lst1 (inferior-eval '(list 'hello) inferior1)) + (inferior2 + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (lst2 (inferior-eval '(list 'world) inferior2))) + (close-inferior inferior1) + (close-inferior inferior2) + (list lst1 lst2))) expected-value: ((hello) (world)) actual-value: ((hello) (world)) result: PASS test-name: &inferior-exception location: /data/src/guix/tests/inferior.scm:79 source: + (test-equal + "&inferior-exception" + '(a b c d) + (let ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix"))) + (guard (c ((inferior-exception? c) + (close-inferior inferior) + (and (eq? inferior (inferior-exception-inferior c)) + (match (inferior-exception-stack c) + (((_ (files lines columns)) ..1) + (member "guix/repl.scm" files))) + (inferior-exception-arguments c)))) + (inferior-eval '(throw 'a 'b 'c 'd) inferior) + 'badness))) expected-value: (a b c d) actual-value: (a b c d) result: PASS test-name: &inferior-exception, legacy mode location: /data/src/guix/tests/inferior.scm:93 source: + (test-equal + "&inferior-exception, legacy mode" + '(a b c d) + (let ((inferior (open-inferior %top-builddir))) + (guard (c ((inferior-exception? c) + (close-inferior inferior) + (and (eq? inferior (inferior-exception-inferior c)) + (inferior-exception-arguments c)))) + (inferior-eval '(throw 'a 'b 'c 'd) inferior) + 'badness))) expected-value: (a b c d) actual-value: (a b c d) result: PASS test-name: inferior-packages location: /data/src/guix/tests/inferior.scm:105 source: + (test-equal + "inferior-packages" + (take (sort (fold-packages + (lambda (package lst) + (cons (list (package-name package) + (package-version package) + (package-home-page package) + (package-location package)) + lst)) + '()) + (lambda (x y) (string file: "gnu/packages/games.scm" line: 6666 column: 2>) ("0ad-data" "0.0.25b-alpha" "https://play0ad.com" #< file: "gnu/packages/games.scm" line: 6619 column: 2>) ("0xffff" "0.9" "https://github.com/pali/0xFFFF" #< file: "gnu/packages/flashing-tools.scm" line: 106 column: 2>) ("389-ds-base" "1.4.4.17" "https://directory.fedoraproject.org" #< file: "gnu/packages/openldap.scm" line: 245 column: 2>) ("4dtris" "0.4.3" "https://launchpad.net/4dtris/" #< file: "gnu/packages/games.scm" line: 8713 column: 2>) ("4store" "1.1.6" "https://github.com/4store/4store" #< file: "gnu/packages/databases.scm" line: 180 column: 2>) ("4ti2" "1.6.9" "http://www.4ti2.de/" #< file: "gnu/packages/maths.scm" line: 692 column: 2>) ("7kaa" "2.15.4p1" "https://7kfans.com/" #< file: "gnu/packages/games.scm" line: 12089 column: 2>) ("a2jmidid" "9" "https://github.com/jackaudio/a2jmidid" #< file: "gnu/packages/music.scm" line: 6746 column: 2>) ("a2ps" "4.14" "https://www.gnu.org/software/a2ps/" #< file: "gnu/packages/pretty-print.scm" line: 51 column: 2>)) actual-value: (("0ad" "0.0.25b-alpha" "https://play0ad.com" #< file: "gnu/packages/games.scm" line: 6666 column: 2>) ("0ad-data" "0.0.25b-alpha" "https://play0ad.com" #< file: "gnu/packages/games.scm" line: 6619 column: 2>) ("0xffff" "0.9" "https://github.com/pali/0xFFFF" #< file: "gnu/packages/flashing-tools.scm" line: 106 column: 2>) ("389-ds-base" "1.4.4.17" "https://directory.fedoraproject.org" #< file: "gnu/packages/openldap.scm" line: 245 column: 2>) ("4dtris" "0.4.3" "https://launchpad.net/4dtris/" #< file: "gnu/packages/games.scm" line: 8713 column: 2>) ("4store" "1.1.6" "https://github.com/4store/4store" #< file: "gnu/packages/databases.scm" line: 180 column: 2>) ("4ti2" "1.6.9" "http://www.4ti2.de/" #< file: "gnu/packages/maths.scm" line: 692 column: 2>) ("7kaa" "2.15.4p1" "https://7kfans.com/" #< file: "gnu/packages/games.scm" line: 12089 column: 2>) ("a2jmidid" "9" "https://github.com/jackaudio/a2jmidid" #< file: "gnu/packages/music.scm" line: 6746 column: 2>) ("a2ps" "4.14" "https://www.gnu.org/software/a2ps/" #< file: "gnu/packages/pretty-print.scm" line: 51 column: 2>)) result: PASS test-name: inferior-available-packages location: /data/src/guix/tests/inferior.scm:134 source: + (test-equal + "inferior-available-packages" + (take (sort (fold-available-packages + (lambda* (name + version + result + #:key + supported? + deprecated? + #:allow-other-keys) + (if (and supported? (not deprecated?)) + (alist-cons name version result) + result)) + '()) + (lambda (x y) (stringlist + (lambda (package) + (list (package-name package) + (package-version package) + (package-location package))))) + (list (map ->list (find-packages-by-name "guile" #f)) + (map ->list + (find-packages-by-name "guile" "2.2")))) + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (->list + (lambda (package) + (list (inferior-package-name package) + (inferior-package-version package) + (inferior-package-location package)))) + (lst1 (map ->list + (lookup-inferior-packages inferior "guile"))) + (lst2 (map ->list + (lookup-inferior-packages inferior "guile" "2.2")))) + (close-inferior inferior) + (list lst1 lst2))) expected-value: ((("guile" "3.0.8" #< file: "gnu/packages/guile.scm" line: 392 column: 2>) ("guile" "3.0.7" #< file: "gnu/packages/guile.scm" line: 310 column: 2>) ("guile" "2.2.7" #< file: "gnu/packages/guile.scm" line: 250 column: 2>) ("guile" "2.2.4" #< file: "gnu/packages/guile.scm" line: 297 column: 2>) ("guile" "2.0.14" #< file: "gnu/packages/guile.scm" line: 147 column: 2>) ("guile" "1.8.8" #< file: "gnu/packages/guile.scm" line: 76 column: 2>)) (("guile" "2.2.7" #< file: "gnu/packages/guile.scm" line: 250 column: 2>) ("guile" "2.2.4" #< file: "gnu/packages/guile.scm" line: 297 column: 2>))) actual-value: ((("guile" "3.0.8" #< file: "gnu/packages/guile.scm" line: 392 column: 2>) ("guile" "3.0.7" #< file: "gnu/packages/guile.scm" line: 310 column: 2>) ("guile" "2.2.7" #< file: "gnu/packages/guile.scm" line: 250 column: 2>) ("guile" "2.2.4" #< file: "gnu/packages/guile.scm" line: 297 column: 2>) ("guile" "2.0.14" #< file: "gnu/packages/guile.scm" line: 147 column: 2>) ("guile" "1.8.8" #< file: "gnu/packages/guile.scm" line: 76 column: 2>)) (("guile" "2.2.7" #< file: "gnu/packages/guile.scm" line: 250 column: 2>) ("guile" "2.2.4" #< file: "gnu/packages/guile.scm" line: 297 column: 2>))) result: PASS test-name: lookup-inferior-packages and eq?-ness location: /data/src/guix/tests/inferior.scm:175 source: + (test-assert + "lookup-inferior-packages and eq?-ness" + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (lst1 (lookup-inferior-packages inferior "guile")) + (lst2 (lookup-inferior-packages inferior "guile"))) + (close-inferior inferior) + (every eq? lst1 lst2))) actual-value: #t result: PASS test-name: inferior-package-inputs location: /data/src/guix/tests/inferior.scm:183 source: + (test-equal + "inferior-package-inputs" + (let ((->list + (match-lambda + ((label (? package? package) . rest) + `(,label + (package + ,(package-name package) + ,(package-version package) + ,(package-location package)) + ,@rest))))) + (list (map ->list (package-inputs guile-3.0-latest)) + (map ->list + (package-native-inputs guile-3.0-latest)) + (map ->list + (package-propagated-inputs guile-3.0-latest)))) + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (guile (first (lookup-inferior-packages inferior "guile"))) + (->list + (match-lambda + ((label (? inferior-package? package) . rest) + `(,label + (package + ,(inferior-package-name package) + ,(inferior-package-version package) + ,(inferior-package-location package)) + ,@rest)))) + (result + (list (map ->list (inferior-package-inputs guile)) + (map ->list + (inferior-package-native-inputs guile)) + (map ->list + (inferior-package-propagated-inputs guile))))) + (close-inferior inferior) + result)) expected-value: ((("libffi" (package "libffi" "3.3" #< file: "gnu/packages/libffi.scm" line: 44 column: 2>)) ("bash" (package "bash-minimal" "5.1.8" #< file: "gnu/packages/bash.scm" line: 215 column: 2>))) (("pkgconfig" (package "pkg-config" "0.29.2" #< file: "gnu/packages/pkg-config.scm" line: 36 column: 2>))) (("libunistring" (package "libunistring" "0.9.10" #< file: "gnu/packages/libunistring.scm" line: 35 column: 2>)) ("bdw-gc" (package "libgc" "8.0.4" #< file: "gnu/packages/bdw-gc.scm" line: 33 column: 2>)))) actual-value: ((("libffi" (package "libffi" "3.3" #< file: "gnu/packages/libffi.scm" line: 44 column: 2>)) ("bash" (package "bash-minimal" "5.1.8" #< file: "gnu/packages/bash.scm" line: 215 column: 2>))) (("pkgconfig" (package "pkg-config" "0.29.2" #< file: "gnu/packages/pkg-config.scm" line: 36 column: 2>))) (("libunistring" (package "libunistring" "0.9.10" #< file: "gnu/packages/libunistring.scm" line: 35 column: 2>)) ("bdw-gc" (package "libgc" "8.0.4" #< file: "gnu/packages/bdw-gc.scm" line: 33 column: 2>)))) result: PASS test-name: inferior-package-search-paths location: /data/src/guix/tests/inferior.scm:213 source: + (test-equal + "inferior-package-search-paths" + (package-native-search-paths guile-3.0) + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (guile (first (lookup-inferior-packages inferior "guile"))) + (result + (inferior-package-native-search-paths guile))) + (close-inferior inferior) + result)) expected-value: (#< variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #< variable: "GUILE_LOAD_COMPILED_PATH" files: ("lib/guile/3.0/site-ccache" "share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f>) actual-value: (#< variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #< variable: "GUILE_LOAD_COMPILED_PATH" files: ("lib/guile/3.0/site-ccache" "share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f>) result: PASS test-name: inferior-eval-with-store location: /data/src/guix/tests/inferior.scm:222 source: + (test-equal + "inferior-eval-with-store" + (add-text-to-store %store "foo" "Hello, world!") + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix"))) + (inferior-eval-with-store + inferior + %store + '(lambda (store) + (add-text-to-store store "foo" "Hello, world!"))))) expected-value: "/data/src/guix/test-tmp/store/4583q1sfgrllsgxh67x5m0l3xmxdajm7-foo" actual-value: "/data/src/guix/test-tmp/store/4583q1sfgrllsgxh67x5m0l3xmxdajm7-foo" result: PASS test-name: inferior-eval-with-store, &store-protocol-error location: /data/src/guix/tests/inferior.scm:231 source: + (test-assert + "inferior-eval-with-store, &store-protocol-error" + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix"))) + (guard (c ((store-protocol-error? c) + (string-contains + (store-protocol-error-message c) + "invalid character"))) + (inferior-eval-with-store + inferior + %store + '(lambda (store) + (add-text-to-store store "we|rd/?!@" "uh uh"))) + #f))) actual-value: 0 result: PASS test-name: inferior-eval-with-store, exception location: /data/src/guix/tests/inferior.scm:243 source: + (test-equal + "inferior-eval-with-store, exception" + '(the-answer = 42) + (let ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix"))) + (guard (c ((inferior-exception? c) + (close-inferior inferior) + (inferior-exception-arguments c))) + (inferior-eval-with-store + inferior + %store + '(lambda (store) (throw 'the-answer '= 42)))))) expected-value: (the-answer = 42) actual-value: (the-answer = 42) result: PASS test-name: inferior-eval-with-store, not a procedure location: /data/src/guix/tests/inferior.scm:254 source: + (test-equal + "inferior-eval-with-store, not a procedure" + 'wrong-type-arg + (let ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix"))) + (guard (c ((inferior-exception? c) + (close-inferior inferior) + (car (inferior-exception-arguments c)))) + (inferior-eval-with-store + inferior + %store + '(+ 1 2))))) expected-value: wrong-type-arg actual-value: wrong-type-arg result: PASS test-name: inferior-package-derivation location: /data/src/guix/tests/inferior.scm:263 source: + (test-equal + "inferior-package-derivation" + (map derivation-file-name + (list (package-derivation + %store + %bootstrap-guile + "x86_64-linux") + (package-derivation + %store + %bootstrap-guile + "armhf-linux"))) + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (packages (inferior-packages inferior)) + (guile (find (lambda (package) + (string=? + (package-name %bootstrap-guile) + (inferior-package-name package))) + packages))) + (map derivation-file-name + (list (inferior-package-derivation + %store + guile + "x86_64-linux") + (inferior-package-derivation + %store + guile + "armhf-linux"))))) expected-value: ("/data/src/guix/test-tmp/store/lygim61fny1awb72s0xrni55mj6l2f51-guile-bootstrap-2.0.drv" "/data/src/guix/test-tmp/store/iwc444k8qikcqkffnwv9ai90ghigy7ih-guile-bootstrap-2.0.drv") actual-value: ("/data/src/guix/test-tmp/store/lygim61fny1awb72s0xrni55mj6l2f51-guile-bootstrap-2.0.drv" "/data/src/guix/test-tmp/store/iwc444k8qikcqkffnwv9ai90ghigy7ih-guile-bootstrap-2.0.drv") result: PASS test-name: inferior-package-replacement location: /data/src/guix/tests/inferior.scm:281 source: + (test-equal + "inferior-package-replacement" + (package-derivation + %store + (package-replacement sqlite) + "x86_64-linux") + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (packages (inferior-packages inferior))) + (match (lookup-inferior-packages + inferior + (package-name sqlite) + (package-version sqlite)) + ((inferior-sqlite rest ...) + (inferior-package-derivation + %store + (inferior-package-replacement inferior-sqlite) + "x86_64-linux"))))) result: SKIP test-name: inferior-package->manifest-entry location: /data/src/guix/tests/inferior.scm:297 source: + (test-equal + "inferior-package->manifest-entry" + (manifest-entry->list + (package->manifest-entry + (first (find-best-packages-by-name "guile" #f)))) + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (guile (first (lookup-inferior-packages inferior "guile"))) + (entry (inferior-package->manifest-entry guile))) + (close-inferior inferior) + (manifest-entry->list entry))) expected-value: ("guile" "3.0.8" "out" (#< variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #< variable: "GUILE_LOAD_COMPILED_PATH" files: ("lib/guile/3.0/site-ccache" "share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f>) (("libunistring" "0.9.10" "out" () ()) ("libgc" "8.0.4" "out" () ()))) actual-value: ("guile" "3.0.8" "out" (#< variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #< variable: "GUILE_LOAD_COMPILED_PATH" files: ("lib/guile/3.0/site-ccache" "share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f>) (("libunistring" "0.9.10" "out" () ()) ("libgc" "8.0.4" "out" () ()))) result: PASS test-name: packages->manifest location: /data/src/guix/tests/inferior.scm:307 source: + (test-equal + "packages->manifest" + (map manifest-entry->list + (manifest-entries + (packages->manifest + (find-best-packages-by-name "guile" #f)))) + (let* ((inferior + (open-inferior + %top-builddir + #:command + "scripts/guix")) + (guile (first (lookup-inferior-packages inferior "guile"))) + (manifest (packages->manifest (list guile)))) + (close-inferior inferior) + (map manifest-entry->list + (manifest-entries manifest)))) expected-value: (("guile" "3.0.8" "out" (#< variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #< variable: "GUILE_LOAD_COMPILED_PATH" files: ("lib/guile/3.0/site-ccache" "share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f>) (("libunistring" "0.9.10" "out" () ()) ("libgc" "8.0.4" "out" () ())))) actual-value: (("guile" "3.0.8" "out" (#< variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #< variable: "GUILE_LOAD_COMPILED_PATH" files: ("lib/guile/3.0/site-ccache" "share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f>) (("libunistring" "0.9.10" "out" () ()) ("libgc" "8.0.4" "out" () ())))) result: PASS SKIP: tests/pypi ================ test-name: guix-package->pypi-name, old URL style location: /data/src/guix/tests/pypi.scm:137 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: /data/src/guix/tests/pypi.scm:145 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: /data/src/guix/tests/pypi.scm:153 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: /data/src/guix/tests/pypi.scm:162 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: /data/src/guix/tests/pypi.scm:169 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: /data/src/guix/tests/pypi.scm:173 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: /data/src/guix/tests/pypi.scm:179 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: /data/src/guix/tests/pypi.scm:185 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: /data/src/guix/tests/pypi.scm:191 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: find-project-url, with numpy location: /data/src/guix/tests/pypi.scm:197 source: + (test-equal + "find-project-url, with numpy" + "numpy" + (find-project-url + "numpy" + "https://files.pythonhosted.org/packages/0a/c8/a62767a6b374a0dfb02d2a0456e5f56a372cdd1689dbc6ffb6bf1ddedbc0/numpy-1.22.1.zip")) expected-value: "numpy" actual-value: "numpy" result: PASS test-name: find-project-url, uWSGI location: /data/src/guix/tests/pypi.scm:203 source: + (test-equal + "find-project-url, uWSGI" + "uwsgi" + (find-project-url + "uWSGI" + "https://files.pythonhosted.org/packages/24/fd/93851e4a076719199868d4c918cc93a52742e68370188c1c570a6e42a54f/uwsgi-2.0.20.tar.gz")) expected-value: "uwsgi" actual-value: "uwsgi" result: PASS test-name: find-project-url, flake8-array-spacing location: /data/src/guix/tests/pypi.scm:209 source: + (test-equal + "find-project-url, flake8-array-spacing" + "flake8_array_spacing" + (find-project-url + "flake8-array-spacing" + "https://files.pythonhosted.org/packages/a4/21/ff29b901128b681b7de7a2787b3aeb3e1f3cba4a8c0cffa9712cbff016bc/flake8_array_spacing-0.2.0.tar.gz")) expected-value: "flake8_array_spacing" actual-value: "flake8_array_spacing" result: PASS test-name: find-project-url, foo/goo location: /data/src/guix/tests/pypi.scm:215 source: + (test-equal + "find-project-url, foo/goo" + "foo" + (find-project-url + "foo" + "https://files.pythonhosted.org/packages/f0/f00/goo-0.0.0.tar.gz")) expected-value: "foo" actual-value: "foo" result: PASS test-name: pypi->guix-package, no wheel location: /data/src/guix/tests/pypi.scm:221 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 + ('list 'python-bar 'python-foo)) + ('native-inputs ('list '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")) + (guard (c ((error? c) #t)) + (pypi->guix-package + "foo" + #:version + "42")))) + (x (pk 'fail x #f)))))) actual-value: #t result: PASS test-name: pypi->guix-package, wheels location: /data/src/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 + ('list 'python-bar 'python-baz)) + ('native-inputs ('list '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: /data/src/guix/tests/pypi.scm:339 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: /data/src/guix/tests/pypi.scm:385 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 + ('list 'python-bar 'python-foo)) + ('native-inputs ('list '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 warning: project name foo does not appear verbatim in the PyPI URI hint: The PyPI URI is: `https://files.pythonhosted.org/packages/f0/f00/goo-0.0.0.tar.gz'. You should review the pypi-uri declaration in the generated package. You may need to replace "foo" with a substring of the PyPI URI that identifies the package. warning: Cannot guess requirements from source archive: no requires.txt file found. RUN: tests/services/configuration ================================= test-name: default value, no serialization location: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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: /data/src/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/upstream ==================== test-name: coalesce-sources same version location: /data/src/guix/tests/upstream.scm:38 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 test-name: changed-inputs returns no changes location: /data/src/guix/tests/upstream.scm:105 source: + (test-equal + "changed-inputs returns no changes" + '() + (changed-inputs test-package test-package-sexp)) expected-value: () actual-value: () result: PASS test-name: changed-inputs returns changes to labelled input list location: /data/src/guix/tests/upstream.scm:109 source: + (test-assert + "changed-inputs returns changes to labelled input list" + (let ((changes + (changed-inputs + (package + (inherit test-package) + (inputs `(("hello" ,hello) ("sed" ,sed)))) + test-package-sexp))) + (match changes + (((? upstream-input-change? item)) + (and (equal? + (upstream-input-change-type item) + 'regular) + (equal? + (upstream-input-change-action item) + 'remove) + (string=? + (upstream-input-change-name item) + "sed"))) + (else (pk else #f))))) actual-value: #t result: PASS test-name: changed-inputs returns changes to all labelled input lists location: /data/src/guix/tests/upstream.scm:127 source: + (test-assert + "changed-inputs returns changes to all labelled input lists" + (let ((changes + (changed-inputs + (package + (inherit test-package) + (inputs '()) + (native-inputs '()) + (propagated-inputs '())) + test-package-sexp))) + (match changes + (((? upstream-input-change? items) ...) + (and (equal? + (map upstream-input-change-type items) + '(regular native native propagated)) + (equal? + (map upstream-input-change-action items) + '(add add add add)) + (equal? + (map upstream-input-change-name items) + '("hello" "sed" "tar" "grep")))) + (else (pk else #f))))) actual-value: #t result: PASS test-name: changed-inputs returns changes to plain input list location: /data/src/guix/tests/upstream.scm:178 source: + (test-assert + "changed-inputs returns changes to plain input list" + (let ((changes + (changed-inputs + (package + (inherit test-new-package) + (inputs (list hello sed))) + test-new-package-sexp))) + (match changes + (((? upstream-input-change? item)) + (and (equal? + (upstream-input-change-type item) + 'regular) + (equal? + (upstream-input-change-action item) + 'remove) + (string=? + (upstream-input-change-name item) + "sed"))) + (else (pk else #f))))) actual-value: #t result: PASS test-name: changed-inputs returns changes to all plain input lists location: /data/src/guix/tests/upstream.scm:195 source: + (test-assert + "changed-inputs returns changes to all plain input lists" + (let ((changes + (changed-inputs + (package + (inherit test-new-package) + (inputs '()) + (native-inputs '()) + (propagated-inputs '())) + test-new-package-sexp))) + (match changes + (((? upstream-input-change? items) ...) + (and (equal? + (map upstream-input-change-type items) + '(regular native native propagated)) + (equal? + (map upstream-input-change-action items) + '(add add add add)) + (equal? + (map upstream-input-change-name items) + '("hello" "sed" "tar" "grep")))) + (else (pk else #f))))) actual-value: #t result: PASS RUN: tests/offload ================== test-name: #f location: /data/src/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: /data/src/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: /data/src/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 /data/src/guix/tests/offload.scm:41:2: warning: The 'system' field is deprecated, please use 'systems' instead.