Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 11 additions & 36 deletions tests/functional/timeout.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,39 +7,14 @@ source common.sh
# XXX: This shouldn’t be, but #4813 cause this test to fail
needLocalStore "see #4813"

messages=$(nix-build -Q timeout.nix -A infiniteLoop --timeout 2 2>&1) && status=0 || status=$?

if [ "$status" -ne 101 ]; then
echo "error: 'nix-store' exited with '$status'; should have exited 101"

# FIXME: https://github.com/NixOS/nix/issues/4813
skipTest "Do not block CI until fixed"

exit 1
fi

if echo "$messages" | grepQuietInvert "timed out"; then
echo "error: build may have failed for reasons other than timeout; output:"
echo "$messages" >&2
exit 1
fi

if nix-build -Q timeout.nix -A infiniteLoop --max-build-log-size 100; then
echo "build should have failed"
exit 1
fi

if nix-build timeout.nix -A silent --max-silent-time 2; then
echo "build should have failed"
exit 1
fi

if nix-build timeout.nix -A closeLog; then
echo "build should have failed"
exit 1
fi

if nix build -f timeout.nix silent --max-silent-time 2; then
echo "build should have failed"
exit 1
fi
# FIXME: https://github.com/NixOS/nix/issues/4813
expectStderr 101 nix-build -Q timeout.nix -A infiniteLoop --timeout 2 | grepQuiet "timed out" \
|| skipTest "Do not block CI until fixed"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

skipTest cancels the whole test file, which is unexpected. Easy to miss when reading this test.

|| is for flaky tests, at best. What we should have here is a negation, so that when the behavior is fixed, the test must be updated to reflect the new state and actually test it.

Copy link
Member Author

@Ericson2314 Ericson2314 Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is how it worked before too, fwiw. Not ideal, but not worse in this case either.

The real condition is that the return code should either by 1xy (good) or 1 (bug). But of course the best thing is just fixing the bug.


expectStderr 1 nix-build -Q timeout.nix -A infiniteLoop --max-build-log-size 100 | grepQuiet "killed after writing more than 100 bytes of log output"

expectStderr 101 nix-build timeout.nix -A silent --max-silent-time 2 | grepQuiet "timed out after 2 seconds"

expectStderr 100 nix-build timeout.nix -A closeLog | grepQuiet "builder failed due to signal"

expectStderr 1 nix build -f timeout.nix silent --max-silent-time 2 | grepQuiet "timed out after 2 seconds"
Loading