diff --git a/nixos/tests/frr.nix b/nixos/tests/frr.nix index a975d4b402a1..f4cd68c9d315 100644 --- a/nixos/tests/frr.nix +++ b/nixos/tests/frr.nix @@ -5,10 +5,11 @@ # # All interfaces are in OSPF Area 0. -import ./make-test-python.nix ({ pkgs, ... }: +import ./make-test-python.nix ( + { pkgs, ... }: let - ifAddr = node: iface: (pkgs.lib.head node.config.networking.interfaces.${iface}.ipv4.addresses).address; + ifAddr = node: iface: (pkgs.lib.head node.networking.interfaces.${iface}.ipv4.addresses).address; ospfConf1 = '' router ospf @@ -25,87 +26,94 @@ import ./make-test-python.nix ({ pkgs, ... }: ''; in - { - name = "frr"; + { + name = "frr"; - meta = with pkgs.lib.maintainers; { - maintainers = [ ]; - }; + meta = with pkgs.lib.maintainers; { + maintainers = [ ]; + }; - nodes = { + nodes = { - client = - { nodes, ... }: - { - virtualisation.vlans = [ 1 ]; - services.frr = { - config = '' - ip route 192.168.0.0/16 ${ifAddr nodes.router1 "eth1"} - ''; - }; - }; - - router1 = - { ... }: - { - virtualisation.vlans = [ 1 2 ]; - boot.kernel.sysctl."net.ipv4.ip_forward" = "1"; - networking.firewall.extraCommands = "iptables -A nixos-fw -i eth2 -p ospfigp -j ACCEPT"; - services.frr = { - ospfd.enable = true; - config = ospfConf1; - }; - - specialisation.ospf.configuration = { - services.frr.config = ospfConf2; - }; - }; - - router2 = - { ... }: - { - virtualisation.vlans = [ 3 2 ]; - boot.kernel.sysctl."net.ipv4.ip_forward" = "1"; - networking.firewall.extraCommands = "iptables -A nixos-fw -i eth2 -p ospfigp -j ACCEPT"; - services.frr = { - ospfd.enable = true; - config = ospfConf2; - }; - }; - - server = - { nodes, ... }: - { - virtualisation.vlans = [ 3 ]; - services.frr = { - config = '' - ip route 192.168.0.0/16 ${ifAddr nodes.router2 "eth1"} - ''; - }; - }; - }; - - testScript = + client = { nodes, ... }: - '' - start_all() + { + virtualisation.vlans = [ 1 ]; + services.frr = { + config = '' + ip route 192.168.0.0/16 ${ifAddr nodes.router1 "eth1"} + ''; + }; + }; - # Wait for the networking to start on all machines - for machine in client, router1, router2, server: - machine.wait_for_unit("network.target") + router1 = + { ... }: + { + virtualisation.vlans = [ + 1 + 2 + ]; + boot.kernel.sysctl."net.ipv4.ip_forward" = "1"; + networking.firewall.extraCommands = "iptables -A nixos-fw -i eth2 -p ospfigp -j ACCEPT"; + services.frr = { + ospfd.enable = true; + config = ospfConf1; + }; - with subtest("Wait for FRR"): - for gw in client, router1, router2, server: - gw.wait_for_unit("frr") + specialisation.ospf.configuration = { + services.frr.config = ospfConf2; + }; + }; - router1.succeed("${nodes.router1.config.system.build.toplevel}/specialisation/ospf/bin/switch-to-configuration test >&2") + router2 = + { ... }: + { + virtualisation.vlans = [ + 3 + 2 + ]; + boot.kernel.sysctl."net.ipv4.ip_forward" = "1"; + networking.firewall.extraCommands = "iptables -A nixos-fw -i eth2 -p ospfigp -j ACCEPT"; + services.frr = { + ospfd.enable = true; + config = ospfConf2; + }; + }; - with subtest("Wait for OSPF to form adjacencies"): - for gw in router1, router2: - gw.wait_until_succeeds("vtysh -c 'show ip ospf neighbor' | grep Full") - gw.wait_until_succeeds("vtysh -c 'show ip route' | grep '^O>'") + server = + { nodes, ... }: + { + virtualisation.vlans = [ 3 ]; + services.frr = { + config = '' + ip route 192.168.0.0/16 ${ifAddr nodes.router2 "eth1"} + ''; + }; + }; + }; - with subtest("Test ICMP"): - client.wait_until_succeeds("ping -4 -c 3 server >&2") - ''; - }) + testScript = + { nodes, ... }: + '' + start_all() + + # Wait for the networking to start on all machines + for machine in client, router1, router2, server: + machine.wait_for_unit("network.target") + + with subtest("Wait for FRR"): + for gw in client, router1, router2, server: + gw.wait_for_unit("frr") + + router1.succeed("${nodes.router1.system.build.toplevel}/specialisation/ospf/bin/switch-to-configuration test >&2") + + with subtest("Wait for OSPF to form adjacencies"): + for gw in router1, router2: + gw.wait_until_succeeds("vtysh -c 'show ip ospf neighbor' | grep Full") + gw.wait_until_succeeds("vtysh -c 'show ip route' | grep '^O>'") + + with subtest("Test ICMP"): + client.wait_until_succeeds("ping -4 -c 3 server >&2") + ''; + } +)