at 24.11-pre 2.7 kB view raw
1{ system ? builtins.currentSystem 2, config ? {} 3, pkgs ? import ../.. { inherit system config; } 4, lib ? pkgs.lib 5}: 6 7with import ../lib/testing-python.nix { inherit system pkgs; }; 8 9let 10 inherit (lib.maintainers) elvishjerricco; 11 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 }; 25 26 mkFlushTest = flush: script: makeTest { 27 name = "systemd-initrd-network-${lib.optionalString (!flush) "no-"}flush"; 28 meta.maintainers = [ elvishjerricco ]; 29 30 nodes.machine = { 31 imports = [ common ]; 32 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 }; 45 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() 53 54 machine.wait_for_unit("multi-user.target") 55 ''; 56 }; 57 58in { 59 basic = makeTest { 60 name = "systemd-initrd-network"; 61 meta.maintainers = [ elvishjerricco ]; 62 63 nodes.machine = common; 64 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() 72 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 }; 80 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 ''; 87 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 ''; 94}