# Commit-confirm: an unconfirmed activation is rolled back by the timer, a # confirmed one stays. { self, pkgs }: let common = import ./common.nix; in pkgs.testers.runNixOSTest { name = "router-rollback"; defaults.imports = [ common.tools ]; nodes.router = { lib, ... }: { imports = [ self.nixosModules.router ]; virtualisation.vlans = [ 1 2 ]; networking.interfaces.eth1.ipv4.addresses = lib.mkForce [ ]; networking.interfaces.eth2.ipv4.addresses = lib.mkForce [ ]; router = { enable = true; wan.interface = "eth1"; lans.main = { interface = "eth2"; internet = true; ipv4.address = "192.168.10.1"; dhcp.pool = { start = "192.168.10.100"; end = "192.168.10.199"; }; }; }; # Stands in for a freshly deployed configuration. specialisation.deployed.configuration.environment.etc."deployed".text = "yes"; }; testScript = '' router.wait_for_unit("multi-user.target") router.wait_for_unit("nftables.service") activate = "/run/current-system/specialisation/deployed/bin/switch-to-configuration test" with subtest("an unconfirmed deployment is rolled back"): router.fail("test -e /etc/deployed") router.succeed("router-arm 60s") router.succeed(activate) router.succeed("test -e /etc/deployed") router.wait_until_fails("test -e /etc/deployed", timeout=180) router.wait_for_unit("nftables.service") with subtest("a confirmed deployment stays"): router.succeed("router-arm 60s") router.succeed(activate) router.succeed("router-confirm") router.fail("systemctl is-active router-rollback.timer") router.sleep(75) router.succeed("test -e /etc/deployed") ''; }