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