nixos/tests/incus: fix subtest names and add reboot check

This commit is contained in:
Adam C. Stephens
2025-01-17 10:11:07 -05:00
parent 274e0fd934
commit f3a75905ab
+44 -32
View File
@@ -228,39 +228,41 @@ import ../make-test-python.nix (
alias = "nixos/container/${variant}"
variant = "${variant}"
with subtest("Container image can be imported"):
with subtest("container image can be imported"):
machine.succeed(f"incus image import {metadata} {rootfs} --alias {alias}")
with subtest("Container can be launched and managed"):
with subtest("container can be launched and managed"):
machine.succeed(f"incus launch {alias} container-{variant}1")
wait_for_instance(f"container-{variant}1")
with subtest("Container mounts lxcfs overlays"):
with subtest("container mounts lxcfs overlays"):
machine.succeed(f"incus exec container-{variant}1 mount | grep 'lxcfs on /proc/cpuinfo type fuse.lxcfs'")
machine.succeed(f"incus exec container-{variant}1 mount | grep 'lxcfs on /proc/meminfo type fuse.lxcfs'")
with subtest("resource limits"):
with subtest("Container CPU limits can be managed"):
set_config(f"container-{variant}1", "limits.cpu 1", restart=True)
wait_incus_exec_success(f"container-{variant}1", "nproc | grep '^1$'", timeout=15)
with subtest("Container CPU limits can be hotplug changed"):
set_config(f"container-{variant}1", "limits.cpu 2")
wait_incus_exec_success(f"container-{variant}1", "nproc | grep '^2$'", timeout=15)
with subtest("Container memory limits can be managed"):
set_config(f"container-{variant}1", "limits.memory 128MB", restart=True)
wait_incus_exec_success(f"container-{variant}1", "grep 'MemTotal:[[:space:]]*125000 kB' /proc/meminfo", timeout=15)
with subtest("Container memory limits can be hotplug changed"):
set_config(f"container-{variant}1", "limits.memory 256MB")
wait_incus_exec_success(f"container-{variant}1", "grep 'MemTotal:[[:space:]]*250000 kB' /proc/meminfo", timeout=15)
with subtest("container CPU limits can be managed"):
set_config(f"container-{variant}1", "limits.cpu 1", restart=True)
wait_incus_exec_success(f"container-{variant}1", "nproc | grep '^1$'", timeout=15)
with subtest("virtual tpm can be configured"):
with subtest("container CPU limits can be hotplug changed"):
set_config(f"container-{variant}1", "limits.cpu 2")
wait_incus_exec_success(f"container-{variant}1", "nproc | grep '^2$'", timeout=15)
with subtest("container memory limits can be managed"):
set_config(f"container-{variant}1", "limits.memory 128MB", restart=True)
wait_incus_exec_success(f"container-{variant}1", "grep 'MemTotal:[[:space:]]*125000 kB' /proc/meminfo", timeout=15)
with subtest("container memory limits can be hotplug changed"):
set_config(f"container-{variant}1", "limits.memory 256MB")
wait_incus_exec_success(f"container-{variant}1", "grep 'MemTotal:[[:space:]]*250000 kB' /proc/meminfo", timeout=15)
with subtest("container software tpm can be configured"):
machine.succeed(f"incus config device add container-{variant}1 vtpm tpm path=/dev/tpm0 pathrm=/dev/tpmrm0")
machine.succeed(f"incus exec container-{variant}1 -- test -e /dev/tpm0")
machine.succeed(f"incus exec container-{variant}1 -- test -e /dev/tpmrm0")
@@ -268,7 +270,7 @@ import ../make-test-python.nix (
machine.fail(f"incus exec container-{variant}1 -- test -e /dev/tpm0")
with subtest("lxc-generator"):
with subtest("container lxc-generator compatibility"):
with subtest("lxc-container generator configures plain container"):
# default container is plain
machine.succeed(f"incus exec container-{variant}1 test -- -e /run/systemd/system/service.d/zzz-lxc-service.conf")
@@ -293,7 +295,7 @@ import ../make-test-python.nix (
check_sysctl(f"container-{variant}2")
with subtest("supports per-instance lxcfs"):
with subtest("container supports per-instance lxcfs"):
machine.succeed(f"incus stop container-{variant}1")
machine.fail(f"pgrep -a lxcfs | grep 'incus/devices/container-{variant}1/lxcfs'")
@@ -304,14 +306,19 @@ import ../make-test-python.nix (
machine.succeed(f"pgrep -a lxcfs | grep 'incus/devices/container-{variant}1/lxcfs'")
with subtest("Instance remains running when softDaemonRestart is enabled and service is stopped"):
with subtest("container can successfully restart"):
machine.succeed(f"incus restart container-{variant}1")
wait_for_instance(f"container-{variant}1")
with subtest("container remains running when softDaemonRestart is enabled and service is stopped"):
pid = machine.succeed(f"incus info container-{variant}1 | grep 'PID'").split(":")[1].strip()
machine.succeed(f"ps {pid}")
machine.succeed("systemctl stop incus")
machine.succeed(f"ps {pid}")
machine.succeed("systemctl start incus")
with subtest("Instances stop with incus-startup.service"):
with subtest("containers stop with incus-startup.service"):
pid = machine.succeed(f"incus info container-{variant}1 | grep 'PID'").split(":")[1].strip()
machine.succeed(f"ps {pid}")
machine.succeed("systemctl stop incus-startup.service")
@@ -342,7 +349,7 @@ import ../make-test-python.nix (
machine.succeed(f"incus create {alias} vm-{variant}1 --vm --config limits.memory=512MB --config security.secureboot=false")
with subtest("virtual tpm can be configured"):
with subtest("virtual-machine software tpm can be configured"):
machine.succeed(f"incus config device add vm-{variant}1 vtpm tpm path=/dev/tpm0")
@@ -351,25 +358,30 @@ import ../make-test-python.nix (
wait_for_instance(f"vm-{variant}1")
with subtest("incus-agent is started"):
with subtest("virtual-machine incus-agent is started"):
machine.succeed(f"incus exec vm-{variant}1 systemctl is-active incus-agent")
with subtest("incus-agent has a valid path"):
with subtest("virtual-machine incus-agent has a valid path"):
machine.succeed(f"incus exec vm-{variant}1 -- bash -c 'true'")
with subtest("Container CPU limits can be managed"):
with subtest("virtual-machine CPU limits can be managed"):
set_config(f"vm-{variant}1", "limits.cpu 1", restart=True)
wait_incus_exec_success(f"vm-{variant}1", "nproc | grep '^1$'", timeout=90)
with subtest("Container CPU limits can be hotplug changed"):
with subtest("virtual-machine CPU limits can be hotplug changed"):
set_config(f"vm-{variant}1", "limits.cpu 2")
wait_incus_exec_success(f"vm-{variant}1", "nproc | grep '^2$'", timeout=15)
with subtest("Instance remains running when softDaemonRestart is enabled and service is stopped"):
with subtest("virtual-machine can successfully restart"):
machine.succeed(f"incus restart vm-{variant}1")
wait_for_instance(f"vm-{variant}1")
with subtest("virtual-machine remains running when softDaemonRestart is enabled and service is stopped"):
pid = machine.succeed(f"incus info vm-{variant}1 | grep 'PID'").split(":")[1].strip()
machine.succeed(f"ps {pid}")
machine.succeed("systemctl stop incus")
@@ -377,7 +389,7 @@ import ../make-test-python.nix (
machine.succeed("systemctl start incus")
with subtest("Instances stop with incus-startup.service"):
with subtest("virtual-machines stop with incus-startup.service"):
pid = machine.succeed(f"incus info vm-{variant}1 | grep 'PID'").split(":")[1].strip()
machine.succeed(f"ps {pid}")
machine.succeed("systemctl stop incus-startup.service")
@@ -391,7 +403,7 @@ import ../make-test-python.nix (
+
# python
''
with subtest("Can launch CSM virtual machine"):
with subtest("virtual-machine can launch CSM (BIOS)"):
machine.succeed("incus init csm --vm --empty -c security.csm=true -c security.secureboot=false")
machine.succeed("incus start csm")