1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-08 19:46:02 +01:00

tests: Move invalid nar tests from tests/functional to libutil-tests

Since 242f362567 we have better infrastructure
for this kind of tests.
This commit is contained in:
Sergei Zimmerman 2025-10-08 01:59:04 +03:00
parent fb117e0cac
commit 0619351326
No known key found for this signature in database
9 changed files with 15 additions and 29 deletions

View file

@ -42,6 +42,20 @@ INSTANTIATE_TEST_SUITE_P(
NarTest,
InvalidNarTest,
::testing::Values(
std::pair{"invalid-tag-instead-of-contents", "bad archive: expected tag 'contents', got 'AAAAAAAA'"}));
std::pair{"invalid-tag-instead-of-contents", "bad archive: expected tag 'contents', got 'AAAAAAAA'"},
// Unpacking a NAR with a NUL character in a file name should fail.
std::pair{"nul-character", "bad archive: NAR contains invalid file name 'f"},
// Likewise for a '.' filename.
std::pair{"dot", "bad archive: NAR contains invalid file name '.'"},
// Likewise for a '..' filename.
std::pair{"dotdot", "bad archive: NAR contains invalid file name '..'"},
// Likewise for a filename containing a slash.
std::pair{"slash", "bad archive: NAR contains invalid file name 'x/y'"},
// Likewise for an empty filename.
std::pair{"empty", "bad archive: NAR contains invalid file name ''"},
// Test that the 'executable' field cannot come before the 'contents' field.
std::pair{"executable-after-contents", "bad archive: expected tag ')', got 'executable'"},
// Test that the 'name' field cannot come before the 'node' field in a directory entry.
std::pair{"name-after-node", "bad archive: expected tag 'name'"}));
} // namespace nix

View file

@ -131,31 +131,3 @@ else
fi
rm -f "$TEST_ROOT/unicode-*"
# Unpacking a NAR with a NUL character in a file name should fail.
rm -rf "$TEST_ROOT/out"
expectStderr 1 nix-store --restore "$TEST_ROOT/out" < nul-character.nar | grepQuiet "NAR contains invalid file name 'f"
# Likewise for a '.' filename.
rm -rf "$TEST_ROOT/out"
expectStderr 1 nix-store --restore "$TEST_ROOT/out" < dot.nar | grepQuiet "NAR contains invalid file name '.'"
# Likewise for a '..' filename.
rm -rf "$TEST_ROOT/out"
expectStderr 1 nix-store --restore "$TEST_ROOT/out" < dotdot.nar | grepQuiet "NAR contains invalid file name '..'"
# Likewise for a filename containing a slash.
rm -rf "$TEST_ROOT/out"
expectStderr 1 nix-store --restore "$TEST_ROOT/out" < slash.nar | grepQuiet "NAR contains invalid file name 'x/y'"
# Likewise for an empty filename.
rm -rf "$TEST_ROOT/out"
expectStderr 1 nix-store --restore "$TEST_ROOT/out" < empty.nar | grepQuiet "NAR contains invalid file name ''"
# Test that the 'executable' field cannot come before the 'contents' field.
rm -rf "$TEST_ROOT/out"
expectStderr 1 nix-store --restore "$TEST_ROOT/out" < executable-after-contents.nar | grepQuiet "expected tag ')', got 'executable'"
# Test that the 'name' field cannot come before the 'node' field in a directory entry.
rm -rf "$TEST_ROOT/out"
expectStderr 1 nix-store --restore "$TEST_ROOT/out" < name-after-node.nar | grepQuiet "expected tag 'name'"