Skip to content

Test failure on NixOS #10756

@0xMillyByte

Description

@0xMillyByte

The bug

Currently the test suite (cargo test) fails because all environment variables (inlcuding PATH) get cleared in the build() method of UCommand:

command.env_clear();

Then, /bin/sh looks for commandline tools such as sed, cat, head, ... in default locations (/bin or /usr/bin), but those are not present there on NixOS.

Possible Fix

preserve PATH when running tests

if let Some(path) = env::var_os("PATH") {
    command.env("PATH", path);
}

Log

failures:

---- test_env::test_simulation_of_terminal_for_stdin_only stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /home/emilia/Coding/coreutils/target/debug/coreutils env sh is_a_tty.sh

thread 'test_env::test_simulation_of_terminal_for_stdin_only' (112587) panicked at tests/by-util/test_env.rs:1715:5:
assertion `left == right` failed
  left: "stdin is a tty\nterminal size: \nstdout is not a tty\nstderr is not a tty\n"
 right: "stdin is a tty\nterminal size: 30 80\nstdout is not a tty\nstderr is not a tty\n"
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- test_env::test_simulation_of_terminal_size_information stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /home/emilia/Coding/coreutils/target/debug/coreutils env sh is_a_tty.sh

thread 'test_env::test_simulation_of_terminal_size_information' (112618) panicked at tests/by-util/test_env.rs:1798:5:
assertion `left == right` failed
  left: "stdin is a tty\r\nterminal size: \r\nstdout is a tty\r\nstderr is a tty\r\n"
 right: "stdin is a tty\r\nterminal size: 10 40\r\nstdout is a tty\r\nstderr is a tty\r\n"

---- test_env::test_simulation_of_terminal_true stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /home/emilia/Coding/coreutils/target/debug/coreutils env sh is_a_tty.sh

thread 'test_env::test_simulation_of_terminal_true' (112628) panicked at tests/by-util/test_env.rs:1689:5:
assertion `left == right` failed
  left: "stdin is a tty\r\nterminal size: \r\nstdout is a tty\r\nstderr is a tty\r\n"
 right: "stdin is a tty\r\nterminal size: 30 80\r\nstdout is a tty\r\nstderr is a tty\r\n"

---- test_seq::test_sigpipe_ignored_reports_write_error stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /bin/sh -c trap '' PIPE; { "$SEQ_BIN" seq inf 2>err; echo $? >code; } | head -n1

thread 'test_seq::test_sigpipe_ignored_reports_write_error' (121646) panicked at tests/by-util/test_seq.rs:196:67:
Command was expected to succeed. code: 127
stdout = 
 stderr = /bin/sh: line 1: head: command not found


---- test_split::test_filter stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /home/emilia/Coding/coreutils/target/debug/coreutils split --filter=sed s/./i/g > $FILE filtered

thread 'test_split::test_filter' (124983) panicked at tests/by-util/test_split.rs:311:10:
Command was expected to succeed. code: 1
stdout = 
 stderr = /bin/sh: line 1: sed: command not found
split: Shell process returned 127


---- test_split::test_filter_with_env_var_set stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /home/emilia/Coding/coreutils/target/debug/coreutils split --filter=cat > $FILE filtered

thread 'test_split::test_filter_with_env_var_set' (124990) panicked at tests/by-util/test_split.rs:340:10:
Command was expected to succeed. code: 1
stdout = 
 stderr = /bin/sh: line 1: cat: command not found
split: Shell process returned 127


---- test_split::test_filter_broken_pipe stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /home/emilia/Coding/coreutils/target/debug/coreutils split --filter=head -c1 > /dev/null -n r/1 filter-big-input

thread 'test_split::test_filter_broken_pipe' (124984) panicked at tests/by-util/test_split.rs:370:10:
Command was expected to succeed. code: 1
stdout = 
 stderr = /bin/sh: line 1: head: command not found
split: Shell process returned 127


---- test_tail::test_stdin_via_script_redirection_and_pipe stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
write(default): /tmp/.tmpOPc5WP/file.txt
run: sh -c ./test.sh < file.txt

thread 'test_tail::test_stdin_via_script_redirection_and_pipe' (126675) panicked at tests/by-util/test_tail.rs:418:10:
Command was expected to succeed. code: 127
stdout = 
 stderr = ./test.sh: line 2: tail: command not found


---- test_test::test_file_N stdout ----
bin: "/home/emilia/Coding/coreutils/target/debug/coreutils"
run: /bin/sh -c stat file

thread 'test_test::test_file_N' (126893) panicked at tests/by-util/test_test.rs:968:49:
Command was expected to succeed. code: 127
stdout = 
 stderr = /bin/sh: line 1: stat: command not found



failures:
    test_env::test_simulation_of_terminal_for_stdin_only
    test_env::test_simulation_of_terminal_size_information
    test_env::test_simulation_of_terminal_true
    test_seq::test_sigpipe_ignored_reports_write_error
    test_split::test_filter
    test_split::test_filter_broken_pipe
    test_split::test_filter_with_env_var_set
    test_tail::test_stdin_via_script_redirection_and_pipe
    test_test::test_file_N

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions