Files
lix/tests/functional2/store/test_export.py
T
rootile 9614f12908 tests: migrate export.sh
Change-Id: I9416b71b0a15a7703aa9d7c2dea866a1f556e657
2026-06-14 20:19:58 +02:00

57 lines
2.0 KiB
Python

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
)