From 0619351326bb7b7aa2a05d7e97a71ea61f8a7bff Mon Sep 17 00:00:00 2001 From: Sergei Zimmerman Date: Wed, 8 Oct 2025 01:59:04 +0300 Subject: [PATCH] tests: Move invalid nar tests from tests/functional to libutil-tests Since 242f3625675cc06069edfd0936ad6f42acb068a8 we have better infrastructure for this kind of tests. --- src/libutil-tests/archive.cc | 16 +++++++++- .../libutil-tests/data/nars}/dot.nar | Bin .../libutil-tests/data/nars}/dotdot.nar | Bin .../libutil-tests/data/nars}/empty.nar | Bin .../data/nars}/executable-after-contents.nar | Bin .../data/nars}/name-after-node.nar | Bin .../data/nars}/nul-character.nar | Bin .../libutil-tests/data/nars}/slash.nar | Bin tests/functional/nars.sh | 28 ------------------ 9 files changed, 15 insertions(+), 29 deletions(-) rename {tests/functional => src/libutil-tests/data/nars}/dot.nar (100%) rename {tests/functional => src/libutil-tests/data/nars}/dotdot.nar (100%) rename {tests/functional => src/libutil-tests/data/nars}/empty.nar (100%) rename {tests/functional => src/libutil-tests/data/nars}/executable-after-contents.nar (100%) rename {tests/functional => src/libutil-tests/data/nars}/name-after-node.nar (100%) rename {tests/functional => src/libutil-tests/data/nars}/nul-character.nar (100%) rename {tests/functional => src/libutil-tests/data/nars}/slash.nar (100%) diff --git a/src/libutil-tests/archive.cc b/src/libutil-tests/archive.cc index 386f7b857..427b29d41 100644 --- a/src/libutil-tests/archive.cc +++ b/src/libutil-tests/archive.cc @@ -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 diff --git a/tests/functional/dot.nar b/src/libutil-tests/data/nars/dot.nar similarity index 100% rename from tests/functional/dot.nar rename to src/libutil-tests/data/nars/dot.nar diff --git a/tests/functional/dotdot.nar b/src/libutil-tests/data/nars/dotdot.nar similarity index 100% rename from tests/functional/dotdot.nar rename to src/libutil-tests/data/nars/dotdot.nar diff --git a/tests/functional/empty.nar b/src/libutil-tests/data/nars/empty.nar similarity index 100% rename from tests/functional/empty.nar rename to src/libutil-tests/data/nars/empty.nar diff --git a/tests/functional/executable-after-contents.nar b/src/libutil-tests/data/nars/executable-after-contents.nar similarity index 100% rename from tests/functional/executable-after-contents.nar rename to src/libutil-tests/data/nars/executable-after-contents.nar diff --git a/tests/functional/name-after-node.nar b/src/libutil-tests/data/nars/name-after-node.nar similarity index 100% rename from tests/functional/name-after-node.nar rename to src/libutil-tests/data/nars/name-after-node.nar diff --git a/tests/functional/nul-character.nar b/src/libutil-tests/data/nars/nul-character.nar similarity index 100% rename from tests/functional/nul-character.nar rename to src/libutil-tests/data/nars/nul-character.nar diff --git a/tests/functional/slash.nar b/src/libutil-tests/data/nars/slash.nar similarity index 100% rename from tests/functional/slash.nar rename to src/libutil-tests/data/nars/slash.nar diff --git a/tests/functional/nars.sh b/tests/functional/nars.sh index dd90345a6..a52c257bc 100755 --- a/tests/functional/nars.sh +++ b/tests/functional/nars.sh @@ -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'"