1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
from collections.abc import Callable
from testlib.fixtures.file_helper import AssetSymlink, CopyFile, with_files
from testlib.fixtures.nix import Nix
from testlib.fixtures.snapshot import Snapshot
from testlib.utils import get_global_asset
import re
def filter_paths(nix: Nix, output: str) -> str:
return re.sub(
r"/nix/store/[0-9a-z]{32}",
"/nix/store/hashfilteredforrepeatableoutputs",
output.replace(nix.env.dirs.test_root.as_posix(), ""),
)
@with_files(
{
"import-derivation.nix": CopyFile(
"assets/test_import_from_derivation/import-derivation.nix"
),
"config.nix": get_global_asset("config.nix"),
"error": AssetSymlink("assets/test_import_from_derivation/warn-ifd.err.exp"),
}
)
def test_warn_ifd(nix: Nix, snapshot: Callable[[str], Snapshot]):
error = (
nix.nix_build(
[
"./import-derivation.nix",
"--no-out-link",
*["--option", "warn-import-from-derivation", "true"],
]
)
.run()
.ok()
.stderr_plain
)
assert snapshot("error") == filter_paths(nix, error)
@with_files(
{
"import-derivation.nix": CopyFile(
"assets/test_import_from_derivation/import-derivation.nix"
),
"config.nix": get_global_asset("config.nix"),
"error": AssetSymlink("assets/test_import_from_derivation/deny-ifd.err.exp"),
}
)
def test_deny_ifd(nix: Nix, snapshot: Callable[[str], Snapshot]):
error = (
nix.nix_build(
[
"./import-derivation.nix",
"--no-out-link",
*["--option", "allow-import-from-derivation", "false"],
]
)
.run()
.expect(1)
.stderr_plain
)
assert snapshot("error") == filter_paths(nix, error)
@with_files(
{
"import-derivation.nix": CopyFile(
"assets/test_import_from_derivation/import-derivation.nix"
),
"config.nix": get_global_asset("config.nix"),
"error": AssetSymlink("assets/test_import_from_derivation/allow-ifd.err.exp"),
}
)
def test_allow_ifd(nix: Nix, snapshot: Callable[[str], Snapshot]):
build = nix.nix_build(["./import-derivation.nix", "--no-out-link"]).run().ok()
error = build.stderr_plain
out_path = build.stdout_plain
assert nix.physical_store_path_for(out_path).read_text() == "FOO579"
assert snapshot("error") == filter_paths(nix, error)
@with_files(
{
"import-derivation.nix": CopyFile(
"assets/test_import_from_derivation/import-derivation.nix"
),
"config.nix": get_global_asset("config.nix"),
"error": AssetSymlink(
"assets/test_import_from_derivation/instantiate-ifd-readonly-fail.err.exp"
),
}
)
def test_instantiate_ifd_readonly_fail(nix: Nix, snapshot: Callable[[str], Snapshot]):
error = (
nix.nix_instantiate(["--readonly-mode", "./import-derivation.nix"])
.run()
.expect(1)
.stderr_plain
)
assert snapshot("error") == filter_paths(nix, error)
|