From: James Jackson <j.e.m.jackson@gmail.com>
To: 74286@debbugs.gnu.org
Subject: bug#74286: Test Suite failures
Date: Sat, 9 Nov 2024 15:45:20 -0600 [thread overview]
Message-ID: <CABwVXmyR+SLP0M1V4TFL7RX4=prmKXGokuxd9AE20yygWoA29A@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 190 bytes --]
Failed some test cases attempting to run make check on guix 2a6d9642
(current master) in a Qemu VM.
Build was done in a guix shell with the following command line:
guix shell -D guix -CPWN
[-- Attachment #1.2: Type: text/html, Size: 287 bytes --]
[-- Attachment #2: test-suite.log --]
[-- Type: text/x-log, Size: 187138 bytes --]
===================================================
GNU Guix 1.3.0.67051-2a6d96: ./test-suite.log
===================================================
# TOTAL: 2462
# PASS: 2425
# SKIP: 24
# XFAIL: 2
# FAIL: 11
# XPASS: 0
# ERROR: 0
.. contents:: :depth: 2
SKIP: tests/build-emacs-utils
=============================
test-name: emacs-batch-script: print foo from emacs
location: /home/james/Code/guix/tests/build-emacs-utils.scm:34
source:
+ (test-equal
+ "emacs-batch-script: print foo from emacs"
+ "foo"
+ (emacs-batch-script '(princ "foo")))
result: SKIP
test-name: emacs-batch-script: raise &emacs-batch-error on failure
location: /home/james/Code/guix/tests/build-emacs-utils.scm:38
source:
+ (test-assert
+ "emacs-batch-script: raise &emacs-batch-error on failure"
+ (guard (c ((emacs-batch-error? c)
+ (string-match
+ "[Ww]rong.*argument.*numberp.*\"three\""
+ (emacs-batch-error-message c))))
+ (emacs-batch-script
+ '(mapcar 'number-to-string (list 1 2 "three")))))
result: SKIP
test-name: emacs-header-parse: fetch version
location: /home/james/Code/guix/tests/build-emacs-utils.scm:61
source:
+ (test-equal
+ "emacs-header-parse: fetch version"
+ "1.0.0"
+ (emacs-header-parse "version" mock-elisp-file))
result: SKIP
test-name: emacs-header-parse: fetch keywords
location: /home/james/Code/guix/tests/build-emacs-utils.scm:64
source:
+ (test-equal
+ "emacs-header-parse: fetch keywords"
+ "lisp test"
+ (emacs-header-parse "keywords" mock-elisp-file))
result: SKIP
test-name: emacs-header-parse: fetch nonexistent author
location: /home/james/Code/guix/tests/build-emacs-utils.scm:67
source:
+ (test-equal
+ "emacs-header-parse: fetch nonexistent author"
+ "nil"
+ (emacs-header-parse "author" mock-elisp-file))
result: SKIP
SKIP: tests/channels
====================
test-name: channel-instance-metadata returns default if .guix-channel does not exist
location: /home/james/Code/guix/tests/channels.scm:116
source:
+ (test-equal
+ "channel-instance-metadata returns default if .guix-channel does not exist"
+ '("/" ())
+ (let ((metadata
+ (channel-instance-metadata instance--boring)))
+ (list (channel-metadata-directory metadata)
+ (channel-metadata-dependencies metadata))))
expected-value: ("/" ())
actual-value: ("/" ())
result: PASS
test-name: channel-instance-metadata and default dependencies
location: /home/james/Code/guix/tests/channels.scm:122
source:
+ (test-equal
+ "channel-instance-metadata and default dependencies"
+ '()
+ (channel-metadata-dependencies
+ (channel-instance-metadata instance--no-deps)))
expected-value: ()
actual-value: ()
result: PASS
test-name: channel-instance-metadata and directory
location: /home/james/Code/guix/tests/channels.scm:126
source:
+ (test-equal
+ "channel-instance-metadata and directory"
+ "/modules"
+ (channel-metadata-directory
+ (channel-instance-metadata
+ instance--sub-directory)))
expected-value: "/modules"
actual-value: "/modules"
result: PASS
test-name: channel-instance-metadata rejects unsupported version
location: /home/james/Code/guix/tests/channels.scm:131
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 <channel-metadata>
location: /home/james/Code/guix/tests/channels.scm:137
source:
+ (test-assert
+ "channel-instance-metadata returns <channel-metadata>"
+ (every (@@ (guix channels) channel-metadata?)
+ (map channel-instance-metadata
+ (list instance--no-deps
+ instance--simple
+ instance--with-dupes))))
actual-value: #t
result: PASS
test-name: channel-instance-metadata dependencies are channels
location: /home/james/Code/guix/tests/channels.scm:144
source:
+ (test-assert
+ "channel-instance-metadata dependencies are channels"
+ (let ((deps ((@@ (guix channels)
+ channel-metadata-dependencies)
+ (channel-instance-metadata instance--simple))))
+ (match deps (((? channel? dep)) #t) (_ #f))))
actual-value: #t
result: PASS
test-name: latest-channel-instances includes channel dependencies
location: /home/james/Code/guix/tests/channels.scm:151
source:
+ (test-assert
+ "latest-channel-instances includes channel dependencies"
+ (let* ((channel (channel (name 'test) (url "test")))
+ (test-dir
+ (channel-instance-checkout instance--simple)))
+ (mock ((guix git)
+ update-cached-checkout
+ (lambda* (url #:key ref starting-commit)
+ (match url
+ ("test" (values test-dir "caf3cabba9e" #f))
+ (_ (values
+ (channel-instance-checkout instance--no-deps)
+ "abcde1234"
+ #f)))))
+ (with-store
+ store
+ (let ((instances
+ (latest-channel-instances store (list channel))))
+ (and (eq? 2 (length instances))
+ (lset= eq?
+ '(test test-channel)
+ (map (compose
+ channel-name
+ channel-instance-channel)
+ instances))))))))
actual-value: #t
result: PASS
test-name: latest-channel-instances excludes duplicate channel dependencies
location: /home/james/Code/guix/tests/channels.scm:170
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)
+ (equal?
+ (channel-commit
+ (channel-instance-channel instance))
+ "abc1234")))
+ instances)))))))
actual-value: #<<channel-instance> channel: #<<channel> name: test-channel url: "https://example.com/test-channel" branch: "master" commit: "abc1234" introduction: #f location: ((filename . "guix/channels.scm") (line . 293) (column . 19))> commit: "abcde1234" checkout: "/home/james/Code/guix/test-tmp/store/f35w950llsalyd3dwzx8jd25r8yb27bg-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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.3MyQBJ/.git/
[master (root-commit) 04fd3aa] first commit
1 file changed, 1 insertion(+)
create mode 100644 a.scm
[master b015aac] second commit
1 file changed, 1 insertion(+)
create mode 100644 .guix-channel
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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.penyue/.git/
[master (root-commit) 6c98c7c] initial commit
1 file changed, 1 insertion(+)
create mode 100644 .guix-channel
test-name: latest-channel-instances reads dependencies from most-specific instance
location: /home/james/Code/guix/tests/channels.scm:199
source:
+ (test-equal
+ "latest-channel-instances reads dependencies from most-specific instance"
+ '(chan1 chan2)
+ (with-temporary-git-repository
+ directory1
+ `((add "a.scm" "(define-module (a))")
+ (commit "first commit")
+ (add ".guix-channel"
+ ,(object->string
+ '(channel
+ (version 0)
+ (dependencies
+ (channel
+ (name nonexistent-dependency)
+ (url "http://guix.example.org/does-not-exist.git"))))))
+ (commit "second commit"))
+ (with-temporary-git-repository
+ directory2
+ `((add ".guix-channel"
+ ,(object->string
+ `(channel
+ (version 0)
+ (dependencies
+ (channel
+ (name chan1)
+ (url ,(string-append "file://" directory1)))))))
+ (commit "initial commit"))
+ (with-repository
+ directory1
+ repository
+ (let* ((commit (find-commit repository "first"))
+ (one (channel
+ (url (string-append "file://" directory1))
+ (commit (oid->string (commit-id commit)))
+ (name 'chan1)))
+ (two (channel
+ (url (string-append "file://" directory2))
+ (name 'chan2))))
+ (with-store
+ store
+ (map (compose channel-name channel-instance-channel)
+ (delete-duplicates
+ (append
+ (latest-channel-instances store (list one two))
+ (latest-channel-instances store (list two one)))
+ (lambda (instance1 instance2)
+ (string=?
+ (channel-instance-commit instance1)
+ (channel-instance-commit instance2)))))))))))
expected-value: (chan1 chan2)
actual-value: (chan1 chan2)
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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.owcQbu/.git/
[master (root-commit) 5edf76a] first commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[master 3c987f2] second commit
1 file changed, 1 insertion(+)
create mode 100644 b.scm
test-name: latest-channel-instances #:validate-pull
location: /home/james/Code/guix/tests/channels.scm:248
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: /home/james/Code/guix/tests/channels.scm:281
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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.5HOQSm/.git/
[master (root-commit) 98f35e8] the commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
test-name: channel-news, no news
location: /home/james/Code/guix/tests/channels.scm:357
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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.aIh9eU/.git/
[master (root-commit) 3fff5cd] first commit
1 file changed, 1 insertion(+)
create mode 100644 .guix-channel
[master f113eab] second commit
1 file changed, 1 insertion(+)
create mode 100644 src/a.txt
[master 28a0524] third commit
1 file changed, 1 insertion(+)
create mode 100644 news.scm
[master a7cb07c] fourth commit
1 file changed, 1 insertion(+)
create mode 100644 src/b.txt
[master 870f08c] fifth commit
1 file changed, 1 insertion(+), 1 deletion(-)
test-name: channel-news, one entry
location: /home/james/Code/guix/tests/channels.scm:368
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: #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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.4jfaWA/.git/
[master (root-commit) 425415a] first commit
2 files changed, 2 insertions(+)
create mode 100644 .guix-channel
create mode 100644 src/a.txt
[master b17a82d] second commit
1 file changed, 1 insertion(+)
create mode 100644 news.scm
test-name: channel-news, annotated tag
location: /home/james/Code/guix/tests/channels.scm:455
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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.u7xQsR/.git/
[master (root-commit) ab4ed25] first commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[master 64a8fad] second commit
1 file changed, 1 insertion(+)
create mode 100644 b.scm
test-name: latest-channel-instances, missing introduction for 'guix'
location: /home/james/Code/guix/tests/channels.scm:501
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: /home/james/Code/guix/tests/channels.scm:522
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: /home/james/Code/guix/tests/channels.scm:572
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: /home/james/Code/guix/tests/channels.scm:630
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: /home/james/Code/guix/tests/channels.scm:699
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 'chan1' from Git repository at 'file:///tmp/guix-directory.3MyQBJ'...
Updating channel 'chan2' from Git repository at 'file:///tmp/guix-directory.penyue'...
Updating channel 'chan2' from Git repository at 'file:///tmp/guix-directory.penyue'...
Updating channel 'chan1' from Git repository at 'file:///tmp/guix-directory.3MyQBJ'...
Updating channel 'foo' from Git repository at 'file:///tmp/guix-directory.owcQbu'...
Updating channel 'guix' from Git repository at 'file:///tmp/guix-directory.u7xQsR'...
FAIL: tests/containers
======================
test-name: call-with-container, exit with 0 when there is no error
location: /home/james/Code/guix/tests/containers.scm:51
source:
+ (test-assert
+ "call-with-container, exit with 0 when there is no error"
+ (zero? (call-with-container
+ '()
+ (const #t)
+ #:namespaces
+ '(user))))
actual-value: #t
result: PASS
test-name: call-with-container, user namespace
location: /home/james/Code/guix/tests/containers.scm:56
source:
+ (test-assert
+ "call-with-container, user namespace"
+ (zero? (call-with-container
+ '()
+ (lambda ()
+ (assert-exit
+ (and (zero? (getuid)) (zero? (getgid)))))
+ #:namespaces
+ '(user))))
actual-value: #t
result: PASS
test-name: call-with-container, user namespace, guest UID/GID
location: /home/james/Code/guix/tests/containers.scm:65
source:
+ (test-assert
+ "call-with-container, user namespace, guest UID/GID"
+ (zero? (call-with-container
+ '()
+ (lambda ()
+ (assert-exit
+ (and (= 42 (getuid)) (= 77 (getgid)))))
+ #:guest-uid
+ 42
+ #:guest-gid
+ 77
+ #:namespaces
+ '(user))))
actual-value: #t
result: PASS
test-name: call-with-container, uts namespace
location: /home/james/Code/guix/tests/containers.scm:75
source:
+ (test-assert
+ "call-with-container, uts namespace"
+ (zero? (call-with-container
+ '()
+ (lambda ()
+ (sethostname "test-container")
+ (primitive-exit 0))
+ #:namespaces
+ '(user uts))))
actual-value: #t
result: PASS
test-name: call-with-container, pid namespace
location: /home/james/Code/guix/tests/containers.scm:86
source:
+ (test-assert
+ "call-with-container, pid namespace"
+ (zero? (call-with-container
+ '()
+ (lambda ()
+ (match (primitive-fork)
+ (0 (assert-exit (= 2 (getpid))))
+ (pid (primitive-exit
+ (match (waitpid pid)
+ ((_ . status)
+ (status:exit-val status)))))))
+ #:namespaces
+ '(user pid))))
actual-value: #t
result: PASS
test-name: call-with-container, mnt namespace
location: /home/james/Code/guix/tests/containers.scm:102
source:
+ (test-assert
+ "call-with-container, mnt namespace"
+ (zero? (call-with-container
+ (list (file-system
+ (device "none")
+ (mount-point "/testing")
+ (type "tmpfs")
+ (check? #f)))
+ (lambda ()
+ (assert-exit (file-exists? "/testing")))
+ #:namespaces
+ '(user mnt))))
actual-value: #t
result: PASS
test-name: call-with-container, mnt namespace, wrong bind mount
location: /home/james/Code/guix/tests/containers.scm:114
source:
+ (test-equal
+ "call-with-container, mnt namespace, wrong bind mount"
+ `(system-error ,ENOENT)
+ (catch 'system-error
+ (lambda ()
+ (call-with-container
+ (list (file-system
+ (device "/does-not-exist")
+ (mount-point "/foo")
+ (type "none")
+ (flags '(bind-mount))
+ (check? #f)))
+ (const #t)
+ #:namespaces
+ '(user mnt)))
+ (lambda args
+ (list 'system-error (system-error-errno args)))))
expected-value: (system-error 2)
actual-value: (system-error 2)
result: PASS
test-name: call-with-container, all namespaces
location: /home/james/Code/guix/tests/containers.scm:131
source:
+ (test-assert
+ "call-with-container, all namespaces"
+ (zero? (call-with-container
+ '()
+ (lambda () (primitive-exit 0)))))
actual-value: #f
actual-error:
+ (system-error
+ "mount"
+ "mount ~S on ~S: ~A"
+ ("none"
+ "/tmp/guix-directory.HckwrG/sys"
+ "Operation not permitted")
+ (1))
result: FAIL
test-name: call-with-container, mnt namespace, root permissions
location: /home/james/Code/guix/tests/containers.scm:138
source:
+ (test-assert
+ "call-with-container, mnt namespace, root permissions"
+ (zero? (call-with-container
+ '()
+ (lambda ()
+ (assert-exit (= 493 (stat:perms (lstat "/")))))
+ #:namespaces
+ '(user mnt))))
actual-value: #t
result: PASS
test-name: container-excursion
location: /home/james/Code/guix/tests/containers.scm:146
source:
+ (test-assert
+ "container-excursion"
+ (call-with-temporary-directory
+ (lambda (root)
+ (match (list (pipe) (pipe))
+ (((start-in . start-out) (end-in . end-out))
+ (define (container)
+ (close end-out)
+ (close start-in)
+ (write 'ready start-out)
+ (close start-out)
+ (read end-in)
+ (close end-in))
+ (define (namespaces pid)
+ (let ((pid (number->string pid)))
+ (map (lambda (ns)
+ (readlink (string-append "/proc/" pid "/ns/" ns)))
+ '("user" "ipc" "uts" "net" "pid" "mnt"))))
+ (let* ((pid (run-container root '() %namespaces 1 container))
+ (container-namespaces (namespaces pid))
+ (result
+ (begin
+ (close start-out)
+ (read start-in)
+ (close start-in)
+ (container-excursion
+ pid
+ (lambda ()
+ (assert-exit
+ (equal?
+ container-namespaces
+ (namespaces (getpid)))))))))
+ (close end-in)
+ (write 'done end-out)
+ (close end-out)
+ (waitpid pid)
+ (zero? result)))))))
actual-value: #f
actual-error:
+ (system-error
+ "mount"
+ "mount ~S on ~S: ~A"
+ ("none"
+ "/tmp/guix-directory.8o71eR/sys"
+ "Operation not permitted")
+ (1))
result: FAIL
test-name: container-excursion, same namespaces
location: /home/james/Code/guix/tests/containers.scm:193
source:
+ (test-equal
+ "container-excursion, same namespaces"
+ 42
+ (status:exit-val
+ (container-excursion
+ (getpid)
+ (lambda () (primitive-exit 42)))))
expected-value: 42
actual-value: 42
result: PASS
test-name: container-excursion*
location: /home/james/Code/guix/tests/containers.scm:203
source:
+ (test-assert
+ "container-excursion*"
+ (call-with-temporary-directory
+ (lambda (root)
+ (define (namespaces pid)
+ (let ((pid (number->string pid)))
+ (map (lambda (ns)
+ (readlink (string-append "/proc/" pid "/ns/" ns)))
+ '("user" "ipc" "uts" "net" "pid" "mnt"))))
+ (let* ((pid (run-container
+ root
+ '()
+ %namespaces
+ 1
+ (lambda () (sleep 100))))
+ (expected (namespaces pid))
+ (result
+ (container-excursion*
+ pid
+ (lambda () (namespaces 1)))))
+ (kill pid SIGKILL)
+ (equal? result expected)))))
actual-value: #f
actual-error:
+ (system-error
+ "mount"
+ "mount ~S on ~S: ~A"
+ ("none"
+ "/tmp/guix-directory.mL2sQN/sys"
+ "Operation not permitted")
+ (1))
result: FAIL
test-name: container-excursion*, same namespaces
location: /home/james/Code/guix/tests/containers.scm:224
source:
+ (test-equal
+ "container-excursion*, same namespaces"
+ 42
+ (container-excursion*
+ (getpid)
+ (lambda () (* 6 7))))
expected-value: 42
actual-value: 42
result: PASS
test-name: container-excursion*, /proc
location: /home/james/Code/guix/tests/containers.scm:231
source:
+ (test-equal
+ "container-excursion*, /proc"
+ '("1" "2")
+ (call-with-temporary-directory
+ (lambda (root)
+ (let* ((pid (run-container
+ root
+ '()
+ %namespaces
+ 1
+ (lambda () (sleep 100))))
+ (result
+ (container-excursion*
+ pid
+ (lambda ()
+ (scandir
+ "/proc"
+ (lambda (file)
+ (char-set-contains?
+ char-set:digit
+ (string-ref file 0))))))))
+ (kill pid SIGKILL)
+ result))))
expected-value: ("1" "2")
actual-value: #f
actual-error:
+ (system-error
+ "mount"
+ "mount ~S on ~S: ~A"
+ ("none"
+ "/tmp/guix-directory.dv2See/sys"
+ "Operation not permitted")
+ (1))
result: FAIL
test-name: eval/container, exit status
location: /home/james/Code/guix/tests/containers.scm:252
source:
+ (test-equal
+ "eval/container, exit status"
+ 42
+ (let* ((store (open-connection-for-tests))
+ (status
+ (run-with-store
+ store
+ (eval/container (gexp (exit 42))))))
+ (close-connection store)
+ (status:exit-val status)))
expected-value: 42
actual-value: #f
actual-error:
+ (system-error
+ "mount"
+ "mount ~S on ~S: ~A"
+ ("none"
+ "/tmp/guix-directory.P6T453/sys"
+ "Operation not permitted")
+ (1))
result: FAIL
test-name: eval/container, writable user mapping
location: /home/james/Code/guix/tests/containers.scm:261
source:
+ (test-assert
+ "eval/container, writable user mapping"
+ (call-with-temporary-directory
+ (lambda (directory)
+ (define store (open-connection-for-tests))
+ (define result (string-append directory "/r"))
+ (define requisites* (store-lift requisites))
+ (call-with-output-file result (const #t))
+ (run-with-store
+ store
+ (mlet %store-monad
+ ((status
+ (eval/container
+ (gexp (begin
+ (use-modules (ice-9 ftw))
+ (call-with-output-file
+ "/result"
+ (lambda (port)
+ (write (scandir (ungexp (%store-prefix)))
+ port)))))
+ #:mappings
+ (list (file-system-mapping
+ (source result)
+ (target "/result")
+ (writable? #t)))))
+ (reqs (requisites*
+ (list (derivation->output-path (%guile-for-build))))))
+ (close-connection store)
+ (return
+ (and (zero? (pk 'status status))
+ (lset= string=?
+ (cons* "." ".." (map basename reqs))
+ (pk (call-with-input-file result read))))))))))
actual-value: #f
actual-error:
+ (system-error
+ "mount"
+ "mount ~S on ~S: ~A"
+ ("none"
+ "/tmp/guix-directory.epJjXT/sys"
+ "Operation not permitted")
+ (1))
result: FAIL
test-name: eval/container, non-empty load path
location: /home/james/Code/guix/tests/containers.scm:294
source:
+ (test-assert
+ "eval/container, non-empty load path"
+ (call-with-temporary-directory
+ (lambda (directory)
+ (define store (open-connection-for-tests))
+ (define result (string-append directory "/r"))
+ (define requisites* (store-lift requisites))
+ (mkdir result)
+ (run-with-store
+ store
+ (mlet %store-monad
+ ((status
+ (eval/container
+ (with-imported-modules
+ '((guix build utils))
+ (gexp (begin
+ (use-modules (guix build utils))
+ (mkdir-p "/result/a/b/c"))))
+ #:mappings
+ (list (file-system-mapping
+ (source result)
+ (target "/result")
+ (writable? #t))))))
+ (close-connection store)
+ (return
+ (and (zero? status)
+ (file-is-directory?
+ (string-append result "/a/b/c")))))))))
actual-value: #f
actual-error:
+ (system-error
+ "mount"
+ "mount ~S on ~S: ~A"
+ ("none"
+ "/tmp/guix-directory.1eSYqM/sys"
+ "Operation not permitted")
+ (1))
result: FAIL
SKIP: tests/cpio
================
test-name: file->cpio-header + write-cpio-header + read-cpio-header
location: /home/james/Code/guix/tests/cpio.scm:44
source:
+ (test-assert
+ "file->cpio-header + write-cpio-header + read-cpio-header"
+ (let* ((header (file->cpio-header %test-file)))
+ (call-with-values
+ (lambda () (open-bytevector-output-port))
+ (lambda (port get-bv)
+ (write-cpio-header header port)
+ (let ((port (open-bytevector-input-port (get-bv))))
+ (equal? header (read-cpio-header port)))))))
actual-value: #t
result: PASS
test-name: bit-identical to GNU cpio's output
location: /home/james/Code/guix/tests/cpio.scm:55
source:
+ (test-assert
+ "bit-identical to GNU cpio's output"
+ (call-with-temporary-output-file
+ (lambda (link _)
+ (delete-file link)
+ (symlink "chbouib" link)
+ (let ((files (cons* "/"
+ (canonicalize-path
+ (dirname (search-path %load-path "guix.scm")))
+ link
+ (map (compose
+ canonicalize-path
+ (cut search-path %load-path <>))
+ '("guix.scm"
+ "guix/build/syscalls.scm"
+ "guix/packages.scm")))))
+ (call-with-temporary-output-file
+ (lambda (ref-file _)
+ (let ((pipe (open-pipe*
+ OPEN_WRITE
+ %cpio-program
+ "-o"
+ "-O"
+ ref-file
+ "-H"
+ "newc"
+ "--null")))
+ (for-each
+ (lambda (file) (format pipe "~a\x00" file))
+ files)
+ (and (zero? (close-pipe pipe))
+ (call-with-temporary-output-file
+ (lambda (file port)
+ (write-cpio-archive files port)
+ (close-port port)
+ (or (file=? ref-file file)
+ (throw 'cpio-archives-differ
+ files
+ ref-file
+ file
+ (stat:size (stat ref-file))
+ (stat:size (stat file))))))))))))))
result: SKIP
SKIP: tests/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 <name>
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 <name>
Initialized empty Git repository in /tmp/guix-directory.W5rT28/.git/
[master (root-commit) 3c1d22c] first commit
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[master ffd0e17] second commit
1 file changed, 1 insertion(+)
create mode 100644 b.txt
test-name: unsigned commits
location: /home/james/Code/guix/tests/git-authenticate.scm:47
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: /home/james/Code/guix/tests/git-authenticate.scm:64
source:
+ (test-assert
+ "signed commits, SHA1 signature"
+ (with-fresh-gnupg-setup
+ (list %ed25519-public-key-file
+ %ed25519-secret-key-file)
+ (call-with-output-file
+ (string-append (getenv "GNUPGHOME") "/gpg.conf")
+ (lambda (port) (display "digest-algo sha1" port)))
+ (with-temporary-git-repository
+ directory
+ `((add "a.txt" "A")
+ (add "signer.key"
+ ,(call-with-input-file
+ %ed25519-public-key-file
+ get-string-all))
+ (add ".guix-authorizations"
+ ,(object->string
+ `(authorizations
+ (version 0)
+ ((,(key-fingerprint %ed25519-public-key-file)
+ (name "Charlie"))))))
+ (commit
+ "first commit"
+ (signer
+ ,(key-fingerprint %ed25519-public-key-file))))
+ (with-repository
+ directory
+ repository
+ (let ((commit (find-commit repository "first")))
+ (guard (c ((unsigned-commit-error? c)
+ (oid=? (git-authentication-error-commit c)
+ (commit-id commit))))
+ (authenticate-commits
+ repository
+ (list commit)
+ #:keyring-reference
+ "master")
+ 'failed))))))
result: SKIP
test-name: signed commits, default authorizations
location: /home/james/Code/guix/tests/git-authenticate.scm:93
source:
+ (test-assert
+ "signed commits, default authorizations"
+ (with-fresh-gnupg-setup
+ (list %ed25519-public-key-file
+ %ed25519-secret-key-file)
+ (with-temporary-git-repository
+ directory
+ `((add "signer.key"
+ ,(call-with-input-file
+ %ed25519-public-key-file
+ get-string-all))
+ (commit "zeroth commit")
+ (add "a.txt" "A")
+ (commit
+ "first commit"
+ (signer
+ ,(key-fingerprint %ed25519-public-key-file)))
+ (add "b.txt" "B")
+ (commit
+ "second commit"
+ (signer
+ ,(key-fingerprint %ed25519-public-key-file))))
+ (with-repository
+ directory
+ repository
+ (let ((commit1 (find-commit repository "first"))
+ (commit2 (find-commit repository "second")))
+ (authenticate-commits
+ repository
+ (list commit1 commit2)
+ #:default-authorizations
+ (list (openpgp-public-key-fingerprint
+ (read-openpgp-packet %ed25519-public-key-file)))
+ #:keyring-reference
+ "master"))))))
result: SKIP
test-name: signed commits, .guix-authorizations
location: /home/james/Code/guix/tests/git-authenticate.scm:117
source:
+ (test-assert
+ "signed commits, .guix-authorizations"
+ (with-fresh-gnupg-setup
+ (list %ed25519-public-key-file
+ %ed25519-secret-key-file)
+ (with-temporary-git-repository
+ directory
+ `((add "signer.key"
+ ,(call-with-input-file
+ %ed25519-public-key-file
+ get-string-all))
+ (add ".guix-authorizations"
+ ,(object->string
+ `(authorizations
+ (version 0)
+ ((,(key-fingerprint %ed25519-public-key-file)
+ (name "Charlie"))))))
+ (commit "zeroth commit")
+ (add "a.txt" "A")
+ (commit
+ "first commit"
+ (signer
+ ,(key-fingerprint %ed25519-public-key-file)))
+ (add ".guix-authorizations"
+ ,(object->string `(authorizations (version 0) ())))
+ (commit
+ "second commit"
+ (signer
+ ,(key-fingerprint %ed25519-public-key-file)))
+ (add "b.txt" "B")
+ (commit
+ "third commit"
+ (signer
+ ,(key-fingerprint %ed25519-public-key-file))))
+ (with-repository
+ directory
+ repository
+ (let ((commit1 (find-commit repository "first"))
+ (commit2 (find-commit repository "second"))
+ (commit3 (find-commit repository "third")))
+ (and (authenticate-commits
+ repository
+ (list commit1 commit2)
+ #:keyring-reference
+ "master")
+ (guard (c ((unauthorized-commit-error? c)
+ (and (oid=? (git-authentication-error-commit c)
+ (commit-id commit3))
+ (bytevector=?
+ (openpgp-public-key-fingerprint
+ (unauthorized-commit-error-signing-key c))
+ (openpgp-public-key-fingerprint
+ (read-openpgp-packet
+ %ed25519-public-key-file))))))
+ (authenticate-commits
+ repository
+ (list commit1 commit2 commit3)
+ #:keyring-reference
+ "master")
+ 'failed)))))))
result: SKIP
test-name: signed commits, .guix-authorizations, unauthorized merge
location: /home/james/Code/guix/tests/git-authenticate.scm:165
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: /home/james/Code/guix/tests/git-authenticate.scm:234
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: /home/james/Code/guix/tests/git-authenticate.scm:294
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: /home/james/Code/guix/tests/git-authenticate.scm:335
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: /home/james/Code/guix/tests/git-authenticate.scm:362
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: /home/james/Code/guix/tests/git-authenticate.scm:394
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: /home/james/Code/guix/tests/git-authenticate.scm:434
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.c6roHm
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.c6roHm
From https://web.archive.org/web/20241109191828/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.c6roHm...
could not find its Disarchive specification
failed to download "/tmp/guix-file.c6roHm" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test 1
location: /home/james/Code/guix/tests/hackage.scm:215
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.HEcNdr
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.HEcNdr
From https://web.archive.org/web/20241109191829/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.HEcNdr...
could not find its Disarchive specification
failed to download "/tmp/guix-file.HEcNdr" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test 2
location: /home/james/Code/guix/tests/hackage.scm:218
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.NZwn2X
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.NZwn2X
From https://web.archive.org/web/20241109191829/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.NZwn2X...
could not find its Disarchive specification
failed to download "/tmp/guix-file.NZwn2X" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test 3
location: /home/james/Code/guix/tests/hackage.scm:221
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.tgWP9x
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.tgWP9x
From https://web.archive.org/web/20241109191830/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.tgWP9x...
could not find its Disarchive specification
failed to download "/tmp/guix-file.tgWP9x" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test 4
location: /home/james/Code/guix/tests/hackage.scm:225
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.Ep2Me9
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.Ep2Me9
From https://web.archive.org/web/20241109191830/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.Ep2Me9...
could not find its Disarchive specification
failed to download "/tmp/guix-file.Ep2Me9" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test 5
location: /home/james/Code/guix/tests/hackage.scm:229
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.MEk26g
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.MEk26g
From https://web.archive.org/web/20241109191831/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.MEk26g...
could not find its Disarchive specification
failed to download "/tmp/guix-file.MEk26g" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test 6
location: /home/james/Code/guix/tests/hackage.scm:253
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.dZ63NN
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.dZ63NN
From https://web.archive.org/web/20241109191831/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.dZ63NN...
could not find its Disarchive specification
failed to download "/tmp/guix-file.dZ63NN" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test multiline desc (layout)
location: /home/james/Code/guix/tests/hackage.scm:271
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.DdH9GB
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.DdH9GB
From https://web.archive.org/web/20241109191832/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.DdH9GB...
could not find its Disarchive specification
failed to download "/tmp/guix-file.DdH9GB" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test multiline desc (braced)
location: /home/james/Code/guix/tests/hackage.scm:291
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
Starting download of /tmp/guix-file.4j2e3A
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.4j2e3A
From https://web.archive.org/web/20241109191832/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.4j2e3A...
could not find its Disarchive specification
failed to download "/tmp/guix-file.4j2e3A" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test mixed layout
location: /home/james/Code/guix/tests/hackage.scm:309
source:
+ (test-assert
+ "hackage->guix-package test mixed layout"
+ (eval-test-with-cabal
+ test-cabal-mixed-layout
+ match-ghc-foo))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.OJQ8Wi
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.OJQ8Wi
From https://web.archive.org/web/20241109191832/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.OJQ8Wi...
could not find its Disarchive specification
failed to download "/tmp/guix-file.OJQ8Wi" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test flag executable
location: /home/james/Code/guix/tests/hackage.scm:334
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.YL46iN
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.YL46iN
From https://web.archive.org/web/20241109191832/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.YL46iN...
could not find its Disarchive specification
failed to download "/tmp/guix-file.YL46iN" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test properties without space
location: /home/james/Code/guix/tests/hackage.scm:353
source:
+ (test-assert
+ "hackage->guix-package test properties without space"
+ (eval-test-with-cabal
+ test-cabal-property-no-space
+ match-ghc-foo))
actual-value: #t
result: PASS
Syntax error: unexpected end of input
;;; (fail #f #f)
test-name: hackage->guix-package test without final newline
location: /home/james/Code/guix/tests/hackage.scm:368
source:
+ (test-assert
+ "hackage->guix-package test without final newline"
+ (eval-test-with-cabal
+ test-cabal-no-final-newline
+ match-ghc-foo))
actual-value: #f
result: XFAIL
Starting download of /tmp/guix-file.0V5UEW
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.0V5UEW
From https://web.archive.org/web/20241109191833/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.0V5UEW...
could not find its Disarchive specification
failed to download "/tmp/guix-file.0V5UEW" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test internal libraries are ignored
location: /home/james/Code/guix/tests/hackage.scm:388
source:
+ (test-assert
+ "hackage->guix-package test internal libraries are ignored"
+ (eval-test-with-cabal
+ test-cabal-internal-library-ignored
+ match-ghc-foo))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.VUEeIl
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.VUEeIl
From https://web.archive.org/web/20241109191833/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.VUEeIl...
could not find its Disarchive specification
failed to download "/tmp/guix-file.VUEeIl" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test lonely if statement
location: /home/james/Code/guix/tests/hackage.scm:481
source:
+ (test-assert
+ "hackage->guix-package test lonely if statement"
+ (eval-test-with-cabal
+ test-cabal-else
+ match-ghc-elif
+ #:cabal-environment
+ '(("os" . "guix"))))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.6smPt7
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.6smPt7
From https://web.archive.org/web/20241109191833/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.6smPt7...
could not find its Disarchive specification
failed to download "/tmp/guix-file.6smPt7" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test else statement
location: /home/james/Code/guix/tests/hackage.scm:485
source:
+ (test-assert
+ "hackage->guix-package test else statement"
+ (eval-test-with-cabal
+ test-cabal-else
+ match-ghc-elif
+ #:cabal-environment
+ '(("os" . "guix"))))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.osDdd8
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.osDdd8
From https://web.archive.org/web/20241109191834/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.osDdd8...
could not find its Disarchive specification
failed to download "/tmp/guix-file.osDdd8" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test elif statement
location: /home/james/Code/guix/tests/hackage.scm:489
source:
+ (test-assert
+ "hackage->guix-package test elif statement"
+ (eval-test-with-cabal
+ test-cabal-elif
+ match-ghc-elif
+ #:cabal-environment
+ '(("os" . "guix"))))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.3RqYAi
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.3RqYAi
From https://web.archive.org/web/20241109191834/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.3RqYAi...
could not find its Disarchive specification
failed to download "/tmp/guix-file.3RqYAi" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test elif statement with brackets
location: /home/james/Code/guix/tests/hackage.scm:493
source:
+ (test-assert
+ "hackage->guix-package test elif statement with brackets"
+ (eval-test-with-cabal
+ test-cabal-elif-brackets
+ match-ghc-elif
+ #:cabal-environment
+ '(("os" . "guix"))))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.0jmDPC
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.0jmDPC
From https://web.archive.org/web/20241109191835/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.0jmDPC...
could not find its Disarchive specification
failed to download "/tmp/guix-file.0jmDPC" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test cabal revision
location: /home/james/Code/guix/tests/hackage.scm:535
source:
+ (test-assert
+ "hackage->guix-package test cabal revision"
+ (eval-test-with-cabal
+ test-cabal-revision
+ match-ghc-foo-revision))
actual-value: #t
result: PASS
test-name: read-cabal test 1
location: /home/james/Code/guix/tests/hackage.scm:538
source:
+ (test-assert
+ "read-cabal test 1"
+ (match (call-with-input-string
+ test-read-cabal-1
+ read-cabal)
+ ((("name" ("test-me"))
+ ('section
+ 'library
+ #f
+ (('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
test-name: read-cabal test: if brackets on the same line
location: /home/james/Code/guix/tests/hackage.scm:558
source:
+ (test-assert
+ "read-cabal test: if brackets on the same line"
+ (match (call-with-input-string
+ test-read-cabal-2
+ read-cabal)
+ ((("name" ("test-me"))
+ ('section
+ 'common
+ "defaults"
+ (('if
+ ('os "foobar")
+ (("cc-options" ("-DBARBAZ ")))
+ ()))))
+ #t)
+ (x (pk 'fail x #f))))
actual-value: #t
result: PASS
Syntax error: unexpected token : { (at line 4, column 4)
Syntax error: unexpected end of input
;;; (fail #f #f)
test-name: read-cabal test: property brackets on new line
location: /home/james/Code/guix/tests/hackage.scm:569
source:
+ (test-assert
+ "read-cabal test: property brackets on new line"
+ (match (call-with-input-string
+ test-read-cabal-brackets-newline
+ read-cabal)
+ ((("name" ("test-me"))
+ ('section
+ 'common
+ "defaults"
+ (("build-depends" ("foobar , barbaz")))))
+ #t)
+ (x (pk 'fail x #f))))
actual-value: #f
result: XFAIL
test-name: read-cabal test: library name
location: /home/james/Code/guix/tests/hackage.scm:577
source:
+ (test-assert
+ "read-cabal test: library name"
+ (match (call-with-input-string
+ test-read-cabal-library-name
+ read-cabal)
+ ((("name" ("test-me"))
+ ('section
+ 'library
+ "foobar"
+ (("build-depends" ("foo, bar"))))
+ ('section
+ 'library
+ #f
+ (("build-depends" ("bar, baz")))))
+ #t)
+ (x (pk 'fail x #f))))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.ihqro9
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.ihqro9
From https://web.archive.org/web/20241109191835/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.ihqro9...
could not find its Disarchive specification
failed to download "/tmp/guix-file.ihqro9" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test cabal import
location: /home/james/Code/guix/tests/hackage.scm:622
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
Starting download of /tmp/guix-file.8mTqzy
From https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'hackage.haskell.org' could not be verified:
signer-not-found
invalid
Starting download of /tmp/guix-file.8mTqzy
From https://web.archive.org/web/20241109191835/https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.8mTqzy...
could not find its Disarchive specification
failed to download "/tmp/guix-file.8mTqzy" from "https://hackage.haskell.org/package/foo/foo-1.0.0.tar.gz"
test-name: hackage->guix-package test cabal multiple imports
location: /home/james/Code/guix/tests/hackage.scm:667
source:
+ (test-assert
+ "hackage->guix-package test cabal multiple imports"
+ (eval-test-with-cabal
+ test-cabal-multiple-imports
+ match-ghc-foo-multiple-imports))
actual-value: #t
result: PASS
SKIP: tests/inferior
====================
test-name: open-inferior
location: /home/james/Code/guix/tests/inferior.scm:55
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: /home/james/Code/guix/tests/inferior.scm:66
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: /home/james/Code/guix/tests/inferior.scm:80
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: /home/james/Code/guix/tests/inferior.scm:94
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: /home/james/Code/guix/tests/inferior.scm:106
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<? (car x) (car y))))
+ 10)
+ (let* ((inferior
+ (open-inferior
+ %top-builddir
+ #:command
+ "scripts/guix"))
+ (packages (inferior-packages inferior)))
+ (and (every string?
+ (map inferior-package-synopsis packages))
+ (let ()
+ (define result
+ (take (sort (map (lambda (package)
+ (list (inferior-package-name package)
+ (inferior-package-version package)
+ (inferior-package-home-page package)
+ (inferior-package-location package)))
+ packages)
+ (lambda (x y) (string<? (car x) (car y))))
+ 10))
+ (close-inferior inferior)
+ result))))
expected-value: (("0ad" "0.0.26-alpha" "https://play0ad.com" #<<location> file: "gnu/packages/games.scm" line: 7390 column: 2>) ("0xffff" "0.10" "https://github.com/pali/0xFFFF" #<<location> file: "gnu/packages/flashing-tools.scm" line: 114 column: 2>) ("389-ds-base" "2.2.2" "https://directory.fedoraproject.org" #<<location> file: "gnu/packages/openldap.scm" line: 214 column: 2>) ("4dtris" "0.4.3" "https://launchpad.net/4dtris/" #<<location> file: "gnu/packages/games.scm" line: 9269 column: 2>) ("4ti2" "1.6.10" "https://4ti2.github.io" #<<location> file: "gnu/packages/maths.scm" line: 883 column: 2>) ("7kaa" "2.15.6" "https://7kfans.com/" #<<location> file: "gnu/packages/games.scm" line: 10941 column: 2>) ("9base" "7-0.63916da" "https://tools.suckless.org/9base/" #<<location> file: "gnu/packages/suckless.scm" line: 1430 column: 2>) ("9yacc" "7-0.63916da" "https://tools.suckless.org/9base/" #<<location> file: "gnu/packages/suckless.scm" line: 1399 column: 2>) ("a2jmidid" "9" "https://github.com/jackaudio/a2jmidid" #<<location> file: "gnu/packages/music.scm" line: 7617 column: 2>) ("a2ps" "4.15.6" "https://www.gnu.org/software/a2ps/" #<<location> file: "gnu/packages/pretty-print.scm" line: 60 column: 2>))
actual-value: (("0ad" "0.0.26-alpha" "https://play0ad.com" #<<location> file: "gnu/packages/games.scm" line: 7390 column: 2>) ("0xffff" "0.10" "https://github.com/pali/0xFFFF" #<<location> file: "gnu/packages/flashing-tools.scm" line: 114 column: 2>) ("389-ds-base" "2.2.2" "https://directory.fedoraproject.org" #<<location> file: "gnu/packages/openldap.scm" line: 214 column: 2>) ("4dtris" "0.4.3" "https://launchpad.net/4dtris/" #<<location> file: "gnu/packages/games.scm" line: 9269 column: 2>) ("4ti2" "1.6.10" "https://4ti2.github.io" #<<location> file: "gnu/packages/maths.scm" line: 883 column: 2>) ("7kaa" "2.15.6" "https://7kfans.com/" #<<location> file: "gnu/packages/games.scm" line: 10941 column: 2>) ("9base" "7-0.63916da" "https://tools.suckless.org/9base/" #<<location> file: "gnu/packages/suckless.scm" line: 1430 column: 2>) ("9yacc" "7-0.63916da" "https://tools.suckless.org/9base/" #<<location> file: "gnu/packages/suckless.scm" line: 1399 column: 2>) ("a2jmidid" "9" "https://github.com/jackaudio/a2jmidid" #<<location> file: "gnu/packages/music.scm" line: 7617 column: 2>) ("a2ps" "4.15.6" "https://www.gnu.org/software/a2ps/" #<<location> file: "gnu/packages/pretty-print.scm" line: 60 column: 2>))
result: PASS
test-name: inferior-available-packages
location: /home/james/Code/guix/tests/inferior.scm:135
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) (string<? (car x) (car y))))
+ 10)
+ (let* ((inferior
+ (open-inferior
+ %top-builddir
+ #:command
+ "scripts/guix"))
+ (packages (inferior-available-packages inferior)))
+ (close-inferior inferior)
+ (take (sort packages
+ (lambda (x y) (string<? (car x) (car y))))
+ 10)))
expected-value: (("0ad" . "0.0.26-alpha") ("0xffff" . "0.10") ("389-ds-base" . "2.2.2") ("4dtris" . "0.4.3") ("4ti2" . "1.6.10") ("7kaa" . "2.15.6") ("9base" . "7-0.63916da") ("9yacc" . "7-0.63916da") ("a2jmidid" . "9") ("a2ps" . "4.15.6"))
actual-value: (("0ad" . "0.0.26-alpha") ("0xffff" . "0.10") ("389-ds-base" . "2.2.2") ("4dtris" . "0.4.3") ("4ti2" . "1.6.10") ("7kaa" . "2.15.6") ("9base" . "7-0.63916da") ("9yacc" . "7-0.63916da") ("a2jmidid" . "9") ("a2ps" . "4.15.6"))
result: PASS
test-name: lookup-inferior-packages
location: /home/james/Code/guix/tests/inferior.scm:155
source:
+ (test-equal
+ "lookup-inferior-packages"
+ (let ((->list
+ (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.9" #<<location> file: "gnu/packages/guile.scm" line: 351 column: 2>) ("guile" "2.2.7" #<<location> file: "gnu/packages/guile.scm" line: 287 column: 2>) ("guile" "2.2.4" #<<location> file: "gnu/packages/guile.scm" line: 338 column: 2>) ("guile" "2.0.14" #<<location> file: "gnu/packages/guile.scm" line: 160 column: 2>) ("guile" "1.8.8" #<<location> file: "gnu/packages/guile.scm" line: 77 column: 2>)) (("guile" "2.2.7" #<<location> file: "gnu/packages/guile.scm" line: 287 column: 2>) ("guile" "2.2.4" #<<location> file: "gnu/packages/guile.scm" line: 338 column: 2>)))
actual-value: ((("guile" "3.0.9" #<<location> file: "gnu/packages/guile.scm" line: 351 column: 2>) ("guile" "2.2.7" #<<location> file: "gnu/packages/guile.scm" line: 287 column: 2>) ("guile" "2.2.4" #<<location> file: "gnu/packages/guile.scm" line: 338 column: 2>) ("guile" "2.0.14" #<<location> file: "gnu/packages/guile.scm" line: 160 column: 2>) ("guile" "1.8.8" #<<location> file: "gnu/packages/guile.scm" line: 77 column: 2>)) (("guile" "2.2.7" #<<location> file: "gnu/packages/guile.scm" line: 287 column: 2>) ("guile" "2.2.4" #<<location> file: "gnu/packages/guile.scm" line: 338 column: 2>)))
result: PASS
test-name: lookup-inferior-packages and eq?-ness
location: /home/james/Code/guix/tests/inferior.scm:176
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: /home/james/Code/guix/tests/inferior.scm:184
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.4.4" #<<location> file: "gnu/packages/libffi.scm" line: 46 column: 2>)) ("libxcrypt" (package "libxcrypt" "4.4.36" #<<location> file: "gnu/packages/crypto.scm" line: 1649 column: 2>)) ("bash-minimal" (package "bash-minimal" "5.1.16" #<<location> file: "gnu/packages/bash.scm" line: 227 column: 2>))) (("pkg-config" (package "pkg-config" "0.29.2" #<<location> file: "gnu/packages/pkg-config.scm" line: 46 column: 2>))) (("libunistring" (package "libunistring" "1.1" #<<location> file: "gnu/packages/libunistring.scm" line: 36 column: 2>)) ("libgc" (package "libgc" "8.2.4" #<<location> file: "gnu/packages/bdw-gc.scm" line: 35 column: 2>))))
actual-value: ((("libffi" (package "libffi" "3.4.4" #<<location> file: "gnu/packages/libffi.scm" line: 46 column: 2>)) ("libxcrypt" (package "libxcrypt" "4.4.36" #<<location> file: "gnu/packages/crypto.scm" line: 1649 column: 2>)) ("bash-minimal" (package "bash-minimal" "5.1.16" #<<location> file: "gnu/packages/bash.scm" line: 227 column: 2>))) (("pkg-config" (package "pkg-config" "0.29.2" #<<location> file: "gnu/packages/pkg-config.scm" line: 46 column: 2>))) (("libunistring" (package "libunistring" "1.1" #<<location> file: "gnu/packages/libunistring.scm" line: 36 column: 2>)) ("libgc" (package "libgc" "8.2.4" #<<location> file: "gnu/packages/bdw-gc.scm" line: 35 column: 2>))))
result: PASS
test-name: inferior-package-search-paths
location: /home/james/Code/guix/tests/inferior.scm:214
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: (#<<search-path-specification> variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #<<search-path-specification> 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: (#<<search-path-specification> variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #<<search-path-specification> 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: /home/james/Code/guix/tests/inferior.scm:223
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: "/home/james/Code/guix/test-tmp/store/n7zhiy3xqv7vrh94ka6lrlbfyyfra5zx-foo"
actual-value: "/home/james/Code/guix/test-tmp/store/n7zhiy3xqv7vrh94ka6lrlbfyyfra5zx-foo"
result: PASS
test-name: inferior-eval-with-store, &store-protocol-error
location: /home/james/Code/guix/tests/inferior.scm:232
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: /home/james/Code/guix/tests/inferior.scm:244
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: /home/james/Code/guix/tests/inferior.scm:255
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: /home/james/Code/guix/tests/inferior.scm:264
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: ("/home/james/Code/guix/test-tmp/store/yc2jba001ypvb633qazah4sh6r0mywlv-guile-bootstrap-2.0.drv" "/home/james/Code/guix/test-tmp/store/1857i5zhcmhjrszab2jwzi6d0hc9sq9f-guile-bootstrap-2.0.drv")
actual-value: ("/home/james/Code/guix/test-tmp/store/yc2jba001ypvb633qazah4sh6r0mywlv-guile-bootstrap-2.0.drv" "/home/james/Code/guix/test-tmp/store/1857i5zhcmhjrszab2jwzi6d0hc9sq9f-guile-bootstrap-2.0.drv")
result: PASS
test-name: inferior-package-replacement
location: /home/james/Code/guix/tests/inferior.scm:282
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: /home/james/Code/guix/tests/inferior.scm:298
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.9" "out" (#<<search-path-specification> variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #<<search-path-specification> 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" "1.1" "out" () ()) ("libgc" "8.2.4" "out" () ())))
actual-value: ("guile" "3.0.9" "out" (#<<search-path-specification> variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #<<search-path-specification> 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" "1.1" "out" () ()) ("libgc" "8.2.4" "out" () ())))
result: PASS
test-name: packages->manifest
location: /home/james/Code/guix/tests/inferior.scm:308
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.9" "out" (#<<search-path-specification> variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #<<search-path-specification> 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" "1.1" "out" () ()) ("libgc" "8.2.4" "out" () ()))))
actual-value: (("guile" "3.0.9" "out" (#<<search-path-specification> variable: "GUILE_LOAD_PATH" files: ("share/guile/site/3.0") separator: ":" file-type: directory file-pattern: #f> #<<search-path-specification> 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" "1.1" "out" () ()) ("libgc" "8.2.4" "out" () ()))))
result: PASS
guix repl: warning: 'nix-protocol-error?' is deprecated, use 'store-protocol-error?' instead
guix repl: warning: 'nix-protocol-error-message' is deprecated, use 'store-protocol-error-message' instead
testtest-name: #:error-port stderr
location: /home/james/Code/guix/tests/inferior.scm:319
source:
+ (test-equal
+ "#:error-port stderr"
+ 42
+ (let ((inferior
+ (open-inferior
+ %top-builddir
+ #:command
+ "scripts/guix"
+ #:error-port
+ (current-error-port))))
+ (and (inferior? inferior)
+ (inferior-eval
+ '(display "test" (current-error-port))
+ inferior)
+ (let ((result
+ (inferior-eval '(apply * '(6 7)) inferior)))
+ (close-inferior inferior)
+ result))))
expected-value: 42
actual-value: 42
result: PASS
test-name: #:error-port pipe
location: /home/james/Code/guix/tests/inferior.scm:333
source:
+ (test-equal
+ "#:error-port pipe"
+ "42"
+ (match (pipe)
+ ((port-to-read-from . port-to-write-to)
+ (setvbuf port-to-read-from 'line)
+ (setvbuf port-to-write-to 'line)
+ (let ((inferior
+ (open-inferior
+ %top-builddir
+ #:command
+ "scripts/guix"
+ #:error-port
+ port-to-write-to)))
+ (and (inferior? inferior)
+ (begin
+ (inferior-eval
+ '(display "42\n" (current-error-port))
+ inferior)
+ (let loop ((line (read-line port-to-read-from)))
+ (if (string=? line "42")
+ (begin (close-inferior inferior) line)
+ (loop (read-line port-to-read-from))))))))))
expected-value: "42"
actual-value: "42"
result: PASS
SKIP: tests/pypi
================
test-name: guix-package->pypi-name, old URL style
location: /home/james/Code/guix/tests/pypi.scm:210
source:
+ (test-equal
+ "guix-package->pypi-name, old URL style"
+ "psutil"
+ (guix-package->pypi-name
+ (dummy-package
+ "foo"
+ (source
+ (dummy-origin
+ (uri "https://pypi.org/packages/source/p/psutil/psutil-4.3.0.tar.gz"))))))
expected-value: "psutil"
actual-value: "psutil"
result: PASS
test-name: guix-package->pypi-name, new URL style
location: /home/james/Code/guix/tests/pypi.scm:218
source:
+ (test-equal
+ "guix-package->pypi-name, new URL style"
+ "certbot"
+ (guix-package->pypi-name
+ (dummy-package
+ "foo"
+ (source
+ (dummy-origin
+ (uri "https://pypi.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz"))))))
expected-value: "certbot"
actual-value: "certbot"
result: PASS
test-name: guix-package->pypi-name, several URLs
location: /home/james/Code/guix/tests/pypi.scm:226
source:
+ (test-equal
+ "guix-package->pypi-name, several URLs"
+ "cram"
+ (guix-package->pypi-name
+ (dummy-package
+ "foo"
+ (source
+ (dummy-origin
+ (uri (list "https://bitheap.org/cram/cram-0.7.tar.gz"
+ (pypi-uri "cram" "0.7"))))))))
expected-value: "cram"
actual-value: "cram"
result: PASS
test-name: guix-package->pypi-name, honor 'upstream-name'
location: /home/james/Code/guix/tests/pypi.scm:235
source:
+ (test-equal
+ "guix-package->pypi-name, honor 'upstream-name'"
+ "bar-3"
+ (guix-package->pypi-name
+ (dummy-package
+ "foo"
+ (properties '((upstream-name . "bar-3"))))))
expected-value: "bar-3"
actual-value: "bar-3"
result: PASS
test-name: specification->requirement-name
location: /home/james/Code/guix/tests/pypi.scm:242
source:
+ (test-equal
+ "specification->requirement-name"
+ '("Fizzy"
+ "PickyThing"
+ "SomethingWithMarker"
+ "requests"
+ "pip")
+ (map specification->requirement-name
+ test-specifications))
expected-value: ("Fizzy" "PickyThing" "SomethingWithMarker" "requests" "pip")
actual-value: ("Fizzy" "PickyThing" "SomethingWithMarker" "requests" "pip")
result: PASS
test-name: parse-requires.txt
location: /home/james/Code/guix/tests/pypi.scm:246
source:
+ (test-equal
+ "parse-requires.txt"
+ (list '("foo" "bar") '("pytest"))
+ (mock ((ice-9 ports)
+ call-with-input-file
+ call-with-input-string)
+ (parse-requires.txt test-requires.txt)))
expected-value: (("foo" "bar") ("pytest"))
actual-value: (("foo" "bar") ("pytest"))
result: PASS
test-name: parse-requires.txt - Beaker
location: /home/james/Code/guix/tests/pypi.scm:252
source:
+ (test-equal
+ "parse-requires.txt - Beaker"
+ (list '() '("Mock" "coverage"))
+ (mock ((ice-9 ports)
+ call-with-input-file
+ call-with-input-string)
+ (parse-requires.txt test-requires.txt-beaker)))
expected-value: (() ("Mock" "coverage"))
actual-value: (() ("Mock" "coverage"))
result: PASS
test-name: parse-wheel-metadata, with extras
location: /home/james/Code/guix/tests/pypi.scm:258
source:
+ (test-equal
+ "parse-wheel-metadata, with extras"
+ (list '("wrapt" "bar") '("tox" "bumpversion"))
+ (mock ((ice-9 ports)
+ call-with-input-file
+ call-with-input-string)
+ (parse-wheel-metadata test-metadata-with-extras)))
expected-value: (("wrapt" "bar") ("tox" "bumpversion"))
actual-value: (("wrapt" "bar") ("tox" "bumpversion"))
result: PASS
test-name: parse-wheel-metadata, with extras - Jedi
location: /home/james/Code/guix/tests/pypi.scm:264
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: /home/james/Code/guix/tests/pypi.scm:270
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: /home/james/Code/guix/tests/pypi.scm:276
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: /home/james/Code/guix/tests/pypi.scm:282
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: /home/james/Code/guix/tests/pypi.scm:288
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
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.
Starting download of /tmp/guix-file.xfPKit
From http://localhost:34091/foo-1.0.0.tar.gz...
\r^[[K foo-1.0.0.tar.gz 275B 0B/s 00:00 [ ] 0.0%\r^[[K foo-1.0.0.tar.gz 275B 312KiB/s 00:00 [##################] 100.0%\r^[[K foo-1.0.0.tar.gz 275B 272KiB/s 00:00 [##################] 100.0%
Starting download of /tmp/guix-file.xWmhTa
From http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl...
download failed "http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl" 404 "Such is life"
Starting download of /tmp/guix-file.xWmhTa
From https://web.archive.org/web/20241109192852/http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.xWmhTa...
could not find its Disarchive specification
failed to download "/tmp/guix-file.xWmhTa" from "http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl"
Starting download of /tmp/guix-file.9jsA42
From http://localhost:34091/foo-1.0.0.tar.gz...
\r^[[K foo-1.0.0.tar.gz 275B 0B/s 00:00 [ ] 0.0%\r^[[K foo-1.0.0.tar.gz 275B 2.1MiB/s 00:00 [##################] 100.0%\r^[[K foo-1.0.0.tar.gz 275B 831KiB/s 00:00 [##################] 100.0%
Starting download of /tmp/guix-file.0yEQxr
From http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl...
download failed "http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl" 404 "Such is life"
Starting download of /tmp/guix-file.0yEQxr
From https://web.archive.org/web/20241109192852/http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.0yEQxr...
could not find its Disarchive specification
failed to download "/tmp/guix-file.0yEQxr" from "http://localhost:34091/foo-1.0.0-py2.py3-none-any.whl"
test-name: pypi->guix-package, no wheel
location: /home/james/Code/guix/tests/pypi.scm:294
source:
+ (test-assert
+ "pypi->guix-package, no wheel"
+ (let ((tarball
+ (pypi-tarball
+ "foo-1.0.0"
+ `(("src/bizarre.egg-info/requires.txt"
+ ,test-requires.txt))))
+ (twice (lambda (lst) (append lst lst))))
+ (with-pypi
+ (twice `(("/foo-1.0.0.tar.gz" 200 ,(file-dump tarball))
+ ("/foo-1.0.0-py2.py3-none-any.whl" 404 "")
+ ("/foo/json"
+ 200
+ ,(lambda (port) (display (foo-json) port)))))
+ (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 pyproject-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=? default-sha256/base32 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: /home/james/Code/guix/tests/pypi.scm:329
source:
+ (test-assert
+ "pypi->guix-package, wheels"
+ (let ((tarball
+ (pypi-tarball
+ "foo-1.0.0"
+ '(("foo-1.0.0/foo.egg-info/requires.txt"
+ "wrong data to make sure we're testing wheels"))))
+ (wheel (wheel-file
+ "foo-1.0.0"
+ `(("METADATA" ,test-metadata)))))
+ (with-pypi
+ `(("/foo-1.0.0.tar.gz" 200 ,(file-dump tarball))
+ ("/foo-1.0.0-py2.py3-none-any.whl"
+ 200
+ ,(file-dump wheel))
+ ("/foo/json"
+ 200
+ ,(lambda (port) (display (foo-json) port))))
+ (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 pyproject-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=? default-sha256/base32 hash))
+ (x (pk 'fail x #f))))))
result: SKIP
Starting download of /tmp/guix-file.35HTBi
From http://localhost:34499/foo-1.0.0.tar.gz...
\r^[[K foo-1.0.0.tar.gz 178B 0B/s 00:00 [ ] 0.0%\r^[[K foo-1.0.0.tar.gz 178B 1.4MiB/s 00:00 [##################] 100.0%\r^[[K foo-1.0.0.tar.gz 178B 848KiB/s 00:00 [##################] 100.0%
Starting download of /tmp/guix-file.FvJS4p
From http://localhost:34499/foo-1.0.0-py2.py3-none-any.whl...
download failed "http://localhost:34499/foo-1.0.0-py2.py3-none-any.whl" 404 "Such is life"
Starting download of /tmp/guix-file.FvJS4p
From https://web.archive.org/web/20241109192853/http://localhost:34499/foo-1.0.0-py2.py3-none-any.whl...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.FvJS4p...
could not find its Disarchive specification
failed to download "/tmp/guix-file.FvJS4p" from "http://localhost:34499/foo-1.0.0-py2.py3-none-any.whl"
warning: Cannot guess requirements from source archive: no requires.txt file found.
test-name: pypi->guix-package, no usable requirement file.
location: /home/james/Code/guix/tests/pypi.scm:365
source:
+ (test-assert
+ "pypi->guix-package, no usable requirement file."
+ (let ((tarball
+ (pypi-tarball
+ "foo-1.0.0"
+ '(("foo.egg-info/.empty" "")))))
+ (with-pypi
+ `(("/foo-1.0.0.tar.gz" 200 ,(file-dump tarball))
+ ("/foo-1.0.0-py2.py3-none-any.whl" 404 "")
+ ("/foo/json"
+ 200
+ ,(lambda (port) (display (foo-json) port))))
+ (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 pyproject-build-system)
+ (home-page "http://example.com")
+ (synopsis "summary")
+ (description "summary.")
+ (license license:lgpl2.0))
+ (string=? default-sha256/base32 hash))
+ (x (pk 'fail x #f))))))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.xa6B7c
From http://localhost:46741/foo-99-1.0.0.tar.gz...
\r^[[K foo-99-1.0.0.tar.gz 281B 0B/s 00:00 [ ] 0.0%\r^[[K foo-99-1.0.0.tar.gz 281B 2.6MiB/s 00:00 [##################] 100.0%\r^[[K foo-99-1.0.0.tar.gz 281B 1.3MiB/s 00:00 [##################] 100.0%
Starting download of /tmp/guix-file.ArDMcl
From http://localhost:46741/foo-99-1.0.0-py2.py3-none-any.whl...
download failed "http://localhost:46741/foo-99-1.0.0-py2.py3-none-any.whl" 404 "Such is life"
Starting download of /tmp/guix-file.ArDMcl
From https://web.archive.org/web/20241109192853/http://localhost:46741/foo-99-1.0.0-py2.py3-none-any.whl...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.ArDMcl...
could not find its Disarchive specification
failed to download "/tmp/guix-file.ArDMcl" from "http://localhost:46741/foo-99-1.0.0-py2.py3-none-any.whl"
test-name: pypi->guix-package, package name contains "-" followed by digits
location: /home/james/Code/guix/tests/pypi.scm:393
source:
+ (test-assert
+ "pypi->guix-package, package name contains \"-\" followed by digits"
+ (let ((tarball
+ (pypi-tarball
+ "foo-99-1.0.0"
+ `(("src/bizarre.egg-info/requires.txt"
+ ,test-requires.txt)))))
+ (with-pypi
+ `(("/foo-99-1.0.0.tar.gz" 200 ,(file-dump tarball))
+ ("/foo-99-1.0.0-py2.py3-none-any.whl" 404 "")
+ ("/foo-99/json"
+ 200
+ ,(lambda (port)
+ (display (foo-json #:name "foo-99") port))))
+ (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 '(("upstream-name" . "foo-99")))
+ (build-system pyproject-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=? default-sha256/base32 hash))
+ (x (pk 'fail x #f))))))
actual-value: #t
result: PASS
Starting download of /tmp/guix-file.oSy7ZZ
From http://localhost:40843/foo-1.0.0.tar.gz...
\r^[[K foo-1.0.0.tar.gz 275B 0B/s 00:00 [ ] 0.0%\r^[[K foo-1.0.0.tar.gz 275B 2.6MiB/s 00:00 [##################] 100.0%\r^[[K foo-1.0.0.tar.gz 275B 904KiB/s 00:00 [##################] 100.0%
Starting download of /tmp/guix-file.lPMAO1
From http://localhost:40843/foo-1.0.0-py2.py3-none-any.whl...
download failed "http://localhost:40843/foo-1.0.0-py2.py3-none-any.whl" 404 "Such is life"
Starting download of /tmp/guix-file.lPMAO1
From https://web.archive.org/web/20241109192853/http://localhost:40843/foo-1.0.0-py2.py3-none-any.whl...
X.509 certificate of 'web.archive.org' could not be verified:
signer-not-found
invalid
Trying to use Disarchive to assemble /tmp/guix-file.lPMAO1...
could not find its Disarchive specification
failed to download "/tmp/guix-file.lPMAO1" from "http://localhost:40843/foo-1.0.0-py2.py3-none-any.whl"
test-name: package-latest-release
location: /home/james/Code/guix/tests/pypi.scm:423
source:
+ (test-equal
+ "package-latest-release"
+ (list '("foo-1.0.0.tar.gz")
+ '("foo-1.0.0.tar.gz.asc")
+ (list (upstream-input
+ (name "bar")
+ (downstream-name "python-bar")
+ (type 'propagated))
+ (upstream-input
+ (name "foo")
+ (downstream-name "python-foo")
+ (type 'propagated))
+ (upstream-input
+ (name "pytest")
+ (downstream-name "python-pytest")
+ (type 'native))))
+ (let ((tarball
+ (pypi-tarball
+ "foo-1.0.0"
+ `(("src/bizarre.egg-info/requires.txt"
+ ,test-requires.txt)))))
+ (with-pypi
+ `(("/foo-1.0.0.tar.gz" 200 ,(file-dump tarball))
+ ("/foo-1.0.0-py2.py3-none-any.whl" 404 "")
+ ("/foo/json"
+ 200
+ ,(lambda (port) (display (foo-json) port))))
+ (define source
+ (package-latest-release
+ (dummy-package
+ "python-foo"
+ (version "0.1.2")
+ (source
+ (dummy-origin
+ (method url-fetch)
+ (uri (pypi-uri "foo" version))))
+ (build-system python-build-system))
+ (list %pypi-updater)))
+ (list (map basename (upstream-source-urls source))
+ (map basename
+ (upstream-source-signature-urls source))
+ (upstream-source-inputs source)))))
expected-value: (("foo-1.0.0.tar.gz") ("foo-1.0.0.tar.gz.asc") (#<<upstream-input> name: "bar" downstream-name: "python-bar" type: propagated min-version: any max-version: any> #<<upstream-input> name: "foo" downstream-name: "python-foo" type: propagated min-version: any max-version: any> #<<upstream-input> name: "pytest" downstream-name: "python-pytest" type: native min-version: any max-version: any>))
actual-value: (("foo-1.0.0.tar.gz") ("foo-1.0.0.tar.gz.asc") (#<<upstream-input> name: "bar" downstream-name: "python-bar" type: propagated min-version: any max-version: any> #<<upstream-input> name: "foo" downstream-name: "python-foo" type: propagated min-version: any max-version: any> #<<upstream-input> name: "pytest" downstream-name: "python-pytest" type: native min-version: any max-version: any>))
result: PASS
SKIP: tests/syscalls
====================
test-name: mount, ENOENT
location: /home/james/Code/guix/tests/syscalls.scm:43
source:
+ (test-equal
+ "mount, ENOENT"
+ ENOENT
+ (catch 'system-error
+ (lambda ()
+ (mount "/dev/null" "/does-not-exist" "ext2")
+ #f)
+ (compose system-error-errno list)))
expected-value: 2
actual-value: 2
result: PASS
test-name: umount, ENOENT/EPERM
location: /home/james/Code/guix/tests/syscalls.scm:51
source:
+ (test-assert
+ "umount, ENOENT/EPERM"
+ (catch 'system-error
+ (lambda () (umount "/does-not-exist") #f)
+ (lambda args
+ (memv (system-error-errno args)
+ (list EPERM ENOENT)))))
actual-value: (2)
result: PASS
test-name: mounts
location: /home/james/Code/guix/tests/syscalls.scm:60
source:
+ (test-assert
+ "mounts"
+ (let ((mounts (mounts)))
+ (any (match-lambda
+ ((point . type)
+ (let ((mount (find (lambda (mount)
+ (string=? (mount-point mount) point))
+ mounts)))
+ (and mount (string=? (mount-type mount) type)))))
+ '(("/proc" . "proc")
+ ("/sys" . "sysfs")
+ ("/dev/shm" . "tmpfs")))))
actual-value: #t
result: PASS
test-name: mount-points
location: /home/james/Code/guix/tests/syscalls.scm:74
source:
+ (test-assert
+ "mount-points"
+ (any (cute member <> (mount-points))
+ '("/" "/proc" "/sys" "/dev")))
actual-value: ("/" "/proc" "/dev" "/dev/null" "/dev/zero" "/dev/full" "/dev/random" "/dev/urandom" "/dev/tty" "/dev/fuse" "/dev/pts" "/dev/console" "/dev/pts" "/dev/shm" "/dev/mqueue" "/etc/resolv.conf" "/etc/nsswitch.conf" "/etc/services" "/etc/hosts" "/gnu/store" "/home/james/.cache/guix" "/var/guix/daemon-socket/socket" "/home/james/Code/guix")
result: PASS
test-name: utime with AT_SYMLINK_NOFOLLOW
location: /home/james/Code/guix/tests/syscalls.scm:81
source:
+ (test-equal
+ "utime with AT_SYMLINK_NOFOLLOW"
+ '(0 0)
+ (begin
+ (symlink "/nowhere" temp-file)
+ (utime temp-file 0 0 0 0 AT_SYMLINK_NOFOLLOW)
+ (let ((st (lstat temp-file)))
+ (delete-file temp-file)
+ (list (stat:mtime st) (stat:atime st)))))
expected-value: (0 0)
actual-value: (0 0)
result: PASS
test-name: swapon, ENOSYS/ENOENT/EPERM
location: /home/james/Code/guix/tests/syscalls.scm:93
source:
+ (test-assert
+ "swapon, ENOSYS/ENOENT/EPERM"
+ (catch 'system-error
+ (lambda () (swapon "/does-not-exist") #f)
+ (lambda args
+ (memv (system-error-errno args)
+ (list EPERM ENOENT ENOSYS)))))
actual-value: (1 2 38)
result: PASS
test-name: swapoff, ENOSYS/ENOENT/EINVAL/EPERM
location: /home/james/Code/guix/tests/syscalls.scm:101
source:
+ (test-assert
+ "swapoff, ENOSYS/ENOENT/EINVAL/EPERM"
+ (catch 'system-error
+ (lambda () (swapoff "/does-not-exist") #f)
+ (lambda args
+ (memv (system-error-errno args)
+ (list EPERM EINVAL ENOENT ENOSYS)))))
actual-value: (1 22 2 38)
result: PASS
test-name: mkdtemp!
location: /home/james/Code/guix/tests/syscalls.scm:109
source:
+ (test-assert
+ "mkdtemp!"
+ (let* ((tmp (or (getenv "TMPDIR") "/tmp"))
+ (dir (mkdtemp!
+ (string-append tmp "/guix-test-XXXXXX"))))
+ (and (file-exists? dir) (begin (rmdir dir) #t))))
actual-value: #t
result: PASS
test-name: statfs, ENOENT
location: /home/james/Code/guix/tests/syscalls.scm:117
source:
+ (test-equal
+ "statfs, ENOENT"
+ ENOENT
+ (catch 'system-error
+ (lambda () (statfs "/does-not-exist"))
+ (compose system-error-errno list)))
expected-value: 2
actual-value: 2
result: PASS
test-name: statfs
location: /home/james/Code/guix/tests/syscalls.scm:124
source:
+ (test-assert
+ "statfs"
+ (let ((fs (statfs "/")))
+ (and (file-system? fs)
+ (> (file-system-block-size fs) 0)
+ (>= (file-system-blocks-available fs) 0)
+ (>= (file-system-blocks-free fs)
+ (file-system-blocks-available fs)))))
actual-value: #t
result: PASS
test-name: clone
location: /home/james/Code/guix/tests/syscalls.scm:141
source:
+ (test-assert
+ "clone"
+ (match (clone (logior CLONE_NEWUSER SIGCHLD))
+ (0 (primitive-exit 42))
+ (pid (and (not (equal?
+ (readlink (user-namespace pid))
+ (readlink (user-namespace (getpid)))))
+ (match (waitpid pid)
+ ((_ . status) (= 42 (status:exit-val status))))))))
actual-value: #t
result: PASS
test-name: setns
location: /home/james/Code/guix/tests/syscalls.scm:154
source:
+ (test-assert
+ "setns"
+ (match (clone (logior CLONE_NEWUSER SIGCHLD))
+ (0 (primitive-exit 0))
+ (clone-pid
+ (match (pipe)
+ ((in . out)
+ (match (primitive-fork)
+ (0
+ (close in)
+ (call-with-input-file
+ (user-namespace clone-pid)
+ (lambda (port) (setns (port->fdes port) 0)))
+ (write 'done out)
+ (close out)
+ (primitive-exit 0))
+ (fork-pid
+ (close out)
+ (read in)
+ (let ((result
+ (and (equal?
+ (readlink
+ (user-namespace clone-pid))
+ (readlink
+ (user-namespace fork-pid))))))
+ (waitpid clone-pid)
+ (waitpid fork-pid)
+ result))))))))
actual-value: #t
result: PASS
test-name: pivot-root
location: /home/james/Code/guix/tests/syscalls.scm:183
source:
+ (test-equal
+ "pivot-root"
+ 'success!
+ (match (socketpair AF_UNIX SOCK_STREAM 0)
+ ((parent . child)
+ (match (clone (logior CLONE_NEWUSER CLONE_NEWNS SIGCHLD))
+ (0
+ (dynamic-wind
+ (const #t)
+ (lambda ()
+ (close parent)
+ (call-with-temporary-directory
+ (lambda (root)
+ (display "ready\n" child)
+ (read child)
+ (let ((put-old (string-append root "/real-root")))
+ (mount "none" root "tmpfs")
+ (mkdir put-old)
+ (call-with-output-file
+ (string-append root "/test")
+ (lambda (port) (display "testing\n" port)))
+ (pivot-root root put-old)
+ (write (and (file-exists? "/test") 'success!)
+ child)
+ (close child)))))
+ (lambda () (primitive-exit 0))))
+ (pid (close child)
+ (match (read parent)
+ ('ready
+ (call-with-output-file
+ (format #f "/proc/~d/setgroups" pid)
+ (lambda (port) (display "deny" port)))
+ (call-with-output-file
+ (format #f "/proc/~d/uid_map" pid)
+ (lambda (port)
+ (format port "0 ~d 1" (getuid))))
+ (call-with-output-file
+ (format #f "/proc/~d/gid_map" pid)
+ (lambda (port)
+ (format port "0 ~d 1" (getgid))))
+ (display "go!\n" parent)
+ (let ((result (read parent)))
+ (close parent)
+ (and (zero? (match (waitpid pid)
+ ((_ . status)
+ (status:exit-val
+ status))))
+ result)))))))))
expected-value: success!
actual-value: success!
result: PASS
test-name: scandir*, ENOENT
location: /home/james/Code/guix/tests/syscalls.scm:232
source:
+ (test-equal
+ "scandir*, ENOENT"
+ ENOENT
+ (catch 'system-error
+ (lambda () (scandir* "/does/not/exist"))
+ (lambda args (system-error-errno args))))
expected-value: 2
actual-value: 2
result: PASS
test-name: scandir*, ASCII file names
location: /home/james/Code/guix/tests/syscalls.scm:240
source:
+ (test-equal
+ "scandir*, ASCII file names"
+ (scandir
+ (dirname
+ (search-path %load-path "guix/base32.scm"))
+ (const #t)
+ string<?)
+ (match (scandir*
+ (dirname
+ (search-path %load-path "guix/base32.scm")))
+ (((names . properties) ...) names)))
expected-value: ("." ".." "android-repo-download.go" "android-repo-download.scm" "avahi.go" "avahi.scm" "base16.go" "base16.scm" "base32.go" "base32.scm" "base64.go" "base64.scm" "build" "build-system" "build-system.go" "build-system.scm" "bzr-download.go" "bzr-download.scm" "cache.go" "cache.scm" "channels.go" "channels.scm" "ci.go" "ci.scm" "colors.go" "colors.scm" "combinators.go" "combinators.scm" "config.go" "config.scm" "config.scm.in" "cpio.go" "cpio.scm" "cpu.go" "cpu.scm" "cve.go" "cve.scm" "cvs-download.go" "cvs-download.scm" "d3.v3.js" "deprecation.go" "deprecation.scm" "derivations.go" "derivations.scm" "describe.go" "describe.scm" "diagnostics.go" "diagnostics.scm" "discovery.go" "discovery.scm" "docker.go" "docker.scm" "download.go" "download.scm" "elf.go" "elf.scm" "ftp-client.go" "ftp-client.scm" "gexp.go" "gexp.scm" "git-authenticate.go" "git-authenticate.scm" "git-download.go" "git-download.scm" "git.go" "git.scm" "glob.go" "glob.scm" "gnu-maintenance.go" "gnu-maintenance.scm" "gnupg.go" "gnupg.scm" "grafts.go" "grafts.scm" "graph.go" "graph.js" "graph.scm" "hash.go" "hash.scm" "hg-download.go" "hg-download.scm" "http-client.go" "http-client.scm" "i18n.go" "i18n.scm" "import" "inferior.go" "inferior.scm" "ipfs.go" "ipfs.scm" "least-authority.go" "least-authority.scm" "licenses.go" "licenses.scm" "lint.go" "lint.scm" "man-db.scm" "memoization.go" "memoization.scm" "modules.go" "modules.scm" "monad-repl.go" "monad-repl.scm" "monads.go" "monads.scm" "nar.go" "nar.scm" "narinfo.go" "narinfo.scm" "openpgp.go" "openpgp.scm" "packages.go" "packages.scm" "pki.go" "pki.scm" "platform.go" "platform.scm" "platforms" "profiles.go" "profiles.scm" "profiling.go" "profiling.scm" "progress.go" "progress.scm" "quirks.go" "quirks.scm" "read-print.go" "read-print.scm" "records.go" "records.scm" "remote.go" "remote.scm" "repl.go" "repl.scm" "rpm.go" "rpm.scm" "scripts" "scripts.go" "scripts.scm" "search-paths.go" "search-paths.scm" "self.go" "self.scm" "serialization.go" "serialization.scm" "sets.go" "sets.scm" "ssh.go" "ssh.scm" "status.go" "status.scm" "store" "store.go" "store.scm" "substitutes.go" "substitutes.scm" "svn-download.go" "svn-download.scm" "swh.go" "swh.scm" "tests" "tests.go" "tests.scm" "transformations.go" "transformations.scm" "ui.go" "ui.scm" "upstream.go" "upstream.scm" "utils.go" "utils.scm" "workers.go" "workers.scm")
actual-value: ("." ".." "android-repo-download.go" "android-repo-download.scm" "avahi.go" "avahi.scm" "base16.go" "base16.scm" "base32.go" "base32.scm" "base64.go" "base64.scm" "build" "build-system" "build-system.go" "build-system.scm" "bzr-download.go" "bzr-download.scm" "cache.go" "cache.scm" "channels.go" "channels.scm" "ci.go" "ci.scm" "colors.go" "colors.scm" "combinators.go" "combinators.scm" "config.go" "config.scm" "config.scm.in" "cpio.go" "cpio.scm" "cpu.go" "cpu.scm" "cve.go" "cve.scm" "cvs-download.go" "cvs-download.scm" "d3.v3.js" "deprecation.go" "deprecation.scm" "derivations.go" "derivations.scm" "describe.go" "describe.scm" "diagnostics.go" "diagnostics.scm" "discovery.go" "discovery.scm" "docker.go" "docker.scm" "download.go" "download.scm" "elf.go" "elf.scm" "ftp-client.go" "ftp-client.scm" "gexp.go" "gexp.scm" "git-authenticate.go" "git-authenticate.scm" "git-download.go" "git-download.scm" "git.go" "git.scm" "glob.go" "glob.scm" "gnu-maintenance.go" "gnu-maintenance.scm" "gnupg.go" "gnupg.scm" "grafts.go" "grafts.scm" "graph.go" "graph.js" "graph.scm" "hash.go" "hash.scm" "hg-download.go" "hg-download.scm" "http-client.go" "http-client.scm" "i18n.go" "i18n.scm" "import" "inferior.go" "inferior.scm" "ipfs.go" "ipfs.scm" "least-authority.go" "least-authority.scm" "licenses.go" "licenses.scm" "lint.go" "lint.scm" "man-db.scm" "memoization.go" "memoization.scm" "modules.go" "modules.scm" "monad-repl.go" "monad-repl.scm" "monads.go" "monads.scm" "nar.go" "nar.scm" "narinfo.go" "narinfo.scm" "openpgp.go" "openpgp.scm" "packages.go" "packages.scm" "pki.go" "pki.scm" "platform.go" "platform.scm" "platforms" "profiles.go" "profiles.scm" "profiling.go" "profiling.scm" "progress.go" "progress.scm" "quirks.go" "quirks.scm" "read-print.go" "read-print.scm" "records.go" "records.scm" "remote.go" "remote.scm" "repl.go" "repl.scm" "rpm.go" "rpm.scm" "scripts" "scripts.go" "scripts.scm" "search-paths.go" "search-paths.scm" "self.go" "self.scm" "serialization.go" "serialization.scm" "sets.go" "sets.scm" "ssh.go" "ssh.scm" "status.go" "status.scm" "store" "store.go" "store.scm" "substitutes.go" "substitutes.scm" "svn-download.go" "svn-download.scm" "swh.go" "swh.scm" "tests" "tests.go" "tests.scm" "transformations.go" "transformations.scm" "ui.go" "ui.scm" "upstream.go" "upstream.scm" "utils.go" "utils.scm" "workers.go" "workers.scm")
result: PASS
test-name: scandir*, UTF-8 file names
location: /home/james/Code/guix/tests/syscalls.scm:247
source:
+ (test-equal
+ "scandir*, UTF-8 file names"
+ '("." ".." "?" "?")
+ (call-with-temporary-directory
+ (lambda (directory)
+ (let ((creat (pointer->procedure
+ int
+ (dynamic-func "creat" (dynamic-link))
+ (list '* int))))
+ (creat (string->pointer
+ (string-append directory "/?")
+ "UTF-8")
+ 420)
+ (creat (string->pointer
+ (string-append directory "/?")
+ "UTF-8")
+ 420)
+ (let ((locale (setlocale LC_ALL)))
+ (dynamic-wind
+ (lambda () (setlocale LC_ALL "C"))
+ (lambda ()
+ (match (scandir* directory)
+ (((names . properties) ...) names)))
+ (lambda () (setlocale LC_ALL locale))))))))
expected-value: ("." ".." "?" "?")
actual-value: ("." ".." "?" "?")
result: PASS
test-name: scandir*, properties
location: /home/james/Code/guix/tests/syscalls.scm:274
source:
+ (test-assert
+ "scandir*, properties"
+ (let ((directory
+ (dirname
+ (search-path %load-path "guix/base32.scm"))))
+ (every (lambda (entry name)
+ (match entry
+ ((name2 . properties)
+ (and (string=? name2 name)
+ (let* ((full (string-append directory "/" name))
+ (stat (lstat full))
+ (inode (assoc-ref properties 'inode))
+ (type (assoc-ref properties 'type)))
+ (and (= inode (stat:ino stat))
+ (or (eq? type 'unknown)
+ (eq? type (stat:type stat)))))))))
+ (scandir* directory)
+ (scandir directory (const #t) string<?))))
actual-value: #t
result: PASS
test-name: getxattr, setxattr
location: /home/james/Code/guix/tests/syscalls.scm:291
source:
+ (test-assert
+ "getxattr, setxattr"
+ (let ((key "user.translator")
+ (value "/hurd/pfinet\x00")
+ (file (open-file temp-file "w0")))
+ (catch 'system-error
+ (lambda ()
+ (setxattr temp-file key value)
+ (string=? (getxattr temp-file key) value))
+ (lambda args
+ (memv (system-error-errno args) (list ENOTSUP))))))
actual-value: #t
result: PASS
warning: failed to delete /tmp/guix-directory.jpwlzM/??: No such file or directory
warning: failed to delete /tmp/guix-directory.jpwlzM/??: No such file or directory
warning: failed to delete /tmp/guix-directory.jpwlzM: Directory not empty
test-name: fcntl-flock wait
location: /home/james/Code/guix/tests/syscalls.scm:305
source:
+ (test-equal
+ "fcntl-flock wait"
+ 42
+ (let ((file (open-file temp-file "w0b")))
+ (fcntl-flock file 'write-lock)
+ (match (primitive-fork)
+ (0
+ (dynamic-wind
+ (const #t)
+ (lambda ()
+ (let ((file (open-file temp-file "r0b")))
+ (fcntl-flock file 'read-lock)
+ (primitive-exit (read file)))
+ (primitive-exit 1))
+ (lambda () (primitive-exit 2))))
+ (pid (display "hello, world!" file)
+ (force-output file)
+ (sleep 1)
+ (seek file 0 SEEK_SET)
+ (truncate-file file 0)
+ (write 42 file)
+ (force-output file)
+ (fcntl-flock file 'unlock)
+ (match (waitpid pid)
+ ((_ . status)
+ (let ((result (status:exit-val status)))
+ (close-port file)
+ result)))))))
expected-value: 42
actual-value: 42
result: PASS
;;; (errno 11)
warning: failed to delete /tmp/guix-directory.jpwlzM/??: No such file or directory
warning: failed to delete /tmp/guix-directory.jpwlzM/??: No such file or directory
warning: failed to delete /tmp/guix-directory.jpwlzM: Directory not empty
test-name: fcntl-flock non-blocking
location: /home/james/Code/guix/tests/syscalls.scm:344
source:
+ (test-equal
+ "fcntl-flock non-blocking"
+ EAGAIN
+ (match (pipe)
+ ((input . output)
+ (match (primitive-fork)
+ (0
+ (dynamic-wind
+ (const #t)
+ (lambda ()
+ (close-port output)
+ (read-char input)
+ (let ((file (open-file temp-file "w0")))
+ (catch 'flock-error
+ (lambda ()
+ (fcntl-flock file 'write-lock #:wait? #f))
+ (lambda (key errno)
+ (primitive-exit (pk 'errno errno)))))
+ (primitive-exit -1))
+ (lambda () (primitive-exit -2))))
+ (pid (close-port input)
+ (let ((file (open-file temp-file "w0")))
+ (fcntl-flock file 'write-lock)
+ (write 'green-light output)
+ (force-output output)
+ (match (waitpid pid)
+ ((_ . status)
+ (let ((result (status:exit-val status)))
+ (fcntl-flock file 'unlock)
+ (close-port file)
+ result)))))))))
expected-value: 11
actual-value: 11
result: PASS
test-name: lock-file + unlock-file
location: /home/james/Code/guix/tests/syscalls.scm:386
source:
+ (test-equal
+ "lock-file + unlock-file"
+ 'hello
+ (call-with-temporary-directory
+ (lambda (directory)
+ (let* ((file (in-vicinity directory "lock"))
+ (out (lock-file file #:wait? #f)))
+ (display "hello" out)
+ (unlock-file out)
+ (let* ((in (lock-file file "r0")) (content (read in)))
+ (unlock-file in)
+ content)))))
expected-value: hello
actual-value: hello
result: PASS
test-name: set-thread-name
location: /home/james/Code/guix/tests/syscalls.scm:399
source:
+ (test-equal
+ "set-thread-name"
+ "Syscall Test"
+ (let ((name (thread-name)))
+ (set-thread-name "Syscall Test")
+ (let ((new-name (thread-name)))
+ (set-thread-name name)
+ new-name)))
expected-value: "Syscall Test"
actual-value: "Syscall Test"
result: PASS
test-name: all-network-interface-names
location: /home/james/Code/guix/tests/syscalls.scm:407
source:
+ (test-assert
+ "all-network-interface-names"
+ (match (all-network-interface-names)
+ (((? string? names) ..1) (member "lo" names))))
actual-value: ("lo" "eth0")
result: PASS
test-name: network-interface-names
location: /home/james/Code/guix/tests/syscalls.scm:412
source:
+ (test-assert
+ "network-interface-names"
+ (match (remove
+ (lambda (interface)
+ (string-contains interface ":"))
+ (network-interface-names))
+ (((? string? names) ..1)
+ (lset<=
+ string=?
+ names
+ (all-network-interface-names)))))
actual-value: #t
result: PASS
test-name: network-interface-flags
location: /home/james/Code/guix/tests/syscalls.scm:421
source:
+ (test-assert
+ "network-interface-flags"
+ (let* ((sock (socket AF_INET SOCK_STREAM 0))
+ (flags (network-interface-flags sock "lo")))
+ (close-port sock)
+ (and (not (zero? (logand flags IFF_LOOPBACK)))
+ (not (zero? (logand flags IFF_UP))))))
actual-value: #t
result: PASS
test-name: loopback-network-interface?
location: /home/james/Code/guix/tests/syscalls.scm:428
source:
+ (test-equal
+ "loopback-network-interface?"
+ ENODEV
+ (and (loopback-network-interface? "lo")
+ (catch 'system-error
+ (lambda ()
+ (loopback-network-interface? "nonexistent")
+ #f)
+ (lambda args (system-error-errno args)))))
expected-value: 19
actual-value: 19
result: PASS
test-name: loopback-network-interface-running?
location: /home/james/Code/guix/tests/syscalls.scm:438
source:
+ (test-equal
+ "loopback-network-interface-running?"
+ ENODEV
+ (and (network-interface-running? "lo")
+ (catch 'system-error
+ (lambda ()
+ (network-interface-running? "nonexistent")
+ #f)
+ (lambda args (system-error-errno args)))))
expected-value: 19
actual-value: 19
result: PASS
test-name: set-network-interface-flags
location: /home/james/Code/guix/tests/syscalls.scm:449
source:
+ (test-assert
+ "set-network-interface-flags"
+ (let ((sock (socket AF_INET SOCK_STREAM 0)))
+ (catch 'system-error
+ (lambda ()
+ (set-network-interface-flags sock "lo" IFF_UP))
+ (lambda args
+ (close-port sock)
+ (memv (system-error-errno args)
+ (list EPERM EACCES))))))
actual-value: (1 13)
result: PASS
test-name: network-interface-address lo
location: /home/james/Code/guix/tests/syscalls.scm:459
source:
+ (test-equal
+ "network-interface-address lo"
+ (make-socket-address
+ AF_INET
+ (inet-pton AF_INET "127.0.0.1")
+ 0)
+ (let* ((sock (socket AF_INET SOCK_STREAM 0))
+ (addr (network-interface-address sock "lo")))
+ (close-port sock)
+ addr))
expected-value: #(2 2130706433 0)
actual-value: #(2 2130706433 0)
result: PASS
test-name: set-network-interface-address
location: /home/james/Code/guix/tests/syscalls.scm:467
source:
+ (test-assert
+ "set-network-interface-address"
+ (let ((sock (socket AF_INET SOCK_STREAM 0)))
+ (catch 'system-error
+ (lambda ()
+ (set-network-interface-address
+ sock
+ "nonexistent"
+ (make-socket-address
+ AF_INET
+ (inet-pton AF_INET "127.12.14.15")
+ 0)))
+ (lambda args
+ (close-port sock)
+ (memv (system-error-errno args)
+ (list EPERM EACCES))))))
actual-value: (1 13)
result: PASS
test-name: network-interface-netmask lo
location: /home/james/Code/guix/tests/syscalls.scm:481
source:
+ (test-equal
+ "network-interface-netmask lo"
+ (make-socket-address
+ AF_INET
+ (inet-pton AF_INET "255.0.0.0")
+ 0)
+ (let* ((sock (socket AF_INET SOCK_STREAM 0))
+ (addr (network-interface-netmask sock "lo")))
+ (close-port sock)
+ addr))
expected-value: #(2 4278190080 0)
actual-value: #(2 4278190080 0)
result: PASS
test-name: set-network-interface-netmask
location: /home/james/Code/guix/tests/syscalls.scm:489
source:
+ (test-assert
+ "set-network-interface-netmask"
+ (let ((sock (socket AF_INET SOCK_STREAM 0)))
+ (catch 'system-error
+ (lambda ()
+ (set-network-interface-netmask
+ sock
+ "nonexistent"
+ (make-socket-address
+ AF_INET
+ (inet-pton AF_INET "255.0.0.0")
+ 0)))
+ (lambda args
+ (close-port sock)
+ (memv (system-error-errno args)
+ (list EPERM EACCES))))))
actual-value: (1 13)
result: PASS
test-name: network-interfaces returns one or more interfaces
location: /home/james/Code/guix/tests/syscalls.scm:502
source:
+ (test-equal
+ "network-interfaces returns one or more interfaces"
+ '(#t #t #t)
+ (match (network-interfaces)
+ ((interfaces ..1)
+ (list (every interface? interfaces)
+ (every string? (map interface-name interfaces))
+ (every (lambda (sockaddr)
+ (or (vector? sockaddr) (not sockaddr)))
+ (map interface-address interfaces))))))
expected-value: (#t #t #t)
actual-value: (#t #t #t)
result: PASS
test-name: network-interfaces returns "lo"
location: /home/james/Code/guix/tests/syscalls.scm:514
source:
+ (test-equal
+ "network-interfaces returns \"lo\""
+ (list #t
+ (make-socket-address
+ AF_INET
+ (inet-pton AF_INET "127.0.0.1")
+ 0))
+ (match (filter
+ (lambda (interface)
+ (string=? "lo" (interface-name interface)))
+ (network-interfaces))
+ ((loopbacks ..1)
+ (list (every (lambda (lo)
+ (not (zero? (logand
+ IFF_LOOPBACK
+ (interface-flags lo)))))
+ loopbacks)
+ (match (find (lambda (lo)
+ (= AF_INET
+ (sockaddr:fam (interface-address lo))))
+ loopbacks)
+ (#f #f)
+ (lo (interface-address lo)))))))
expected-value: (#t #(2 2130706433 0))
actual-value: (#t #(2 2130706433 0))
result: PASS
test-name: add-network-route/gateway
location: /home/james/Code/guix/tests/syscalls.scm:530
source:
+ (test-assert
+ "add-network-route/gateway"
+ (let ((sock (socket AF_INET SOCK_STREAM 0))
+ (gateway
+ (make-socket-address
+ AF_INET
+ (inet-pton AF_INET "192.168.0.1")
+ 0)))
+ (catch 'system-error
+ (lambda ()
+ (add-network-route/gateway sock gateway))
+ (lambda args
+ (close-port sock)
+ (memv (system-error-errno args)
+ (list EPERM EACCES))))))
actual-value: (1 13)
result: PASS
test-name: delete-network-route
location: /home/james/Code/guix/tests/syscalls.scm:543
source:
+ (test-assert
+ "delete-network-route"
+ (let ((sock (socket AF_INET SOCK_STREAM 0))
+ (destination
+ (make-socket-address AF_INET INADDR_ANY 0)))
+ (catch 'system-error
+ (lambda ()
+ (delete-network-route sock destination))
+ (lambda args
+ (close-port sock)
+ (memv (system-error-errno args)
+ (list EPERM EACCES))))))
actual-value: (1 13)
result: PASS
test-name: tcgetattr ENOTTY
location: /home/james/Code/guix/tests/syscalls.scm:553
source:
+ (test-equal
+ "tcgetattr ENOTTY"
+ ENOTTY
+ (catch 'system-error
+ (lambda ()
+ (call-with-input-file
+ "/dev/null"
+ (lambda (port) (tcgetattr (fileno port)))))
+ (compose system-error-errno list)))
expected-value: 25
actual-value: 25
result: PASS
test-name: tcgetattr
location: /home/james/Code/guix/tests/syscalls.scm:567
source:
+ (test-assert
+ "tcgetattr"
+ (let ((termios (tcgetattr 0)))
+ (and (termios? termios)
+ (> (termios-input-speed termios) 0)
+ (> (termios-output-speed termios) 0))))
actual-value: #t
result: PASS
test-name: tcsetattr
location: /home/james/Code/guix/tests/syscalls.scm:573
source:
+ (test-assert
+ "tcsetattr"
+ (let ((first (tcgetattr 0)))
+ (tcsetattr 0 (tcsetattr-action TCSANOW) first)
+ (equal? first (tcgetattr 0))))
actual-value: #t
result: PASS
test-name: terminal-window-size ENOTTY
location: /home/james/Code/guix/tests/syscalls.scm:578
source:
+ (test-assert
+ "terminal-window-size ENOTTY"
+ (call-with-input-file
+ "/dev/null"
+ (lambda (port)
+ (catch 'system-error
+ (lambda () (terminal-window-size port))
+ (lambda args
+ (memv (system-error-errno args)
+ (list ENOTTY EINVAL)))))))
actual-value: (25 22)
result: PASS
test-name: terminal-columns
location: /home/james/Code/guix/tests/syscalls.scm:589
source:
+ (test-assert
+ "terminal-columns"
+ (> (terminal-columns) 0))
actual-value: #t
result: PASS
test-name: terminal-columns non-file port
location: /home/james/Code/guix/tests/syscalls.scm:592
source:
+ (test-assert
+ "terminal-columns non-file port"
+ (> (terminal-columns
+ (open-input-string
+ "Join us now, share the software!"))
+ 0))
actual-value: #t
result: PASS
test-name: terminal-rows
location: /home/james/Code/guix/tests/syscalls.scm:596
source:
+ (test-assert
+ "terminal-rows"
+ (> (terminal-rows) 0))
actual-value: #t
result: PASS
test-name: terminal-string-width English
location: /home/james/Code/guix/tests/syscalls.scm:599
source:
+ (test-equal
+ "terminal-string-width English"
+ 5
+ (terminal-string-width "hello"))
expected-value: 5
actual-value: 5
result: PASS
test-name: terminal-string-width Japanese
location: /home/james/Code/guix/tests/syscalls.scm:605
source:
+ (test-equal
+ "terminal-string-width Japanese"
+ 6
+ (terminal-string-width "???"))
result: SKIP
test-name: openpty
location: /home/james/Code/guix/tests/syscalls.scm:609
source:
+ (test-assert
+ "openpty"
+ (let ((head inferior (openpty)))
+ (and (integer? head)
+ (integer? inferior)
+ (let ((port (fdopen inferior "r+0")))
+ (and (isatty? port)
+ (begin (close-port port) (close-fdes head) #t))))))
actual-value: #t
result: PASS
test-name: openpty + login-tty
location: /home/james/Code/guix/tests/syscalls.scm:619
source:
+ (test-equal
+ "openpty + login-tty"
+ '(hello world)
+ (let ((head inferior (openpty)))
+ (match (primitive-fork)
+ (0
+ (dynamic-wind
+ (const #t)
+ (lambda ()
+ (setvbuf (current-input-port) 'none)
+ (close-fdes head)
+ (login-tty inferior)
+ (write (read))
+ (read))
+ (lambda () (primitive-_exit 42))))
+ (pid (close-fdes inferior)
+ (let ((head (fdopen head "r+0")))
+ (write '(hello world) head)
+ (let ((result (read head)))
+ (close-port head)
+ (waitpid pid)
+ result))))))
expected-value: (hello world)
actual-value: (hello world)
result: PASS
test-name: utmpx-entries
location: /home/james/Code/guix/tests/syscalls.scm:643
source:
+ (test-assert
+ "utmpx-entries"
+ (match (utmpx-entries)
+ (((? utmpx? entries) ...)
+ (every (lambda (entry)
+ (match (utmpx-user entry)
+ ((? string?)
+ (or (not (memv (utmpx-login-type entry)
+ (list (login-type INIT_PROCESS)
+ (login-type LOGIN_PROCESS)
+ (login-type USER_PROCESS))))
+ (> (utmpx-pid entry) 0)))
+ (#f #t)))
+ entries))))
actual-value: #t
result: PASS
test-name: read-utmpx, EOF
location: /home/james/Code/guix/tests/syscalls.scm:660
source:
+ (test-assert
+ "read-utmpx, EOF"
+ (eof-object? (read-utmpx (%make-void-port "r"))))
actual-value: #t
result: PASS
test-name: read-utmpx
location: /home/james/Code/guix/tests/syscalls.scm:665
source:
+ (test-assert
+ "read-utmpx"
+ (let ((result
+ (call-with-input-file
+ "/var/run/utmpx"
+ read-utmpx)))
+ (or (utmpx? result) (eof-object? result))))
result: SKIP
test-name: add-to-entropy-count
location: /home/james/Code/guix/tests/syscalls.scm:671
source:
+ (test-equal
+ "add-to-entropy-count"
+ EPERM
+ (call-with-output-file
+ "/dev/urandom"
+ (lambda (port)
+ (catch 'system-error
+ (lambda () (add-to-entropy-count port 77) #f)
+ (lambda args (system-error-errno args))))))
expected-value: 1
actual-value: 1
result: PASS
warning: failed to delete /tmp/guix-directory.jpwlzM/??: No such file or directory
warning: failed to delete /tmp/guix-directory.jpwlzM/??: No such file or directory
warning: failed to delete /tmp/guix-directory.jpwlzM: Directory not empty
RUN: tests/offload
==================
test-name: #f
location: /home/james/Code/guix/tests/offload.scm:55
source:
+ (test-assert
+ (machine-matches?
+ (deprecated-build-machine "i686-linux")
+ (build-requirements (system "i686-linux"))))
actual-value: #t
result: PASS
test-name: #f
location: /home/james/Code/guix/tests/offload.scm:60
source:
+ (test-assert
+ (machine-matches?
+ (new-build-machine '("i686-linux"))
+ (build-requirements (system "i686-linux"))))
actual-value: #t
result: PASS
test-name: #f
location: /home/james/Code/guix/tests/offload.scm:66
source:
+ (test-assert
+ (machine-matches?
+ (new-build-machine
+ '("armhf-linux"
+ "aarch64-linux"
+ "i686-linux"
+ "x86_64-linux"))
+ (build-requirements (system "armhf-linux"))))
actual-value: #t
result: PASS
/home/james/Code/guix/tests/offload.scm:41:2: warning: The 'system' field is deprecated, please use 'systems' instead.
FAIL: tests/guix-build-branch
=============================
+ guix build --version
guix build (GNU Guix) 1.3.0.67051-2a6d96
Copyright (C) 2024 the Guix authors
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
+ guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)'
++ guix build guile-gcrypt -d
accepted connection from pid 16970, user james
+ orig_drv=/home/james/Code/guix/test-tmp/store/9s2c3ja1pcfj6qg41v9hx7nlan0921cg-guile-gcrypt-0.4.0.drv
++ guix build guile-gcrypt --with-branch=guile-gcrypt=master -d
accepted connection from pid 16974, user james
updating checkout of 'https://notabug.org/cwebber/guile-gcrypt.git'...
guix build: error: cannot fetch branch 'master' from https://notabug.org/cwebber/guile-gcrypt.git: the SSL certificate is invalid
+ latest_drv=
FAIL tests/guix-build-branch.sh (exit status: 1)
FAIL: tests/guix-git-authenticate
=================================
+ '[' -d /home/james/Code/guix/.git ']'
+ guile -c '(use-modules (git))
(member "refs/heads/keyring" (branch-list (repository-open ".")))'
+ intro_commit=9edb3f66fd807b096b48283debdcddccfea34bad
+ intro_signer='BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA'
+ cache_key=test-17127
+ guix git authenticate 9edb3f66fd807b096b48283debdcddccfea34bad 'BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA' --cache-key=test-17127 --stats --end=9549f0283a78fe36f2d4ff2a04ef8ad6b0c02604
guix git: error: Git error: cannot locate remote-tracking branch 'keyring'
+ v1_2_0_commit=a099685659b4bfa6b3218f84953cbb7ff9e88063
+ guix git authenticate 9edb3f66fd807b096b48283debdcddccfea34bad 'BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA' --cache-key=test-17127 --stats --end=a099685659b4bfa6b3218f84953cbb7ff9e88063
guix git: error: Git error: cannot locate remote-tracking branch 'keyring'
FAIL tests/guix-git-authenticate.sh (exit status: 1)
FAIL: tests/guix-home
=====================
+ set -e
+ guix home --version
guix home (GNU Guix) 1.3.0.67051-2a6d96
Copyright (C) 2024 the Guix authors
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
++ guile -c '(use-modules (guix config))(display %localstatedir)'
+ localstatedir=/var
++ guile -c '(use-modules (guix config))(display %storedir)'
+ NIX_STORE_DIR=/gnu/store
+ GUIX_DAEMON_SOCKET=/var/guix/daemon-socket/socket
+ export NIX_STORE_DIR GUIX_DAEMON_SOCKET
+ guile -c '(use-modules (guix)) (exit (false-if-exception (open-connection)))'
++ dirname /gnu/store
+ STORE_PARENT=/gnu
+ export STORE_PARENT
+ test /gnu = /
++ mktemp -d
+ test_directory=/tmp/tmp.xj1nC1IQQ6
+ trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT
+ cd /tmp/tmp.xj1nC1IQQ6
+ cat
+ echo -n '# dot-bashrc test file for guix home'
+ guix home extension-graph home.scm
+ grep 'label = "home-activation"'
"140501370095072" [label = "home-activation", shape = box, fontname = sans];
+ guix home extension-graph home.scm
+ grep 'label = "home-symlink-manager"'
"140622484811488" [label = "home-symlink-manager", shape = box, fontname = sans];
+ guix home extension-graph home.scm
+ grep 'label = "home"'
"139816843624224" [label = "home", shape = box, fontname = sans];
+ guix home shepherd-graph home.scm
guix home: error: service of type 'home-shepherd' not found
+ container_supported
+ guile -c '((@ (guix scripts environment) assert-container-features))'
+ return 0
+ SHELL=bash
+ guix home container home.scm -- true
guix home: error: mount: mount "none" on "/tmp/guix-directory.OoVB5U/sys": Operation not permitted
+ chmod -Rf +w /tmp/tmp.xj1nC1IQQ6
+ rm -rf /tmp/tmp.xj1nC1IQQ6
FAIL tests/guix-home.sh (exit status: 1)
FAIL: tests/guix-environment-container
======================================
+ set -e
+ guix environment --version
guix environment (GNU Guix) 1.3.0.67051-2a6d96
Copyright (C) 2024 the Guix authors
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
+ guile -c '((@ (guix scripts environment) assert-container-features))'
+ tmpdir=t-guix-environment-19776
+ trap 'rm -r "$tmpdir"' EXIT
+ mkdir t-guix-environment-19776
+ guix environment --container --ad-hoc --bootstrap guile-bootstrap -- guile -c '(exit 42)'
accepted connection from pid 19787, user james
guix environment: error: mount: mount "none" on "/tmp/guix-directory.G0PyvX/sys": Operation not permitted
+ test 1 = 42
+ rm -r t-guix-environment-19776
FAIL tests/guix-environment-container.sh (exit status: 1)
reply other threads:[~2024-11-10 14:18 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CABwVXmyR+SLP0M1V4TFL7RX4=prmKXGokuxd9AE20yygWoA29A@mail.gmail.com' \
--to=j.e.m.jackson@gmail.com \
--cc=74286@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).