From e2fb237c33a0c3389c5ee0ead869f215ac276f8d Mon Sep 17 00:00:00 2001 From: DavHau Date: Wed, 23 Apr 2025 18:55:59 +0700 Subject: [PATCH] inventory tests: use containers by default --- .../container-driver/test_driver/__main__.py | 3 -- checks/lib/container-test.nix | 36 +++---------------- checks/mumble/default.nix | 2 ++ checks/syncthing/default.nix | 2 ++ .../container-test-driver/driver-module.nix | 3 ++ .../container-test-driver/nixos-module.nix | 26 ++++++++++++++ .../test/container-test-driver}/package.nix | 0 .../container-test-driver}/pyproject.toml | 0 .../test-script-prepend.py | 0 .../test_driver/__init__.py | 5 ++- .../test_driver/logger.py | 0 .../test_driver/py.typed | 0 lib/test/default.nix | 6 +++- 13 files changed, 44 insertions(+), 39 deletions(-) delete mode 100644 checks/lib/container-driver/test_driver/__main__.py rename checks/lib/container-driver/module.nix => lib/test/container-test-driver/driver-module.nix (98%) create mode 100644 lib/test/container-test-driver/nixos-module.nix rename {checks/lib/container-driver => lib/test/container-test-driver}/package.nix (100%) rename {checks/lib/container-driver => lib/test/container-test-driver}/pyproject.toml (100%) rename {checks/lib/container-driver => lib/test/container-test-driver}/test-script-prepend.py (100%) rename {checks/lib/container-driver => lib/test/container-test-driver}/test_driver/__init__.py (99%) rename {checks/lib/container-driver => lib/test/container-test-driver}/test_driver/logger.py (100%) rename {checks/lib/container-driver => lib/test/container-test-driver}/test_driver/py.typed (100%) diff --git a/checks/lib/container-driver/test_driver/__main__.py b/checks/lib/container-driver/test_driver/__main__.py deleted file mode 100644 index 8273c4ff5..000000000 --- a/checks/lib/container-driver/test_driver/__main__.py +++ /dev/null @@ -1,3 +0,0 @@ -from . import main - -main() diff --git a/checks/lib/container-test.nix b/checks/lib/container-test.nix index bacbc8d1c..452197172 100644 --- a/checks/lib/container-test.nix +++ b/checks/lib/container-test.nix @@ -13,43 +13,15 @@ in imports = [ self.clanLib.test.minifyModule ]; - config = lib.mkMerge [ - (lib.optionalAttrs (options ? clan) { - clan.core.settings.machine.name = config.networking.hostName; - }) - { - documentation.enable = lib.mkDefault false; - boot.isContainer = true; - - # needed since nixpkgs 7fb2f407c01b017737eafc26b065d7f56434a992 removed the getty unit by default - console.enable = true; - - # undo qemu stuff - system.build.initialRamdisk = ""; - virtualisation.sharedDirectories = lib.mkForce { }; - networking.useDHCP = false; - - # We use networkd to assign static ip addresses - networking.useNetworkd = true; - services.resolved.enable = false; - - # Rename the host0 interface to eth0 to match what we expect in VM tests. - system.activationScripts.renameInterface = '' - ${pkgs.iproute2}/bin/ip link set dev host0 name eth1 - ''; - - systemd.services.backdoor.enable = false; - - # we don't have permission to set cpu scheduler in our container - systemd.services.nix-daemon.serviceConfig.CPUSchedulingPolicy = lib.mkForce ""; - } - ]; + config = lib.optionalAttrs (options ? clan) { + clan.core.settings.machine.name = config.networking.hostName; + }; }; # to accept external dependencies such as disko node.specialArgs.self = self; _module.args = { inherit self; }; imports = [ test - ./container-driver/module.nix + ../../lib/test/container-test-driver/driver-module.nix ]; }).config.result diff --git a/checks/mumble/default.nix b/checks/mumble/default.nix index 081b5ea75..8130ebfac 100644 --- a/checks/mumble/default.nix +++ b/checks/mumble/default.nix @@ -6,6 +6,8 @@ }: clanLib.test.makeTestClan { inherit pkgs self; + # TODO: container driver does not support: sleep, wait_for_window, send_chars, wait_for_text + useContainers = false; nixosTest = ( { lib, ... }: let diff --git a/checks/syncthing/default.nix b/checks/syncthing/default.nix index 762041e31..d1730cae4 100644 --- a/checks/syncthing/default.nix +++ b/checks/syncthing/default.nix @@ -6,6 +6,8 @@ }: clanLib.test.makeTestClan { inherit pkgs self; + # TODO: container driver does not support wait_for_file() yet + useContainers = false; nixosTest = ( { lib, ... }: { diff --git a/checks/lib/container-driver/module.nix b/lib/test/container-test-driver/driver-module.nix similarity index 98% rename from checks/lib/container-driver/module.nix rename to lib/test/container-test-driver/driver-module.nix index a6bfd079a..fbf647747 100644 --- a/checks/lib/container-driver/module.nix +++ b/lib/test/container-test-driver/driver-module.nix @@ -37,6 +37,9 @@ let pythonizedNames = map pythonizeName nodeHostNames; in { + defaults.imports = [ + ./nixos-module.nix + ]; driver = lib.mkForce ( hostPkgs.runCommand "nixos-test-driver-${config.name}" { diff --git a/lib/test/container-test-driver/nixos-module.nix b/lib/test/container-test-driver/nixos-module.nix new file mode 100644 index 000000000..090279c06 --- /dev/null +++ b/lib/test/container-test-driver/nixos-module.nix @@ -0,0 +1,26 @@ +{ pkgs, lib, ... }: +{ + boot.isContainer = true; + + # needed since nixpkgs 7fb2f407c01b017737eafc26b065d7f56434a992 removed the getty unit by default + console.enable = true; + + # undo qemu stuff + system.build.initialRamdisk = ""; + virtualisation.sharedDirectories = lib.mkForce { }; + networking.useDHCP = false; + + # We use networkd to assign static ip addresses + networking.useNetworkd = true; + services.resolved.enable = false; + + # Rename the host0 interface to eth0 to match what we expect in VM tests. + system.activationScripts.renameInterface = '' + ${pkgs.iproute2}/bin/ip link set dev host0 name eth1 + ''; + + systemd.services.backdoor.enable = false; + + # we don't have permission to set cpu scheduler in our container + systemd.services.nix-daemon.serviceConfig.CPUSchedulingPolicy = lib.mkForce ""; +} diff --git a/checks/lib/container-driver/package.nix b/lib/test/container-test-driver/package.nix similarity index 100% rename from checks/lib/container-driver/package.nix rename to lib/test/container-test-driver/package.nix diff --git a/checks/lib/container-driver/pyproject.toml b/lib/test/container-test-driver/pyproject.toml similarity index 100% rename from checks/lib/container-driver/pyproject.toml rename to lib/test/container-test-driver/pyproject.toml diff --git a/checks/lib/container-driver/test-script-prepend.py b/lib/test/container-test-driver/test-script-prepend.py similarity index 100% rename from checks/lib/container-driver/test-script-prepend.py rename to lib/test/container-test-driver/test-script-prepend.py diff --git a/checks/lib/container-driver/test_driver/__init__.py b/lib/test/container-test-driver/test_driver/__init__.py similarity index 99% rename from checks/lib/container-driver/test_driver/__init__.py rename to lib/test/container-test-driver/test_driver/__init__.py index f6901ee2a..ea0737c5d 100644 --- a/checks/lib/container-driver/test_driver/__init__.py +++ b/lib/test/container-test-driver/test_driver/__init__.py @@ -116,7 +116,7 @@ class Machine: def container_pid(self) -> int: return self.get_systemd_process() - def start(self) -> list[str]: + def start(self) -> None: prepare_machine_root(self.name, self.rootdir) cmd = [ "systemd-nspawn", @@ -137,8 +137,6 @@ class Machine: env = os.environ.copy() env["SYSTEMD_NSPAWN_UNIFIED_HIERARCHY"] = "1" self.process = subprocess.Popen(cmd, stdout=subprocess.PIPE, text=True, env=env) - self.container_pid = self.get_systemd_process() - return cmd def get_systemd_process(self) -> int: assert self.process is not None, "Machine not started" @@ -455,6 +453,7 @@ class Driver: subprocess.run(["ip", "link", "set", "br0", "up"], check=True, text=True) for machine in self.machines: + print(f"Starting {machine.name}") machine.start() def test_symbols(self) -> dict[str, Any]: diff --git a/checks/lib/container-driver/test_driver/logger.py b/lib/test/container-test-driver/test_driver/logger.py similarity index 100% rename from checks/lib/container-driver/test_driver/logger.py rename to lib/test/container-test-driver/test_driver/logger.py diff --git a/checks/lib/container-driver/test_driver/py.typed b/lib/test/container-test-driver/test_driver/py.typed similarity index 100% rename from checks/lib/container-driver/test_driver/py.typed rename to lib/test/container-test-driver/test_driver/py.typed diff --git a/lib/test/default.nix b/lib/test/default.nix index d6d140216..7ea6f703d 100644 --- a/lib/test/default.nix +++ b/lib/test/default.nix @@ -4,6 +4,7 @@ let mkOption types ; + in { flakeModules = clanLib.callLib ./flakeModules.nix { }; @@ -17,6 +18,7 @@ in nixosTest, pkgs, self, + useContainers ? true, ... }: let @@ -28,7 +30,9 @@ in clanFlakeResult = config.clan; in { - imports = [ nixosTest ]; + imports = [ + nixosTest + ] ++ lib.optionals (useContainers) [ ./container-test-driver/driver-module.nix ]; options = { clanSettings = mkOption { default = { };