symphorien / nix-du

Visualise which gc-roots to delete to free some space in your nix store
GNU Lesser General Public License v3.0
371 stars 5 forks source link

Test failures on darwin when built with the sandbox enabled #3

Closed lilyball closed 5 years ago

lilyball commented 5 years ago

I just tried building the latest master (2601d1fcdc9752c025a87687e3e5b01ba78e3a72) using Nix (I edited the existing package definition) and I get a bunch of test failures on Darwin. These failures only show up with the sandbox enabled.

failures:
    autodetect_optimised
    autodetect_un_optimised
    filter_number_non_root
    filter_number_root_kept
    filter_number_root_not_kept
    filter_size_non_root
    filter_size_root_kept
    filter_size_root_not_kept
    k2_1
    optimise
    rooted_lazy
    rooted_simple
    simple
Full output ``` ---- filter_size_root_not_kept stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [mux foo]; foo = mkNode "foo" [baz]; bar = mkNode "bar" [foo]; baz = mkNode "baz" []; mux = mkNode "mux" [baz]; frob = mkNode "frob" []; } Building coucou thread 'filter_size_root_not_kept' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace. ---- filter_size_non_root stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { a = mkNode "a" [d]; b = mkNode "b" [d]; c = mkNode "c" [e]; d = mkNode "d" [e]; e = mkNode "e" [f]; f = mkNode "f" []; } Building a thread 'filter_size_non_root' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- filter_number_root_not_kept stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [mux foo]; foo = mkNode "foo" [baz]; bar = mkNode "bar" [foo]; baz = mkNode "baz" []; mux = mkNode "mux" [baz]; frob = mkNode "frob" []; } Building coucou thread 'filter_number_root_not_kept' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- filter_size_root_kept stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [mux foo]; foo = mkNode "foo" [baz]; bar = mkNode "bar" [foo]; baz = mkNode "baz" []; mux = mkNode "mux" [baz]; } Building coucou thread 'filter_size_root_kept' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- autodetect_optimised stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [foo]; foo = mkNode "foo" []; bar = mkNode "bar" []; } Building coucou thread 'autodetect_optimised' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- filter_number_non_root stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { a = mkNode "a" [d]; b = mkNode "b" [d]; c = mkNode "c" [e]; d = mkNode "d" [e]; e = mkNode "e" [f]; f = mkNode "f" []; } Building a thread 'filter_number_non_root' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- autodetect_un_optimised stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [foo]; foo = mkNode "foo" []; bar = mkNode "bar" []; } Building coucou thread 'autodetect_un_optimised' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- filter_number_root_kept stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [mux foo]; foo = mkNode "foo" [baz]; bar = mkNode "bar" [foo]; baz = mkNode "baz" []; mux = mkNode "mux" [baz]; } Building coucou thread 'filter_number_root_kept' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- optimise stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [foo]; foo = mkNode "foo" []; bar = mkNode "bar" []; blih = mkNode "blih" []; } Building coucou thread 'optimise' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- rooted_simple stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { a = mkNode "a" [b]; b = mkNode "b" []; c = mkNode "c" [h d]; d = mkNode "d" [f e]; e = mkNode "e" [g j]; f = mkNode "f" [g]; g = mkNode "g" []; h = mkNode "h" [i]; i = mkNode "i" []; j = mkNode "j" []; } Building a thread 'rooted_simple' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- k2_1 stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [foo]; foo = mkNode "foo" []; bar = mkNode "bar" [foo]; } Building coucou thread 'k2_1' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- simple stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [mux foo]; foo = mkNode "foo" [baz]; bar = mkNode "bar" [foo]; baz = mkNode "baz" []; mux = mkNode "mux" [baz]; } Building coucou thread 'simple' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ---- rooted_lazy stdout ---- Derivation: with import /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/source/tests/nix/template.nix; rec { coucou = mkNode "coucou" [foo]; foo = mkNode "foo" []; bar = mkNode "bar" []; } Building coucou thread 'rooted_lazy' panicked at 'expected command to succeed, got ExitStatus(ExitStatus(256))', /private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-du-unstable-2019-09-30.drv-0/nix-du-unstable-2019-09-30-vendor/cli_test_dir/src/lib.rs:484:13 ```

symphorien commented 5 years ago

Can you rerun the tests with RUST_BACKTRACE=1 ? Note that travis is green so I am rather suprised: https://travis-ci.com/symphorien/nix-du

lilyball commented 5 years ago

It turns out these test failures are due to running the tests from within the sandbox. My extra-sandbox-paths are set to /System/Library/Frameworks /System/Library/PrivateFrameworks /usr/lib /private/tmp /private/var/tmp /usr/bin/env, which should be sufficient for the impurities present in darwin builds. This makes me wonder if the tests are actually relying on having access to the real /nix folder.

symphorien commented 5 years ago

The tests use a local temporary store: https://github.com/symphorien/nix-du/blob/master/tests/common.rs#L14-L38 Do you have any more details than just the error code of nix when ran?

symphorien commented 5 years ago

Also, can you build nix on MacOS with sandbox? The way I run nix in the tests is inspired by nix's own tests: https://github.com/NixOS/nix/blob/master/tests/common.sh.in#L4-L13

lilyball commented 5 years ago

I'm not sure what you mean; I included the full test output in my original issue (see "Full output"), but I don't know how to get any more info than what it says.

I'll see if I can get a Nix build done under the sandbox, but looking at your link, everything there is under a temp dir, and TMPDIR//tmp is explicitly included by Nix's sandbox.

lilyball commented 5 years ago

~I ran nix-build --option sandbox false -E 'with import <nixpkgs> {}; nix.overrideAttrs (_: { asdl = 3; })' and most of the tests passed. The failing tests weren't due to the sandbox but both due to a socket path length issue:~

error: socket path '/private/var/folders/cs/l6c6g06x0974_0w5pdg8dps80000gn/T/nix-build-nix-2.3.drv-0/nix-test/var/nix/daemon-socket/socket' is too long
lilyball commented 5 years ago

Oops I turned the sandbox off in that test, not on. How did that autocomplete? Let me run it again.

lilyball commented 5 years ago

You're right, with the sandbox on Nix itself fails to run tests. Lots of errors

    error: opening pseudoterminal master: Operation not permitted
lilyball commented 5 years ago

Anyway it looks like the nix-du failures are coming from Nix itself, so I'm going to go ahead and close this issue.