llm-ls: cleanup (#372936)
[NixPkgs.git] / nixos / tests / systemd-nspawn-configfile.nix
blob8dd0260d2aeee68a7d248ac04507a94a380eb582
1 import ./make-test-python.nix (
2   { lib, ... }:
3   let
4     execOptions = [
5       "Boot"
6       "ProcessTwo"
7       "Parameters"
8       "Environment"
9       "User"
10       "WorkingDirectory"
11       "PivotRoot"
12       "Capability"
13       "DropCapability"
14       "NoNewPrivileges"
15       "KillSignal"
16       "Personality"
17       "MachineID"
18       "PrivateUsers"
19       "NotifyReady"
20       "SystemCallFilter"
21       "LimitCPU"
22       "LimitFSIZE"
23       "LimitDATA"
24       "LimitSTACK"
25       "LimitCORE"
26       "LimitRSS"
27       "LimitNOFILE"
28       "LimitAS"
29       "LimitNPROC"
30       "LimitMEMLOCK"
31       "LimitLOCKS"
32       "LimitSIGPENDING"
33       "LimitMSGQUEUE"
34       "LimitNICE"
35       "LimitRTPRIO"
36       "LimitRTTIME"
37       "OOMScoreAdjust"
38       "CPUAffinity"
39       "Hostname"
40       "ResolvConf"
41       "Timezone"
42       "LinkJournal"
43       "Ephemeral"
44       "AmbientCapability"
45     ];
47     filesOptions = [
48       "ReadOnly"
49       "Volatile"
50       "Bind"
51       "BindReadOnly"
52       "TemporaryFileSystem"
53       "Overlay"
54       "OverlayReadOnly"
55       "PrivateUsersChown"
56       "BindUser"
57       "Inaccessible"
58       "PrivateUsersOwnership"
59     ];
61     networkOptions = [
62       "Private"
63       "VirtualEthernet"
64       "VirtualEthernetExtra"
65       "Interface"
66       "MACVLAN"
67       "IPVLAN"
68       "Bridge"
69       "Zone"
70       "Port"
71     ];
73     optionsToConfig = opts: builtins.listToAttrs (map (n: lib.nameValuePair n "testdata") opts);
75     grepForOptions = opts: ''
76       node.succeed(
77           "for o in ${builtins.concatStringsSep " " opts} ; do grep --quiet $o ${configFile} || exit 1 ; done"
78         )'';
80     unitName = "options-test";
81     configFile = "/etc/systemd/nspawn/${unitName}.nspawn";
83   in
84   {
85     name = "systemd-nspawn-configfile";
87     nodes = {
88       node =
89         { pkgs, ... }:
90         {
91           systemd.nspawn."${unitName}" = {
92             enable = true;
94             execConfig = optionsToConfig execOptions // {
95               Boot = true;
96               ProcessTwo = true;
97               NotifyReady = true;
98             };
100             filesConfig = optionsToConfig filesOptions // {
101               ReadOnly = true;
102               Volatile = "state";
103               PrivateUsersChown = true;
104               PrivateUsersOwnership = "auto";
105             };
107             networkConfig = optionsToConfig networkOptions // {
108               Private = true;
109               VirtualEthernet = true;
110             };
111           };
112         };
113     };
115     testScript = ''
116       start_all()
118       node.wait_for_file("${configFile}")
120       with subtest("Test for presence of all specified options in config file"):
121         ${grepForOptions execOptions}
122         ${grepForOptions filesOptions}
123         ${grepForOptions networkOptions}
125       with subtest("Test for absence of misspelled option 'MachineId' (instead of 'MachineID')"):
126         node.fail("grep --quiet MachineId ${configFile}")
127     '';
129     meta.maintainers = [
130       lib.maintainers.zi3m5f
131     ];
132   }