blob: 9192b8a8a030b1d478a341523db1e6c2fd41be6a (
plain) (
blame)
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
import ./make-test-python.nix ({ pkgs, ... }: {
name = "nixos-rebuild-specialisations";
nodes = {
machine = { lib, pkgs, ... }: {
imports = [
../modules/profiles/installation-device.nix
../modules/profiles/base.nix
];
nix.settings = {
substituters = lib.mkForce [ ];
hashed-mirrors = null;
connect-timeout = 1;
};
system.includeBuildDependencies = true;
system.extraDependencies = [
# Not part of the initial build apparently?
pkgs.grub2
];
virtualisation = {
cores = 2;
memorySize = 4096;
};
};
};
testScript =
let
configFile = pkgs.writeText "configuration.nix" ''
{ lib, pkgs, ... }: {
imports = [
./hardware-configuration.nix
<nixpkgs/nixos/modules/testing/test-instrumentation.nix>
];
boot.loader.grub = {
enable = true;
device = "/dev/vda";
forceInstall = true;
};
documentation.enable = false;
environment.systemPackages = [
(pkgs.writeShellScriptBin "parent" "")
];
specialisation.foo = {
inheritParentConfig = true;
configuration = { ... }: {
environment.systemPackages = [
(pkgs.writeShellScriptBin "foo" "")
];
};
};
specialisation.bar = {
inheritParentConfig = true;
configuration = { ... }: {
environment.systemPackages = [
(pkgs.writeShellScriptBin "bar" "")
];
};
};
}
'';
in
''
machine.start()
machine.succeed("udevadm settle")
machine.wait_for_unit("multi-user.target")
machine.succeed("nixos-generate-config")
machine.copy_from_host(
"${configFile}",
"/etc/nixos/configuration.nix",
)
with subtest("Switch to the base system"):
machine.succeed("nixos-rebuild switch")
machine.succeed("parent")
machine.fail("foo")
machine.fail("bar")
with subtest("Switch from base system into a specialization"):
machine.succeed("nixos-rebuild switch --specialisation foo")
machine.succeed("parent")
machine.succeed("foo")
machine.fail("bar")
with subtest("Switch from specialization into another specialization"):
machine.succeed("nixos-rebuild switch -c bar")
machine.succeed("parent")
machine.fail("foo")
machine.succeed("bar")
with subtest("Switch from specialization into the base system"):
machine.succeed("nixos-rebuild switch")
machine.succeed("parent")
machine.fail("foo")
machine.fail("bar")
with subtest("Switch into specialization using `nixos-rebuild test`"):
machine.succeed("nixos-rebuild test --specialisation foo")
machine.succeed("parent")
machine.succeed("foo")
machine.fail("bar")
with subtest("Make sure nonsense command combinations are forbidden"):
machine.fail("nixos-rebuild boot --specialisation foo")
machine.fail("nixos-rebuild boot -c foo")
'';
})
|