Subject: Re: bug#25476: pivot-root test fails on Ubuntu 16.04

From: [email-masked] (Ludovic Courtès)
Date: Wed, 01 Feb 2017 14:08:24 +0100

Hi,

Paul Garlick <[email-masked]> skribis:

> test-name: pivot-root
> location: /data/paul/sourceCode/guix/tests/syscalls.scm:154
> source:
> + (test-equal
> +   "pivot-root"
> +   #t
> +   (match (pipe)
> +          ((in . out)
> +           (match (clone (logior CLONE_NEWUSER CLONE_NEWNS SIGCHLD))
> +                  (0
> +                   (dynamic-wind
> +                     (const #t)
> +                     (lambda ()
> +                       (close in)
> +                       (call-with-temporary-directory
> +                         (lambda (root)
> +                           (let ((put-old (string-append root "/real-root")))
> +                             (mount "none" root "tmpfs")
> +                             (mkdir put-old)
> +                             (call-with-output-file
> +                               (string-append root "/test")
> +                               (lambda (port) (display "testing\n" port)))
> +                             (pivot-root root put-old)
> +                             (write (file-exists? "/test") out)
> +                             (close out)))))
> +                     (lambda () (primitive-exit 0))))
> +                  (pid (close out)
> +                       (let ((result (read in)))
> +                         (close in)
> +                         (and (zero? (match (waitpid pid)
> +                                            ((_ . status)
> +                                             (status:exit-val status))))
> +                              result)))))))
> expected-value: #t
> actual-value: #<eof>
> result: FAIL

That would mean the child process exited with 0, yet it didn’t write
anything to stdout.  Not sure how this can happen.

> test-name: utmpx-entries
> location: /data/paul/sourceCode/guix/tests/syscalls.scm:444
> source:
> + (test-assert
> +   "utmpx-entries"
> +   (match (utmpx-entries)
> +          (((? utmpx? entries) ...)
> +           (every (lambda (entry)
> +                    (match (utmpx-user entry)
> +                           ((? string?) (> (utmpx-pid entry) 0))
> +                           (#f #t)))
> +                  entries))))
> actual-value: #f
> result: FAIL

This one is unrelated.

Could you try this:

--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guile
GNU Guile 2.0.13
Copyright (C) 1995-2016 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> ,use(guix build syscalls)
scheme@(guile-user)> (utmpx-entries)
$1 = (#<<utmpx-entry> type: 6 …> …)
scheme@(guile-user)> ,use(srfi srfi-1)
scheme@(guile-user)> (find (lambda (entry) (and (string? (utmpx-user entry))(zero? (utmpx-pid entry)))) (utmpx-entries))
$2 = #f
--8<---------------cut here---------------end--------------->8---

Most likely the assumption made in this test doesn’t hold on your system
for some reason.

Thank you,
Ludo’.