From 7e7ed65f2982e58fcbbd837ac4a165d7aa7e9b0b Mon Sep 17 00:00:00 2001 From: r-vdp Date: Fri, 5 Jun 2026 18:44:12 +0300 Subject: [PATCH] nixos/tests/lvm2: switch to runTest --- nixos/tests/all-tests.nix | 2 +- nixos/tests/lvm2/default.nix | 87 +++++++++--------- nixos/tests/lvm2/systemd-stage-1.nix | 127 +++++++++++++-------------- nixos/tests/lvm2/thinpool.nix | 83 +++++++++-------- nixos/tests/lvm2/vdo.nix | 55 ++++++------ 5 files changed, 173 insertions(+), 181 deletions(-) diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 6c257d735d87..9d01b75516f7 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -942,7 +942,7 @@ in lomiri-system-settings = runTest ./lomiri-system-settings.nix; lorri = handleTest ./lorri/default.nix { }; luks = runTest ./luks.nix; - lvm2 = handleTest ./lvm2 { }; + lvm2 = import ./lvm2 { inherit pkgs runTest; }; lxc = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./lxc; lxd-image-server = runTest ./lxd-image-server.nix; lxqt = runTest ./lxqt.nix; diff --git a/nixos/tests/lvm2/default.nix b/nixos/tests/lvm2/default.nix index dfdd3ae6a9a2..55e12bb39aef 100644 --- a/nixos/tests/lvm2/default.nix +++ b/nixos/tests/lvm2/default.nix @@ -1,8 +1,6 @@ { - system ? builtins.currentSystem, - config ? { }, - pkgs ? import ../../.. { inherit system config; }, - lib ? pkgs.lib, + pkgs, + runTest, kernelVersionsToTest ? [ "5.10" "5.15" @@ -15,38 +13,36 @@ # For quickly running a test, the nixosTests.lvm2.lvm-thinpool-linux-latest attribute is recommended let - tests = - let - callTest = p: lib.flip (import p) { inherit system pkgs; }; - in - { - thinpool = { - test = callTest ./thinpool.nix; - kernelFilter = lib.id; - }; - # we would like to test all versions, but the kernel module currently does not compile against the other versions - vdo = { - test = callTest ./vdo.nix; - kernelFilter = lib.filter (v: v == "latest"); - }; + inherit (pkgs) lib; - # systemd in stage 1 - raid-sd-stage-1 = { - test = callTest ./systemd-stage-1.nix; - kernelFilter = lib.filter (v: v != "5.15"); - flavour = "raid"; - }; - thinpool-sd-stage-1 = { - test = callTest ./systemd-stage-1.nix; - kernelFilter = lib.id; - flavour = "thinpool"; - }; - vdo-sd-stage-1 = { - test = callTest ./systemd-stage-1.nix; - kernelFilter = lib.filter (v: v == "latest"); - flavour = "vdo"; - }; + tests = { + thinpool = { + test = ./thinpool.nix; + kernelFilter = lib.id; }; + # we would like to test all versions, but the kernel module currently does not compile against the other versions + vdo = { + test = ./vdo.nix; + kernelFilter = lib.filter (v: v == "latest"); + }; + + # systemd in stage 1 + raid-sd-stage-1 = { + test = ./systemd-stage-1.nix; + kernelFilter = lib.filter (v: v != "5.15"); + flavour = "raid"; + }; + thinpool-sd-stage-1 = { + test = ./systemd-stage-1.nix; + kernelFilter = lib.id; + flavour = "thinpool"; + }; + vdo-sd-stage-1 = { + test = ./systemd-stage-1.nix; + kernelFilter = lib.filter (v: v == "latest"); + flavour = "vdo"; + }; + }; in lib.listToAttrs ( lib.filter (x: x.value != { }) ( @@ -61,18 +57,17 @@ lib.listToAttrs ( lib.flip lib.mapAttrsToList tests ( name: t: lib.nameValuePair "lvm-${name}-linux-${v'}" ( - lib.optionalAttrs (builtins.elem version (t.kernelFilter kernelVersionsToTest)) ( - t.test ( - { - kernelPackages = pkgs."linuxPackages_${v'}"; - inherit mkXfsFlags; - } - // removeAttrs t [ - "test" - "kernelFilter" - ] - ) - ) + lib.optionalAttrs (builtins.elem version (t.kernelFilter kernelVersionsToTest)) (runTest { + imports = [ t.test ]; + _module.args = { + kernelPackages = pkgs."linuxPackages_${v'}"; + inherit mkXfsFlags; + } + // removeAttrs t [ + "test" + "kernelFilter" + ]; + }) ) ) ) diff --git a/nixos/tests/lvm2/systemd-stage-1.nix b/nixos/tests/lvm2/systemd-stage-1.nix index c6c68ae64c1c..e85493996220 100644 --- a/nixos/tests/lvm2/systemd-stage-1.nix +++ b/nixos/tests/lvm2/systemd-stage-1.nix @@ -1,7 +1,9 @@ { + lib, kernelPackages ? null, flavour, mkXfsFlags ? "", + ... }: let preparationCode = @@ -66,74 +68,71 @@ let .${flavour}; in -import ../make-test-python.nix ( - { pkgs, lib, ... }: - { - name = "lvm2-${flavour}-systemd-stage-1"; - meta.maintainers = with lib.maintainers; [ - das_j - helsinki-Jo - ]; +{ + name = "lvm2-${flavour}-systemd-stage-1"; + meta.maintainers = with lib.maintainers; [ + das_j + helsinki-Jo + ]; - nodes.machine = - { pkgs, lib, ... }: - { - imports = [ extraConfig ]; - # Use systemd-boot - virtualisation = { - emptyDiskImages = [ - 8192 - 8192 - ]; - useBootLoader = true; - useEFIBoot = true; - # To boot off the LVM disk, we need to have a init script which comes from the Nix store. - mountHostNixStore = true; - }; - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; + nodes.machine = + { pkgs, lib, ... }: + { + imports = [ extraConfig ]; + # Use systemd-boot + virtualisation = { + emptyDiskImages = [ + 8192 + 8192 + ]; + useBootLoader = true; + useEFIBoot = true; + # To boot off the LVM disk, we need to have a init script which comes from the Nix store. + mountHostNixStore = true; + }; + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; - environment.systemPackages = with pkgs; [ xfsprogs ]; - boot = { - initrd.systemd = { - enable = true; - emergencyAccess = true; - }; - initrd.services.lvm.enable = true; - kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages; - }; - - specialisation.boot-lvm.configuration.virtualisation = { - useDefaultFilesystems = false; - fileSystems = { - "/" = { - device = "/dev/test_vg/test_lv"; - fsType = "xfs"; - }; - }; - - rootDevice = "/dev/test_vg/test_lv"; + environment.systemPackages = with pkgs; [ xfsprogs ]; + boot = { + initrd.systemd = { + enable = true; + emergencyAccess = true; }; + initrd.services.lvm.enable = true; + kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages; }; - testScript = '' - machine.wait_for_unit("multi-user.target") - # Create a VG for the root - ${preparationCode} - machine.succeed("mkfs.xfs ${mkXfsFlags} /dev/test_vg/test_lv") - machine.succeed("mkdir -p /mnt && mount /dev/test_vg/test_lv /mnt && echo hello > /mnt/test && umount /mnt") + specialisation.boot-lvm.configuration.virtualisation = { + useDefaultFilesystems = false; + fileSystems = { + "/" = { + device = "/dev/test_vg/test_lv"; + fsType = "xfs"; + }; + }; - # Boot from LVM - machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-lvm.conf") - machine.succeed("sync") - machine.crash() - machine.wait_for_unit("multi-user.target") + rootDevice = "/dev/test_vg/test_lv"; + }; + }; - # Ensure we have successfully booted from LVM - assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1 - assert "/dev/mapper/test_vg-test_lv on / type xfs" in machine.succeed("mount") - assert "hello" in machine.succeed("cat /test") - ${extraCheck} - ''; - } -) + testScript = '' + machine.wait_for_unit("multi-user.target") + # Create a VG for the root + ${preparationCode} + machine.succeed("mkfs.xfs ${mkXfsFlags} /dev/test_vg/test_lv") + machine.succeed("mkdir -p /mnt && mount /dev/test_vg/test_lv /mnt && echo hello > /mnt/test && umount /mnt") + + # Boot from LVM + machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-lvm.conf") + machine.succeed("sync") + machine.crash() + machine.wait_for_unit("multi-user.target") + + # Ensure we have successfully booted from LVM + assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1 + assert "/dev/mapper/test_vg-test_lv on / type xfs" in machine.succeed("mount") + assert "hello" in machine.succeed("cat /test") + ${extraCheck} + ''; +} diff --git a/nixos/tests/lvm2/thinpool.nix b/nixos/tests/lvm2/thinpool.nix index 8c7471d46f28..02d081f6b38c 100644 --- a/nixos/tests/lvm2/thinpool.nix +++ b/nixos/tests/lvm2/thinpool.nix @@ -1,49 +1,48 @@ { + lib, kernelPackages ? null, mkXfsFlags ? "", + ... }: -import ../make-test-python.nix ( - { pkgs, lib, ... }: - { - name = "lvm2-thinpool"; - meta.maintainers = with lib.maintainers; [ - das_j - helsinki-Jo - ]; +{ + name = "lvm2-thinpool"; + meta.maintainers = with lib.maintainers; [ + das_j + helsinki-Jo + ]; - nodes.machine = - { pkgs, lib, ... }: - { - virtualisation.emptyDiskImages = [ 4096 ]; - services.lvm = { - boot.thin.enable = true; - dmeventd.enable = true; - }; - environment.systemPackages = with pkgs; [ xfsprogs ]; - environment.etc."lvm/lvm.conf".text = '' - activation/thin_pool_autoextend_percent = 10 - activation/thin_pool_autoextend_threshold = 80 - ''; - boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; }; + nodes.machine = + { pkgs, lib, ... }: + { + virtualisation.emptyDiskImages = [ 4096 ]; + services.lvm = { + boot.thin.enable = true; + dmeventd.enable = true; }; - - testScript = - let - mkXfsFlags = - lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.10") " -m bigtime=0 -m inobtcount=0 " - + lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.19") " -i nrext64=0 "; - in - '' - machine.succeed("vgcreate test_vg /dev/vdb") - machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool") - machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg") - machine.succeed("mkfs.xfs ${mkXfsFlags} /dev/test_vg/test_lv") - machine.succeed("mkdir /mnt; mount /dev/test_vg/test_lv /mnt") - assert "/dev/mapper/test_vg-test_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip() - machine.succeed("dd if=/dev/zero of=/mnt/empty.file bs=1M count=1024") - machine.succeed("journalctl -u dm-event.service | grep \"successfully resized\"") - machine.succeed("umount /mnt") - machine.succeed("vgchange -a n") + environment.systemPackages = with pkgs; [ xfsprogs ]; + environment.etc."lvm/lvm.conf".text = '' + activation/thin_pool_autoextend_percent = 10 + activation/thin_pool_autoextend_threshold = 80 ''; - } -) + boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; }; + }; + + testScript = + let + mkXfsFlags = + lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.10") " -m bigtime=0 -m inobtcount=0 " + + lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.19") " -i nrext64=0 "; + in + '' + machine.succeed("vgcreate test_vg /dev/vdb") + machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool") + machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg") + machine.succeed("mkfs.xfs ${mkXfsFlags} /dev/test_vg/test_lv") + machine.succeed("mkdir /mnt; mount /dev/test_vg/test_lv /mnt") + assert "/dev/mapper/test_vg-test_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip() + machine.succeed("dd if=/dev/zero of=/mnt/empty.file bs=1M count=1024") + machine.succeed("journalctl -u dm-event.service | grep \"successfully resized\"") + machine.succeed("umount /mnt") + machine.succeed("vgchange -a n") + ''; +} diff --git a/nixos/tests/lvm2/vdo.nix b/nixos/tests/lvm2/vdo.nix index ee65aa7d828f..94894f64377b 100644 --- a/nixos/tests/lvm2/vdo.nix +++ b/nixos/tests/lvm2/vdo.nix @@ -1,35 +1,34 @@ { + lib, kernelPackages ? null, mkXfsFlags ? "", + ... }: -import ../make-test-python.nix ( - { pkgs, lib, ... }: - { - name = "lvm2-vdo"; - meta.maintainers = [ ]; +{ + name = "lvm2-vdo"; + meta.maintainers = [ ]; - nodes.machine = - { pkgs, lib, ... }: - { - # Minimum required size for VDO volume: 5063921664 bytes - virtualisation.emptyDiskImages = [ 8192 ]; - services.lvm = { - boot.vdo.enable = true; - dmeventd.enable = true; - }; - environment.systemPackages = with pkgs; [ xfsprogs ]; - boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; }; + nodes.machine = + { pkgs, lib, ... }: + { + # Minimum required size for VDO volume: 5063921664 bytes + virtualisation.emptyDiskImages = [ 8192 ]; + services.lvm = { + boot.vdo.enable = true; + dmeventd.enable = true; }; + environment.systemPackages = with pkgs; [ xfsprogs ]; + boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; }; + }; - testScript = '' - machine.succeed("vgcreate test_vg /dev/vdb") - machine.succeed("lvcreate --type vdo -n vdo_lv -L 6G -V 12G test_vg/vdo_pool_lv") - machine.succeed("mkfs.xfs ${mkXfsFlags} -K /dev/test_vg/vdo_lv") - machine.succeed("mkdir /mnt; mount /dev/test_vg/vdo_lv /mnt") - assert "/dev/mapper/test_vg-vdo_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip() - machine.succeed("umount /mnt") - machine.succeed("vdostats") - machine.succeed("vgchange -a n") - ''; - } -) + testScript = '' + machine.succeed("vgcreate test_vg /dev/vdb") + machine.succeed("lvcreate --type vdo -n vdo_lv -L 6G -V 12G test_vg/vdo_pool_lv") + machine.succeed("mkfs.xfs ${mkXfsFlags} -K /dev/test_vg/vdo_lv") + machine.succeed("mkdir /mnt; mount /dev/test_vg/vdo_lv /mnt") + assert "/dev/mapper/test_vg-vdo_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip() + machine.succeed("umount /mnt") + machine.succeed("vdostats") + machine.succeed("vgchange -a n") + ''; +}