all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#43859: Test Suite Failures
@ 2020-10-07 23:30 Raphael Gosselin
  2020-10-12 12:20 ` Ludovic Courtès
  0 siblings, 1 reply; 3+ messages in thread
From: Raphael Gosselin @ 2020-10-07 23:30 UTC (permalink / raw)
  To: 43859


[-- Attachment #1.1: Type: text/plain, Size: 201 bytes --]

Guix: 1.1.0
Guile: 3.0.4
Guile-Gcrypt: 0.3.0
GnuTLS: 3.6.12
Guile-SQLite3: 0.1.3
Guile-Git: 0.3.0
Guile-JSON: 4.3.2
zlib: 1.2.11
Make: 4.3
Guile-SSH: 0.13.1
libgcrypt: 1.8.5
sqlite3: 3.31.1
g++: 9.3.0

[-- Attachment #1.2: Type: text/html, Size: 394 bytes --]

[-- Attachment #2: builders.log --]
[-- Type: application/octet-stream, Size: 2484 bytes --]

random seed for tests: 1602119785
warning: SQLite database is busy
test-name: url-fetch
location: /home/raph/guix-1.1.0/tests/builders.scm:50
source:
+ (test-assert
+   "url-fetch"
+   (let* ((url '("http://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz"
+                 "ftp://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz"))
+          (hash (nix-base32-string->bytevector
+                  "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"))
+          (drv (url-fetch*
+                 %store
+                 url
+                 'sha256
+                 hash
+                 #:guile
+                 %bootstrap-guile))
+          (out-path (derivation->output-path drv)))
+     (and (build-derivations %store (list drv))
+          (file-exists? out-path)
+          (valid-path? %store out-path))))
actual-value: #f
actual-error:
+ (wrong-type-arg
+   "struct-vtable"
+   "Wrong type argument in position 1 (expecting struct): ~S"
+   (#f)
+   (#f))
result: FAIL

test-name: url-fetch, file
location: /home/raph/guix-1.1.0/tests/builders.scm:62
source:
+ (test-assert
+   "url-fetch, file"
+   (let* ((file (search-path %load-path "guix.scm"))
+          (hash (call-with-input-file file port-sha256))
+          (out (url-fetch* %store file 'sha256 hash)))
+     (and (file-exists? out) (valid-path? %store out))))
actual-value: #f
actual-error:
+ (wrong-type-arg
+   "struct-vtable"
+   "Wrong type argument in position 1 (expecting struct): ~S"
+   (#f)
+   (#f))
result: FAIL

test-name: url-fetch, file URI
location: /home/raph/guix-1.1.0/tests/builders.scm:69
source:
+ (test-assert
+   "url-fetch, file URI"
+   (let* ((file (search-path %load-path "guix.scm"))
+          (hash (call-with-input-file file port-sha256))
+          (out (url-fetch*
+                 %store
+                 (string-append
+                   "file://"
+                   (canonicalize-path file))
+                 'sha256
+                 hash)))
+     (and (file-exists? out) (valid-path? %store out))))
actual-value: #f
actual-error:
+ (wrong-type-arg
+   "struct-vtable"
+   "Wrong type argument in position 1 (expecting struct): ~S"
+   (#f)
+   (#f))
result: FAIL

test-name: gnu-build-system
location: /home/raph/guix-1.1.0/tests/builders.scm:78
source:
+ (test-assert
+   "gnu-build-system"
+   (build-system? gnu-build-system))
actual-value: #t
result: PASS

warning: build daemon error: #<&store-protocol-error message: "setting journal mode: database is locked" status: 1>

[-- Attachment #3: crate.log --]
[-- Type: application/octet-stream, Size: 12512 bytes --]

test-name: guix-package->crate-name
location: /home/raph/guix-1.1.0/tests/crate.scm:238
source:
+ (test-equal
+   "guix-package->crate-name"
+   "rustc-serialize"
+   (guix-package->crate-name
+     (dummy-package
+       "rust-rustc-serialize"
+       (source
+         (dummy-origin
+           (uri (crate-uri "rustc-serialize" "1.0")))))))
expected-value: "rustc-serialize"
actual-value: "rustc-serialize"
result: PASS

test-name: crate->guix-package
location: /home/raph/guix-1.1.0/tests/crate.scm:246
source:
+ (test-assert
+   "crate->guix-package"
+   (mock ((guix http-client)
+          http-fetch
+          (lambda (url . rest)
+            (match url
+                   ("https://crates.io/api/v1/crates/foo"
+                    (open-input-string test-foo-crate))
+                   ("https://crates.io/api/v1/crates/foo/1.0.0/download"
+                    (set! test-source-hash
+                      (bytevector->nix-base32-string
+                        (sha256
+                          (string->bytevector "empty file\n" "utf-8"))))
+                    (open-input-string "empty file\n"))
+                   ("https://crates.io/api/v1/crates/foo/1.0.0/dependencies"
+                    (open-input-string test-foo-dependencies))
+                   (_ (error "Unexpected URL: " url)))))
+         (match (crate->guix-package "foo")
+                (('package
+                  ('name "rust-foo")
+                  ('version "1.0.0")
+                  ('source
+                   ('origin
+                    ('method 'url-fetch)
+                    ('uri ('crate-uri "foo" 'version))
+                    ('file-name
+                     ('string-append 'name "-" 'version ".tar.gz"))
+                    ('sha256 ('base32 (? string? hash)))))
+                  ('build-system 'cargo-build-system)
+                  ('arguments
+                   ('quasiquote
+                    ('#:cargo-inputs
+                     (("rust-bar" ('unquote rust-bar))))))
+                  ('home-page "http://example.com")
+                  ('synopsis "summary")
+                  ('description "summary")
+                  ('license ('list 'license:expat 'license:asl2.0)))
+                 (string=? test-source-hash hash))
+                (x (pk 'fail x #f)))))
actual-value: #f
actual-error:
+ (json-invalid #<input: string 7f70dcf8a8c0>)
result: FAIL

test-name: cargo-recursive-import
location: /home/raph/guix-1.1.0/tests/crate.scm:284
source:
+ (test-assert
+   "cargo-recursive-import"
+   (mock ((guix http-client)
+          http-fetch
+          (lambda (url . rest)
+            (match url
+                   ("https://crates.io/api/v1/crates/root"
+                    (open-input-string test-root-crate))
+                   ("https://crates.io/api/v1/crates/root/1.0.0/download"
+                    (set! test-source-hash
+                      (bytevector->nix-base32-string
+                        (sha256
+                          (string->bytevector "empty file\n" "utf-8"))))
+                    (open-input-string "empty file\n"))
+                   ("https://crates.io/api/v1/crates/root/1.0.0/dependencies"
+                    (open-input-string test-root-dependencies))
+                   ("https://crates.io/api/v1/crates/intermediate-1"
+                    (open-input-string test-intermediate-1-crate))
+                   ("https://crates.io/api/v1/crates/intermediate-1/1.0.0/download"
+                    (set! test-source-hash
+                      (bytevector->nix-base32-string
+                        (sha256
+                          (string->bytevector "empty file\n" "utf-8"))))
+                    (open-input-string "empty file\n"))
+                   ("https://crates.io/api/v1/crates/intermediate-1/1.0.0/dependencies"
+                    (open-input-string
+                      test-intermediate-1-dependencies))
+                   ("https://crates.io/api/v1/crates/intermediate-2"
+                    (open-input-string test-intermediate-2-crate))
+                   ("https://crates.io/api/v1/crates/intermediate-2/1.0.0/download"
+                    (set! test-source-hash
+                      (bytevector->nix-base32-string
+                        (sha256
+                          (string->bytevector "empty file\n" "utf-8"))))
+                    (open-input-string "empty file\n"))
+                   ("https://crates.io/api/v1/crates/intermediate-2/1.0.0/dependencies"
+                    (open-input-string
+                      test-intermediate-2-dependencies))
+                   ("https://crates.io/api/v1/crates/leaf-alice"
+                    (open-input-string test-leaf-alice-crate))
+                   ("https://crates.io/api/v1/crates/leaf-alice/1.0.0/download"
+                    (set! test-source-hash
+                      (bytevector->nix-base32-string
+                        (sha256
+                          (string->bytevector "empty file\n" "utf-8"))))
+                    (open-input-string "empty file\n"))
+                   ("https://crates.io/api/v1/crates/leaf-alice/1.0.0/dependencies"
+                    (open-input-string test-leaf-alice-dependencies))
+                   ("https://crates.io/api/v1/crates/leaf-bob"
+                    (open-input-string test-leaf-bob-crate))
+                   ("https://crates.io/api/v1/crates/leaf-bob/1.0.0/download"
+                    (set! test-source-hash
+                      (bytevector->nix-base32-string
+                        (sha256
+                          (string->bytevector "empty file\n" "utf-8"))))
+                    (open-input-string "empty file\n"))
+                   ("https://crates.io/api/v1/crates/leaf-bob/1.0.0/dependencies"
+                    (open-input-string test-leaf-bob-dependencies))
+                   (_ (error "Unexpected URL: " url)))))
+         (match (crate-recursive-import "root")
+                ((('package
+                   ('name "rust-leaf-alice")
+                   ('version (? string? ver))
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('crate-uri "leaf-alice" 'version))
+                     ('file-name
+                      ('string-append 'name "-" 'version ".tar.gz"))
+                     ('sha256 ('base32 (? string? hash)))))
+                   ('build-system 'cargo-build-system)
+                   ('home-page "http://example.com")
+                   ('synopsis "summary")
+                   ('description "summary")
+                   ('license ('list 'license:expat 'license:asl2.0)))
+                  ('package
+                   ('name "rust-leaf-bob")
+                   ('version (? string? ver))
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('crate-uri "leaf-bob" 'version))
+                     ('file-name
+                      ('string-append 'name "-" 'version ".tar.gz"))
+                     ('sha256 ('base32 (? string? hash)))))
+                   ('build-system 'cargo-build-system)
+                   ('home-page "http://example.com")
+                   ('synopsis "summary")
+                   ('description "summary")
+                   ('license ('list 'license:expat 'license:asl2.0)))
+                  ('package
+                   ('name "rust-intermediate-2")
+                   ('version (? string? ver))
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('crate-uri "intermediate-2" 'version))
+                     ('file-name
+                      ('string-append 'name "-" 'version ".tar.gz"))
+                     ('sha256 ('base32 (? string? hash)))))
+                   ('build-system 'cargo-build-system)
+                   ('arguments
+                    ('quasiquote
+                     ('#:cargo-inputs
+                      (("rust-leaf-bob" ('unquote rust-leaf-bob))))))
+                   ('home-page "http://example.com")
+                   ('synopsis "summary")
+                   ('description "summary")
+                   ('license ('list 'license:expat 'license:asl2.0)))
+                  ('package
+                   ('name "rust-intermediate-1")
+                   ('version (? string? ver))
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('crate-uri "intermediate-1" 'version))
+                     ('file-name
+                      ('string-append 'name "-" 'version ".tar.gz"))
+                     ('sha256 ('base32 (? string? hash)))))
+                   ('build-system 'cargo-build-system)
+                   ('arguments
+                    ('quasiquote
+                     ('#:cargo-inputs
+                      (("rust-intermediate-2"
+                        ('unquote rust-intermediate-2))
+                       ("rust-leaf-alice" ('unquote rust-leaf-alice))
+                       ("rust-leaf-bob" ('unquote rust-leaf-bob))))))
+                   ('home-page "http://example.com")
+                   ('synopsis "summary")
+                   ('description "summary")
+                   ('license ('list 'license:expat 'license:asl2.0)))
+                  ('package
+                   ('name "rust-root")
+                   ('version (? string? ver))
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('crate-uri "root" 'version))
+                     ('file-name
+                      ('string-append 'name "-" 'version ".tar.gz"))
+                     ('sha256 ('base32 (? string? hash)))))
+                   ('build-system 'cargo-build-system)
+                   ('arguments
+                    ('quasiquote
+                     ('#:cargo-inputs
+                      (("rust-intermediate-1"
+                        ('unquote rust-intermediate-1))
+                       ("rust-intermediate-2"
+                        ('unquote rust-intermediate-2))
+                       ("rust-leaf-alice" ('unquote rust-leaf-alice))
+                       ("rust-leaf-bob" ('unquote rust-leaf-bob))))))
+                   ('home-page "http://example.com")
+                   ('synopsis "summary")
+                   ('description "summary")
+                   ('license ('list 'license:expat 'license:asl2.0))))
+                 #t)
+                (x (pk 'fail x #f)))))
actual-value: #f
actual-error:
+ (json-invalid #<input: string 7f70dce0b000>)
result: FAIL

test-name: licenses: MIT OR Apache-2.0
location: /home/raph/guix-1.1.0/tests/crate.scm:440
source:
+ (test-equal
+   "licenses: MIT OR Apache-2.0"
+   '(license:expat license:asl2.0)
+   (string->license "MIT OR Apache-2.0"))
expected-value: (license:expat license:asl2.0)
actual-value: (license:expat license:asl2.0)
result: PASS

test-name: licenses: Apache-2.0 / MIT
location: /home/raph/guix-1.1.0/tests/crate.scm:444
source:
+ (test-equal
+   "licenses: Apache-2.0 / MIT"
+   '(license:asl2.0 license:expat)
+   (string->license "Apache-2.0 / MIT"))
expected-value: (license:asl2.0 license:expat)
actual-value: (license:asl2.0 license:expat)
result: PASS

test-name: licenses: Apache-2.0 WITH LLVM-exception
location: /home/raph/guix-1.1.0/tests/crate.scm:448
source:
+ (test-equal
+   "licenses: Apache-2.0 WITH LLVM-exception"
+   '(license:asl2.0 unknown-license!)
+   (string->license
+     "Apache-2.0 WITH LLVM-exception"))
expected-value: (license:asl2.0 unknown-license!)
actual-value: (license:asl2.0 unknown-license!)
result: PASS

test-name: licenses: MIT/Apache-2.0 AND BSD-2-Clause
location: /home/raph/guix-1.1.0/tests/crate.scm:452
source:
+ (test-equal
+   "licenses: MIT/Apache-2.0 AND BSD-2-Clause"
+   '(license:expat license:asl2.0 unknown-license!)
+   (string->license
+     "MIT/Apache-2.0 AND BSD-2-Clause"))
expected-value: (license:expat license:asl2.0 unknown-license!)
actual-value: (license:expat license:asl2.0 unknown-license!)
result: PASS

test-name: licenses: MIT/Apache-2.0
location: /home/raph/guix-1.1.0/tests/crate.scm:456
source:
+ (test-equal
+   "licenses: MIT/Apache-2.0"
+   '(license:expat license:asl2.0)
+   (string->license "MIT/Apache-2.0"))
expected-value: (license:expat license:asl2.0)
actual-value: (license:expat license:asl2.0)
result: PASS

random seed for tests: 1602121363

[-- Attachment #4: channels.log --]
[-- Type: application/octet-stream, Size: 14027 bytes --]

test-name: channel-instance-metadata returns default if .guix-channel does not exist
location: /home/raph/guix-1.1.0/tests/channels.scm:98
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/raph/guix-1.1.0/tests/channels.scm:104
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/raph/guix-1.1.0/tests/channels.scm:108
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/raph/guix-1.1.0/tests/channels.scm:113
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/raph/guix-1.1.0/tests/channels.scm:119
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/raph/guix-1.1.0/tests/channels.scm:126
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/raph/guix-1.1.0/tests/channels.scm:133
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)
+            latest-repository-commit
+            (lambda* (store url #:key ref)
+              (match url
+                     ("test" (values test-dir 'whatever))
+                     (_ (values "/not-important" 'not-important)))))
+           (let ((instances
+                   (latest-channel-instances #f (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/raph/guix-1.1.0/tests/channels.scm:150
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)
+            latest-repository-commit
+            (lambda* (store url #:key ref)
+              (match url
+                     ("test" (values test-dir 'whatever))
+                     (_ (values "/not-important" 'not-important)))))
+           (let ((instances
+                   (latest-channel-instances #f (list channel))))
+             (and (= 2 (length instances))
+                  (lset= eq?
+                         '(test test-channel)
+                         (map (compose channel-name channel-instance-channel)
+                              instances))
+                  (find (lambda (instance)
+                          (and (eq? (channel-name
+                                      (channel-instance-channel instance))
+                                    'test-channel)
+                               (string=?
+                                 (channel-commit
+                                   (channel-instance-channel instance))
+                                 "abc1234")))
+                        instances))))))
actual-value: #<<channel-instance> channel: #<<channel> name: test-channel url: "https://example.com/test-channel" branch: "master" commit: "abc1234" location: ((line . 158) (column . 19) (filename . "guix/channels.scm"))> commit: not-important checkout: "/not-important">
result: PASS

test-name: channel-instances->manifest
location: /home/raph/guix-1.1.0/tests/channels.scm:177
source:
+ (test-assert
+   "channel-instances->manifest"
+   (let* ((spec (lambda deps
+                  `(channel
+                     (version 0)
+                     (dependencies
+                       ,@(map (lambda (dep)
+                                `(channel
+                                   (name ,dep)
+                                   (url "http://example.org")))
+                              deps)))))
+          (guix (make-instance #:name 'guix))
+          (instance0 (make-instance #:name 'a))
+          (instance1
+            (make-instance #:name 'b #:spec (spec 'a)))
+          (instance2
+            (make-instance #:name 'c #:spec (spec 'b)))
+          (instance3
+            (make-instance #:name 'd #:spec (spec 'c 'a))))
+     (%graft? #f)
+     (let ((source (channel-instance-checkout guix)))
+       (mkdir (string-append source "/build-aux"))
+       (call-with-output-file
+         (string-append
+           source
+           "/build-aux/build-self.scm")
+         (lambda (port)
+           (write '(begin
+                     (use-modules (guix) (gnu packages bootstrap))
+                     (lambda _ (package->derivation %bootstrap-guile)))
+                  port))))
+     (with-store
+       store
+       (let ()
+         (define manifest
+           (run-with-store
+             store
+             (channel-instances->manifest
+               (list guix
+                     instance0
+                     instance1
+                     instance2
+                     instance3))))
+         (define entries (manifest-entries manifest))
+         (define (depends? drv in out)
+           (let ((set (list->set
+                        (requisites
+                          store
+                          (list (derivation-file-name drv)))))
+                 (in (map derivation-file-name in))
+                 (out (map derivation-file-name out)))
+             (and (every (cut set-contains? set <>) in)
+                  (not (any (cut set-contains? set <>) out)))))
+         (define (lookup name)
+           (run-with-store
+             store
+             (lower-object
+               (manifest-entry-item
+                 (manifest-lookup
+                   manifest
+                   (manifest-pattern (name name)))))))
+         (let ((drv-guix (lookup "guix"))
+               (drv0 (lookup "a"))
+               (drv1 (lookup "b"))
+               (drv2 (lookup "c"))
+               (drv3 (lookup "d")))
+           (and (depends?
+                  drv-guix
+                  '()
+                  (list drv0 drv1 drv2 drv3))
+                (depends? drv0 (list) (list drv1 drv2 drv3))
+                (depends? drv1 (list drv0) (list drv2 drv3))
+                (depends? drv2 (list drv1) (list drv3))
+                (depends? drv3 (list drv2 drv0) (list))))))))
actual-value: #t
result: PASS

test-name: channel-news, no news
location: /home/raph/guix-1.1.0/tests/channels.scm:254
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))))))
Initialized empty Git repository in /tmp/guix-directory.4S462v/.git/
[master (root-commit) 7fcbd75] the commit
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
expected-value: ()
actual-value: ()
result: PASS

test-name: channel-news, one entry
location: /home/raph/guix-1.1.0/tests/channels.scm:266
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")))))))
Initialized empty Git repository in /tmp/guix-directory.mTNwTv/.git/
[master (root-commit) 24901ba] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 .guix-channel
[master 47ae9bd] second commit
 1 file changed, 1 insertion(+)
 create mode 100644 src/a.txt
[master 17750b4] third commit
 1 file changed, 1 insertion(+)
 create mode 100644 news.scm
[master 938b414] fourth commit
 1 file changed, 1 insertion(+)
 create mode 100644 src/b.txt
[master ad7e153] fifth commit
 1 file changed, 1 insertion(+), 1 deletion(-)
actual-value: #f
result: FAIL

random seed for tests: 1602121694
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'...

[-- Attachment #5: gem.log --]
[-- Type: application/octet-stream, Size: 5039 bytes --]

test-name: gem->guix-package
location: /home/raph/guix-1.1.0/tests/gem.scm:76
source:
+ (test-assert
+   "gem->guix-package"
+   (mock ((guix http-client)
+          http-fetch
+          (lambda (url . rest)
+            (match url
+                   ("https://rubygems.org/api/v1/gems/foo.json"
+                    (values
+                      (open-input-string test-foo-json)
+                      (string-length test-foo-json)))
+                   (_ (error "Unexpected URL: " url)))))
+         (match (gem->guix-package "foo")
+                (('package
+                  ('name "ruby-foo")
+                  ('version "1.0.0")
+                  ('source
+                   ('origin
+                    ('method 'url-fetch)
+                    ('uri ('rubygems-uri "foo" 'version))
+                    ('sha256
+                     ('base32
+                      "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+                  ('build-system 'ruby-build-system)
+                  ('propagated-inputs
+                   ('quasiquote
+                    (("bundler" ('unquote 'bundler))
+                     ("ruby-bar" ('unquote 'ruby-bar)))))
+                  ('synopsis "A cool gem")
+                  ('description "This package provides a cool gem")
+                  ('home-page "https://example.com")
+                  ('license ('list 'license:expat 'license:asl2.0)))
+                 #t)
+                (x (pk 'fail x #f)))))
actual-value: #t
result: PASS

test-name: gem-recursive-import
location: /home/raph/guix-1.1.0/tests/gem.scm:108
source:
+ (test-assert
+   "gem-recursive-import"
+   (mock ((guix http-client)
+          http-fetch
+          (lambda (url . rest)
+            (match url
+                   ("https://rubygems.org/api/v1/gems/foo.json"
+                    (values
+                      (open-input-string test-foo-json)
+                      (string-length test-foo-json)))
+                   ("https://rubygems.org/api/v1/gems/bar.json"
+                    (values
+                      (open-input-string test-bar-json)
+                      (string-length test-bar-json)))
+                   ("https://rubygems.org/api/v1/gems/bundler.json"
+                    (values
+                      (open-input-string test-bundler-json)
+                      (string-length test-bundler-json)))
+                   (_ (error "Unexpected URL: " url)))))
+         (match (gem-recursive-import "foo")
+                ((('package
+                   ('name "ruby-bar")
+                   ('version "1.0.0")
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('rubygems-uri "bar" 'version))
+                     ('sha256
+                      ('base32
+                       "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+                   ('build-system 'ruby-build-system)
+                   ('propagated-inputs
+                    ('quasiquote (('"bundler" ('unquote 'bundler)))))
+                   ('synopsis "Another cool gem")
+                   ('description "Another cool gem")
+                   ('home-page "https://example.com")
+                   ('license #f))
+                  ('package
+                   ('name "ruby-bundler")
+                   ('version "1.14.2")
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('rubygems-uri "bundler" 'version))
+                     ('sha256
+                      ('base32
+                       "1446xiz7zg0bz7kgx9jv84y0s4hpsg61dj5l3qb0i00avc1kxd9v"))))
+                   ('build-system 'ruby-build-system)
+                   ('synopsis "Ruby gem bundler")
+                   ('description "Ruby gem bundler")
+                   ('home-page "https://bundler.io/")
+                   ('license 'license:expat))
+                  ('package
+                   ('name "ruby-foo")
+                   ('version "1.0.0")
+                   ('source
+                    ('origin
+                     ('method 'url-fetch)
+                     ('uri ('rubygems-uri "foo" 'version))
+                     ('sha256
+                      ('base32
+                       "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk"))))
+                   ('build-system 'ruby-build-system)
+                   ('propagated-inputs
+                    ('quasiquote
+                     (("bundler" ('unquote 'bundler))
+                      ("ruby-bar" ('unquote 'ruby-bar)))))
+                   ('synopsis "A cool gem")
+                   ('description "This package provides a cool gem")
+                   ('home-page "https://example.com")
+                   ('license ('list 'license:expat 'license:asl2.0))))
+                 #t)
+                (x (pk 'fail x #f)))))
actual-value: #f
actual-error:
+ (json-invalid #<input: string 7f06f74553f0>)
result: FAIL

random seed for tests: 1602121100

[-- Attachment #6: challenge.log --]
[-- Type: application/octet-stream, Size: 22767 bytes --]

[-- Attachment #7: graph.log --]
[-- Type: application/octet-stream, Size: 20726 bytes --]

test-name: package DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:79
source:
+ (test-assert
+   "package DAG"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (let* ((p1 (dummy-package "p1"))
+            (p2 (dummy-package "p2" (inputs `(("p1" ,p1)))))
+            (p3 (dummy-package
+                  "p3"
+                  (inputs `(("p2" ,p2) ("p1" ,p1))))))
+       (run-with-store
+         %store
+         (export-graph
+           (list p3)
+           'port
+           #:node-type
+           %package-node-type
+           #:backend
+           backend))
+       (let-values
+         (((nodes edges) (nodes+edges)))
+         (and (equal?
+                nodes
+                (map package->tuple (list p3 p2 p1)))
+              (equal?
+                edges
+                (map edge->tuple (list p3 p3 p2) (list p2 p1 p1))))))))
actual-value: #t
result: PASS

test-name: reverse package DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:96
source:
+ (test-assert
+   "reverse package DAG"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (run-with-store
+       %store
+       (export-graph
+         (list libunistring)
+         'port
+         #:node-type
+         %reverse-package-node-type
+         #:backend
+         backend))
+     (let-values
+       (((nodes edges) (nodes+edges)))
+       (and (member (package->tuple guile-2.0) nodes)
+            (->bool
+              (member
+                (edge->tuple libunistring guile-2.0)
+                edges))))))
actual-value: #t
result: PASS

test-name: bag-emerged DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:107
source:
+ (test-assert
+   "bag-emerged DAG"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (let* ((o (dummy-origin
+                 (method (lambda _ (text-file "foo" "bar")))))
+            (p (dummy-package "p" (source o)))
+            (implicit
+              (map (match-lambda
+                     ((label package) package)
+                     ((label package output) package))
+                   (standard-packages))))
+       (run-with-store
+         %store
+         (export-graph
+           (list p)
+           'port
+           #:node-type
+           %bag-emerged-node-type
+           #:backend
+           backend))
+       (let-values
+         (((nodes edges) (nodes+edges)))
+         (and (equal?
+                (match nodes (((labels names) ...) names))
+                (map package-full-name
+                     (cons p (delete-duplicates implicit))))
+              (equal?
+                (match edges
+                       (((sources destinations) ...)
+                        (zip (map store-path-package-name sources)
+                             (map store-path-package-name destinations))))
+                (map (lambda (destination)
+                       (list "p-0.drv"
+                             (string-append
+                               (package-full-name destination "-")
+                               ".drv")))
+                     implicit)))))))
actual-value: #t
result: PASS

test-name: bag DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:141
source:
+ (test-assert
+   "bag DAG"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (let ((p (dummy-package "p")))
+       (run-with-store
+         %store
+         (export-graph
+           (list p)
+           'port
+           #:node-type
+           %bag-node-type
+           #:backend
+           backend))
+       (let-values
+         (((nodes edges) (nodes+edges)))
+         (every (lambda (name)
+                  (find (cut string=? name <>)
+                        (match nodes (((labels names) ...) names))))
+                (match (%bootstrap-inputs)
+                       (((labels packages) ...)
+                        (map package-full-name
+                             (filter package? packages)))))))))
actual-value: "bootstrap-binaries@0"
result: PASS

test-name: bag DAG, including origins
location: /home/raph/guix-1.1.0/tests/graph.scm:160
source:
+ (test-assert
+   "bag DAG, including origins"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (let* ((m (lambda* (uri hash-type hash name #:key system)
+                 (text-file "foo-1.2.3.tar.gz" "This is a fake!")))
+            (o (origin
+                 (method m)
+                 (uri "the-uri")
+                 (sha256 #vu8(0 1 2))))
+            (p (dummy-package "p" (source o))))
+       (run-with-store
+         %store
+         (export-graph
+           (list p)
+           'port
+           #:node-type
+           %bag-with-origins-node-type
+           #:backend
+           backend))
+       (let-values
+         (((nodes edges) (nodes+edges)))
+         (run-with-store
+           %store
+           (mlet %store-monad
+                 ((o* (lower-object o))
+                  (p* (lower-object p))
+                  (g (lower-object (default-guile))))
+                 (return
+                   (and (find (match-lambda ((file "the-uri") #t) (_ #f))
+                              nodes)
+                        (find (match-lambda
+                                ((source target)
+                                 (and (string=?
+                                        source
+                                        (derivation-file-name p*))
+                                      (string=? target o*))))
+                              edges)
+                        (find (match-lambda
+                                ((source target)
+                                 (and (string=? source o*)
+                                      (string=?
+                                        target
+                                        (derivation-file-name g)))))
+                              edges)))))))))
actual-value: ("/home/raph/guix-1.1.0/test-tmp/store/bfvg1lm43k25dslxp0rblgbcgzw82hr7-foo-1.2.3.tar.gz" "/home/raph/guix-1.1.0/test-tmp/store/sahrcv2fjs7sh9h32pwl54ldcw93lfc5-guile-2.2.6.drv")
result: PASS

test-name: reverse bag DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:194
source:
+ (test-assert
+   "reverse bag DAG"
+   (let-values
+     (((dune bap ocaml-base)
+       (values
+         (specification->package "dune")
+         (specification->package "bap")
+         (specification->package "ocaml4.07-base")))
+      ((backend nodes+edges) (make-recording-backend)))
+     (run-with-store
+       %store
+       (export-graph
+         (list dune)
+         'port
+         #:node-type
+         %reverse-bag-node-type
+         #:backend
+         backend))
+     (run-with-store
+       %store
+       (mlet %store-monad
+             ((dune-drv (package->derivation dune))
+              (bap-drv (package->derivation bap))
+              (ocaml-base-drv (package->derivation ocaml-base)))
+             (let-values
+               (((nodes edges) (nodes+edges)))
+               (return
+                 (and (member
+                        `(,(derivation-file-name bap-drv)
+                          ,(package-full-name bap))
+                        nodes)
+                      (->bool
+                        (member
+                          (map derivation-file-name
+                               (list dune-drv ocaml-base-drv))
+                          edges)))))))))
actual-value: #t
result: PASS

test-name: derivation DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:220
source:
+ (test-assert
+   "derivation DAG"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (run-with-store
+       %store
+       (mlet* %store-monad
+              ((txt (text-file "text-file" "Hello!"))
+               (guile (package->derivation %bootstrap-guile))
+               (drv (gexp->derivation
+                      "output"
+                      (gexp (symlink (ungexp txt) (ungexp output)))
+                      #:guile-for-build
+                      guile)))
+              (mbegin
+                %store-monad
+                (export-graph
+                  (list drv)
+                  'port
+                  #:node-type
+                  %derivation-node-type
+                  #:backend
+                  backend)
+                (let-values
+                  (((nodes edges) (nodes+edges)))
+                  (return
+                    (and (match nodes
+                                (((ids labels) ...)
+                                 (let ((ids (map basename ids)))
+                                   (every (lambda (item)
+                                            (member (basename item) ids))
+                                          (list txt
+                                                (derivation-file-name drv)
+                                                (derivation-file-name
+                                                  guile))))))
+                         (every (cut member
+                                     <>
+                                     (map (lambda (edge) (map basename edge))
+                                          edges))
+                                (list (map (compose
+                                             basename
+                                             derivation-file-name)
+                                           (list drv guile))
+                                      (list (basename
+                                              (derivation-file-name drv))
+                                            (basename txt))))))))))))
actual-value: (("g244c6d0n5qnrr6d40jyahsqi2i6bmss-output.drv" "adks1n46bz31m4sir3xj6xzrllcq5hgh-text-file") ("g244c6d0n5qnrr6d40jyahsqi2i6bmss-output.drv" "arqdqrd3yx0jgb2zkpaxmk3s8fraknx9-output-builder") ("z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv" "g2b4wjirsmzjdvvpwcbxmxbq59li6h25-tar.drv") ("z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv" "n31z1apw27gzdd6vxac2aqljfp1ga92b-guile-2.0.9.tar.xz.drv") ("z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv" "nr61iip142kjbfk5qgiv84ddsyyd9qpa-xz.drv") ("z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv" "rsyggdhzm917kn95fvc60df0wl6k9s39-bash.drv") ("z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv" "zw20822hqwhyn2v5mh1ni52wmkyr7w7p-mkdir.drv") ("z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv" "idnbldpzx71qy65a9pcgd4ff6z8jf23m-build-bootstrap-guile.sh") ("g2b4wjirsmzjdvvpwcbxmxbq59li6h25-tar.drv" "78b79sbcnf9mwvhhqmq3c7q3myddbvzs-mirrors") ("g2b4wjirsmzjdvvpwcbxmxbq59li6h25-tar.drv" "akk289xb6vc342v34kgj5bz2alw2v3vf-content-addressed-mirrors") ("n31z1apw27gzdd6vxac2aqljfp1ga92b-guile-2.0.9.tar.xz.drv" "78b79sbcnf9mwvhhqmq3c7q3myddbvzs-mirrors") ("n31z1apw27gzdd6vxac2aqljfp1ga92b-guile-2.0.9.tar.xz.drv" "akk289xb6vc342v34kgj5bz2alw2v3vf-content-addressed-mirrors") ("nr61iip142kjbfk5qgiv84ddsyyd9qpa-xz.drv" "78b79sbcnf9mwvhhqmq3c7q3myddbvzs-mirrors") ("nr61iip142kjbfk5qgiv84ddsyyd9qpa-xz.drv" "akk289xb6vc342v34kgj5bz2alw2v3vf-content-addressed-mirrors") ("rsyggdhzm917kn95fvc60df0wl6k9s39-bash.drv" "78b79sbcnf9mwvhhqmq3c7q3myddbvzs-mirrors") ("rsyggdhzm917kn95fvc60df0wl6k9s39-bash.drv" "akk289xb6vc342v34kgj5bz2alw2v3vf-content-addressed-mirrors") ("zw20822hqwhyn2v5mh1ni52wmkyr7w7p-mkdir.drv" "78b79sbcnf9mwvhhqmq3c7q3myddbvzs-mirrors") ("zw20822hqwhyn2v5mh1ni52wmkyr7w7p-mkdir.drv" "akk289xb6vc342v34kgj5bz2alw2v3vf-content-addressed-mirrors"))
result: PASS

test-name: reference DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:253
source:
+ (test-assert
+   "reference DAG"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (run-with-store
+       %store
+       (mlet* %store-monad
+              ((txt (text-file "text-file" "Hello!"))
+               (guile (package->derivation %bootstrap-guile))
+               (drv (gexp->derivation
+                      "output"
+                      (gexp (symlink (ungexp txt) (ungexp output)))
+                      #:guile-for-build
+                      guile))
+               (out -> (derivation->output-path drv)))
+              (mbegin
+                %store-monad
+                (built-derivations (list drv))
+                (export-graph
+                  (list (derivation->output-path drv))
+                  'port
+                  #:node-type
+                  %reference-node-type
+                  #:backend
+                  backend)
+                (let-values
+                  (((nodes edges) (nodes+edges)))
+                  (return
+                    (and (equal?
+                           (match nodes (((ids labels) ...) ids))
+                           (list out txt))
+                         (equal? edges `((,out ,txt)))))))))))
random seed for tests: 1602120950
waiting for locks or build slots...
@ build-started /home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv - x86_64-linux /home/raph/guix-1.1.0/test-tmp/var/log/guix/drvs/z2//hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv.bz2 10472
while setting up the build environment: executing `/home/raph/guix-1.1.0/test-tmp/store/yd91vyb838z41y7pp56ndfc5vv417656-bash': Exec format error
builder for `/home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv' failed with exit code 1
@ build-failed /home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv - 1 builder for `/home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv' failed with exit code 1
cannot build derivation `/home/raph/guix-1.1.0/test-tmp/store/g244c6d0n5qnrr6d40jyahsqi2i6bmss-output.drv': 1 dependencies couldn't be built
actual-value: #f
actual-error:
+ (%exception
+   #<&store-protocol-error message: "build of `/home/raph/guix-1.1.0/test-tmp/store/g244c6d0n5qnrr6d40jyahsqi2i6bmss-output.drv' failed" status: 100>)
result: FAIL

test-name: referrer DAG
location: /home/raph/guix-1.1.0/tests/graph.scm:278
source:
+ (test-assert
+   "referrer DAG"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (run-with-store
+       %store
+       (mlet* %store-monad
+              ((txt (text-file "referrer-node" (random-text)))
+               (drv (gexp->derivation
+                      "referrer"
+                      (gexp (symlink (ungexp txt) (ungexp output)))))
+               (out -> (derivation->output-path drv)))
+              (mbegin
+                %store-monad
+                (built-derivations (list drv))
+                (export-graph
+                  (list txt)
+                  'port
+                  #:node-type
+                  %referrer-node-type
+                  #:backend
+                  backend)
+                (let-values
+                  (((nodes edges) (nodes+edges)))
+                  (return
+                    (and (equal?
+                           (match nodes (((ids labels) ...) ids))
+                           (list txt out))
+                         (equal? edges `((,txt ,out)))))))))))
@ build-started /home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv - x86_64-linux /home/raph/guix-1.1.0/test-tmp/var/log/guix/drvs/z2//hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv.bz2 10483
while setting up the build environment: executing `/home/raph/guix-1.1.0/test-tmp/store/yd91vyb838z41y7pp56ndfc5vv417656-bash': Exec format error
builder for `/home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv' failed with exit code 1
@ build-failed /home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv - 1 builder for `/home/raph/guix-1.1.0/test-tmp/store/z2hbf42p0rilqacllrlwr8n7p6nd8k1k-guile-bootstrap-2.0.drv' failed with exit code 1
cannot build derivation `/home/raph/guix-1.1.0/test-tmp/store/r2zv1b22bnnarc6abxii9fck8fvm194r-referrer.drv': 1 dependencies couldn't be built
actual-value: #f
actual-error:
+ (%exception
+   #<&store-protocol-error message: "build of `/home/raph/guix-1.1.0/test-tmp/store/r2zv1b22bnnarc6abxii9fck8fvm194r-referrer.drv' failed" status: 100>)
result: FAIL

test-name: module graph
location: /home/raph/guix-1.1.0/tests/graph.scm:300
source:
+ (test-assert
+   "module graph"
+   (let-values
+     (((backend nodes+edges) (make-recording-backend)))
+     (run-with-store
+       %store
+       (export-graph
+         '((gnu packages guile))
+         'port
+         #:node-type
+         %module-node-type
+         #:backend
+         backend))
+     (let-values
+       (((nodes edges) (nodes+edges)))
+       (and (member
+              '(gnu packages guile)
+              (match nodes (((ids labels) ...) ids)))
+            (->bool
+              (and (member
+                     (list '(gnu packages guile)
+                           '(gnu packages libunistring))
+                     edges)
+                   (member
+                     (list '(gnu packages guile)
+                           '(gnu packages bdw-gc))
+                     edges)))))))
actual-value: #t
result: PASS

test-name: node-edges
location: /home/raph/guix-1.1.0/tests/graph.scm:318
source:
+ (test-assert
+   "node-edges"
+   (run-with-store
+     %store
+     (let ((packages (fold-packages cons '())))
+       (mlet %store-monad
+             ((edges (node-edges %package-node-type packages)))
+             (return
+               (and (null? (edges hello))
+                    (lset= eq?
+                           (edges guile-2.0)
+                           (match (package-direct-inputs guile-2.0)
+                                  (((labels packages _ ...) ...)
+                                   packages)))))))))
actual-value: #t
result: PASS

test-name: node-transitive-edges + node-back-edges
location: /home/raph/guix-1.1.0/tests/graph.scm:329
source:
+ (test-assert
+   "node-transitive-edges + node-back-edges"
+   (run-with-store
+     %store
+     (let ((packages (fold-packages cons '()))
+           (bootstrap?
+             (lambda (package)
+               (string-contains
+                 (location-file (package-location package))
+                 "bootstrap.scm")))
+           (trivial?
+             (lambda (package)
+               (eq? (package-build-system package)
+                    trivial-build-system))))
+       (mlet %store-monad
+             ((edges (node-back-edges %bag-node-type packages)))
+             (let* ((glibc (canonical-package glibc))
+                    (dependents
+                      (node-transitive-edges (list glibc) edges))
+                    (diff (lset-difference eq? packages dependents)))
+               (return
+                 (null? (remove
+                          (lambda (package)
+                            (or (trivial? package) (bootstrap? package)))
+                          diff))))))))
actual-value: #t
result: PASS

test-name: node-transitive-edges, no duplicates
location: /home/raph/guix-1.1.0/tests/graph.scm:350
source:
+ (test-assert
+   "node-transitive-edges, no duplicates"
+   (run-with-store
+     %store
+     (let* ((p0 (dummy-package "p0"))
+            (p1a (dummy-package "p1a" (inputs `(("p0" ,p0)))))
+            (p1b (dummy-package "p1b" (inputs `(("p0" ,p0)))))
+            (p2 (dummy-package
+                  "p2"
+                  (inputs `(("p1a" ,p1a) ("p1b" ,p1b))))))
+       (mlet %store-monad
+             ((edges (node-edges
+                       %package-node-type
+                       (list p2 p1a p1b p0))))
+             (return
+               (lset= eq?
+                      (node-transitive-edges (list p2) edges)
+                      (list p1a p1b p0)))))))
actual-value: #t
result: PASS

test-name: node-reachable-count
location: /home/raph/guix-1.1.0/tests/graph.scm:361
source:
+ (test-equal
+   "node-reachable-count"
+   '(3 3)
+   (run-with-store
+     %store
+     (let* ((p0 (dummy-package "p0"))
+            (p1a (dummy-package "p1a" (inputs `(("p0" ,p0)))))
+            (p1b (dummy-package "p1b" (inputs `(("p0" ,p0)))))
+            (p2 (dummy-package
+                  "p2"
+                  (inputs `(("p1a" ,p1a) ("p1b" ,p1b))))))
+       (mlet* %store-monad
+              ((all -> (list p2 p1a p1b p0))
+               (edges (node-edges %package-node-type all))
+               (back (node-back-edges %package-node-type all)))
+              (return
+                (list (node-reachable-count (list p2) edges)
+                      (node-reachable-count (list p0) back)))))))
expected-value: (3 3)
actual-value: (3 3)
result: PASS


[-- Attachment #8: gexp.log --]
[-- Type: application/octet-stream, Size: 139711 bytes --]

[-- Attachment #9: debug-link.log --]
[-- Type: application/octet-stream, Size: 27941 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-11-17  7:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-07 23:30 bug#43859: Test Suite Failures Raphael Gosselin
2020-10-12 12:20 ` Ludovic Courtès
2024-11-17  7:29   ` Maxim Cournoyer

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.