tests: migrate export.sh

Change-Id: I9416b71b0a15a7703aa9d7c2dea866a1f556e657
This commit is contained in:
rootile
2026-06-14 20:19:58 +02:00
parent bc8a95457f
commit 9614f12908
3 changed files with 56 additions and 37 deletions
-36
View File
@@ -1,36 +0,0 @@
source common.sh
clearStore
outPath=$(nix-build dependencies.nix --no-out-link)
nix-store --export $outPath > $TEST_ROOT/exp
nix-store --export $(nix-store -qR $outPath) > $TEST_ROOT/exp_all
if nix-store --export $outPath >/dev/full ; then
echo "exporting to a bad file descriptor should fail"
exit 1
fi
clearStore
if nix-store --import < $TEST_ROOT/exp; then
echo "importing a non-closure should fail"
exit 1
fi
clearStore
nix-store --import < $TEST_ROOT/exp_all
nix-store --export $(nix-store -qR $outPath) > $TEST_ROOT/exp_all2
clearStore
# Regression test: the derivers in exp_all2 are empty, which shouldn't
# cause a failure.
nix-store --import < $TEST_ROOT/exp_all2
-1
View File
@@ -77,7 +77,6 @@ functional_tests_scripts = [
'repl.sh',
'binary-cache-build-remote.sh',
'logging.sh',
'export.sh',
'config.sh',
'filter-source.sh',
'misc.sh',
+56
View File
@@ -0,0 +1,56 @@
from collections.abc import Callable
from testlib.fixtures.command import Command
from testlib.fixtures.file_helper import with_files
from testlib.utils import get_global_asset_pack
from testlib.fixtures.nix import Nix
@with_files(get_global_asset_pack("dependencies"))
def test_export(nix: Nix):
out_path = nix.nix_build(["dependencies.nix", "--no-out-link"]).run().ok().stdout_plain
res = nix.nix_store(["--export", out_path]).run().ok()
exported = res.stdout
nix.clear_store()
res = nix.nix_store(["--import"]).with_stdin(exported).run().expect(1)
# importing a non-closure should fail
assert "does not exist in the Lix database" in res.stderr_plain
@with_files(get_global_asset_pack("dependencies"))
def test_export_full(nix: Nix):
out_path = nix.nix_build(["dependencies.nix", "--no-out-link"]).run().ok().stdout_plain
paths = nix.nix_store(["-qR", out_path]).run().ok().stdout_plain.splitlines()
res = nix.nix_store(["--export", *paths]).run().ok()
exported = res.stdout
nix.clear_store()
res = nix.nix_store(["--import"]).with_stdin(exported).run().ok()
assert set(res.stdout_plain.splitlines()) == set(paths)
res = nix.nix_store(["--export", *paths]).run().ok()
nix.clear_store()
# Regression test: the derivers in exp_all2 are empty, which shouldn't
# cause a failure.
res = nix.nix_store(["--import"]).with_stdin(res.stdout).run().ok()
assert set(res.stdout_plain.splitlines()) == set(paths)
@with_files(get_global_asset_pack("dependencies"))
def test_bad_fd(nix: Nix, command: Callable[[list[str]], Command]):
out_path = nix.nix_build(["dependencies.nix", "--no-out-link"]).run().ok().stdout_plain
# HACK(rootile, 2026-06): we can't pipe things into files from within our framework
cmd = command(["bash", "-c", 'nix-store --export "$1" > /dev/full', "nix-store", out_path])
res = cmd.run().expect(1)
assert (
"error: writing to file:" in res.stderr_plain
or "Operation not permitted" in res.stderr_plain
)