57 lines
2.0 KiB
Python
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
|
|
)
|