notes: 2.3.0 -> 2.3.1 (#352950)
[NixPkgs.git] / nixos / tests / systemd-initrd-networkd.nix
blob691f4300d7a23beb103bf8ed27b311d59f068725
1 { system ? builtins.currentSystem
2 , config ? {}
3 , pkgs ? import ../.. { inherit system config; }
4 , lib ? pkgs.lib
5 }:
7 with import ../lib/testing-python.nix { inherit system pkgs; };
9 let
10   inherit (lib.maintainers) elvishjerricco;
12   common = {
13     boot.initrd.systemd = {
14       enable = true;
15       network.wait-online.timeout = 10;
16       network.wait-online.anyInterface = true;
17       targets.network-online.requiredBy = [ "initrd.target" ];
18       services.systemd-networkd-wait-online.requiredBy =
19         [ "network-online.target" ];
20       initrdBin = [ pkgs.iproute2 pkgs.iputils pkgs.gnugrep ];
21     };
22     testing.initrdBackdoor = true;
23     boot.initrd.network.enable = true;
24   };
26   mkFlushTest = flush: script: makeTest {
27     name = "systemd-initrd-network-${lib.optionalString (!flush) "no-"}flush";
28     meta.maintainers = [ elvishjerricco ];
30     nodes.machine = {
31       imports = [ common ];
33       boot.initrd.network.flushBeforeStage2 = flush;
34       systemd.services.check-flush = {
35         requiredBy = ["multi-user.target"];
36         before = [ "network-pre.target" "multi-user.target" "shutdown.target" ];
37         conflicts = [ "shutdown.target" ];
38         wants = ["network-pre.target"];
39         unitConfig.DefaultDependencies = false;
40         serviceConfig.Type = "oneshot";
41         path = [ pkgs.iproute2 pkgs.iputils pkgs.gnugrep ];
42         inherit script;
43       };
44     };
46     testScript = ''
47       machine.wait_for_unit("network-online.target")
48       machine.succeed(
49           "ip addr | grep 10.0.2.15",
50           "ping -c1 10.0.2.2",
51       )
52       machine.switch_root()
54       machine.wait_for_unit("multi-user.target")
55     '';
56   };
58 in {
59   basic = makeTest {
60     name = "systemd-initrd-network";
61     meta.maintainers = [ elvishjerricco ];
63     nodes.machine = common;
65     testScript = ''
66       machine.wait_for_unit("network-online.target")
67       machine.succeed(
68           "ip addr | grep 10.0.2.15",
69           "ping -c1 10.0.2.2",
70       )
71       machine.switch_root()
73       # Make sure the systemd-network user was set correctly in initrd
74       machine.wait_for_unit("multi-user.target")
75       machine.succeed("[ $(stat -c '%U,%G' /run/systemd/netif/links) = systemd-network,systemd-network ]")
76       machine.succeed("ip addr show >&2")
77       machine.succeed("ip route show >&2")
78     '';
79   };
81   doFlush = mkFlushTest true ''
82     if ip addr | grep 10.0.2.15; then
83       echo "Network configuration survived switch-root; flushBeforeStage2 failed"
84       exit 1
85     fi
86   '';
88   dontFlush = mkFlushTest false ''
89     if ! (ip addr | grep 10.0.2.15); then
90       echo "Network configuration didn't survive switch-root"
91       exit 1
92     fi
93   '';