1import ../make-test-python.nix ({ pkgs, lib, ... }:
2
3let
4 releases = import ../../release.nix {
5 configuration = {
6 # Building documentation makes the test unnecessarily take a longer time:
7 documentation.enable = lib.mkForce false;
8
9 # Our tests require `grep` & friends:
10 environment.systemPackages = with pkgs; [busybox];
11 };
12 };
13
14 vm-image-metadata = releases.lxdVirtualMachineImageMeta.${pkgs.stdenv.hostPlatform.system};
15 vm-image-disk = releases.lxdVirtualMachineImage.${pkgs.stdenv.hostPlatform.system};
16
17 instance-name = "instance1";
18in
19{
20 name = "incus-virtual-machine";
21
22 meta.maintainers = with lib.maintainers; [ adamcstephens ];
23
24 nodes.machine = {...}: {
25 virtualisation = {
26 # Ensure test VM has enough resources for creating and managing guests
27 cores = 2;
28 memorySize = 1024;
29 diskSize = 4096;
30
31 incus.enable = true;
32 };
33 };
34
35 testScript = ''
36 def instance_is_up(_) -> bool:
37 status, _ = machine.execute("incus exec ${instance-name} --disable-stdin --force-interactive /run/current-system/sw/bin/true")
38 return status == 0
39
40 machine.wait_for_unit("incus.service")
41
42 machine.succeed("incus admin init --minimal")
43
44 with subtest("virtual-machine image can be imported"):
45 machine.succeed("incus image import ${vm-image-metadata}/*/*.tar.xz ${vm-image-disk}/nixos.qcow2 --alias nixos")
46
47 with subtest("virtual-machine can be launched and become available"):
48 machine.succeed("incus launch nixos ${instance-name} --vm --config limits.memory=512MB --config security.secureboot=false")
49 with machine.nested("Waiting for instance to start and be usable"):
50 retry(instance_is_up)
51
52 with subtest("lxd-agent is started"):
53 machine.succeed("incus exec ${instance-name} systemctl is-active lxd-agent")
54 '';
55})