nixVersions.stable: 2.15 -> 2.17
[NixPkgs.git] / nixos / tests / systemd-initrd-networkd.nix
blob8376276d8f63d9e499d792650dadb298e9d9cbf4
1 import ./make-test-python.nix ({ pkgs, lib, ... }: {
2   name = "systemd-initrd-network";
3   meta.maintainers = [ lib.maintainers.elvishjerricco ];
5   nodes = let
6     mkFlushTest = flush: script: { ... }: {
7       boot.initrd.systemd.enable = true;
8       boot.initrd.network = {
9         enable = true;
10         flushBeforeStage2 = flush;
11       };
12       systemd.services.check-flush = {
13         requiredBy = ["multi-user.target"];
14         before = ["network-pre.target" "multi-user.target"];
15         wants = ["network-pre.target"];
16         unitConfig.DefaultDependencies = false;
17         serviceConfig.Type = "oneshot";
18         path = [ pkgs.iproute2 pkgs.iputils pkgs.gnugrep ];
19         inherit script;
20       };
21     };
22   in {
23     basic = { ... }: {
24       boot.initrd.network.enable = true;
26       boot.initrd.systemd = {
27         enable = true;
28         # Enable network-online to fail the test in case of timeout
29         network.wait-online.timeout = 10;
30         network.wait-online.anyInterface = true;
31         targets.network-online.requiredBy = [ "initrd.target" ];
32         services.systemd-networkd-wait-online.requiredBy =
33           [ "network-online.target" ];
35           initrdBin = [ pkgs.iproute2 pkgs.iputils pkgs.gnugrep ];
36           services.check = {
37             requiredBy = [ "initrd.target" ];
38             before = [ "initrd.target" ];
39             after = [ "network-online.target" ];
40             serviceConfig.Type = "oneshot";
41             path = [ pkgs.iproute2 pkgs.iputils pkgs.gnugrep ];
42             script = ''
43               ip addr | grep 10.0.2.15 || exit 1
44               ping -c1 10.0.2.2 || exit 1
45             '';
46           };
47       };
48     };
50     doFlush = mkFlushTest true ''
51       if ip addr | grep 10.0.2.15; then
52         echo "Network configuration survived switch-root; flushBeforeStage2 failed"
53         exit 1
54       fi
55     '';
57     dontFlush = mkFlushTest false ''
58       if ! (ip addr | grep 10.0.2.15); then
59         echo "Network configuration didn't survive switch-root"
60         exit 1
61       fi
62     '';
63   };
65   testScript = ''
66     start_all()
67     basic.wait_for_unit("multi-user.target")
68     doFlush.wait_for_unit("multi-user.target")
69     dontFlush.wait_for_unit("multi-user.target")
70     # Make sure the systemd-network user was set correctly in initrd
71     basic.succeed("[ $(stat -c '%U,%G' /run/systemd/netif/links) = systemd-network,systemd-network ]")
72     basic.succeed("ip addr show >&2")
73     basic.succeed("ip route show >&2")
74   '';