diff options
Diffstat (limited to 'nixpkgs/nixos/tests/lxd/container.nix')
-rw-r--r-- | nixpkgs/nixos/tests/lxd/container.nix | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/nixpkgs/nixos/tests/lxd/container.nix b/nixpkgs/nixos/tests/lxd/container.nix new file mode 100644 index 000000000000..9e56f6e41e05 --- /dev/null +++ b/nixpkgs/nixos/tests/lxd/container.nix @@ -0,0 +1,118 @@ +import ../make-test-python.nix ({ pkgs, lib, ... } : + +let + lxd-image = import ../../release.nix { + configuration = { + # Building documentation makes the test unnecessarily take a longer time: + documentation.enable = lib.mkForce false; + + # Our tests require `grep` & friends: + environment.systemPackages = with pkgs; [ busybox ]; + }; + }; + + lxd-image-metadata = lxd-image.lxdMeta.${pkgs.stdenv.hostPlatform.system}; + lxd-image-rootfs = lxd-image.lxdImage.${pkgs.stdenv.hostPlatform.system}; + +in { + name = "lxd"; + + meta = with pkgs.lib.maintainers; { + maintainers = [ patryk27 ]; + }; + + nodes.machine = { lib, ... }: { + virtualisation = { + diskSize = 4096; + + # Since we're testing `limits.cpu`, we've gotta have a known number of + # cores to lean on + cores = 2; + + # Ditto, for `limits.memory` + memorySize = 512; + + lxc.lxcfs.enable = true; + lxd.enable = true; + }; + }; + + testScript = '' + def instance_is_up(_) -> bool: + status, _ = machine.execute("lxc exec container --disable-stdin --force-interactive /run/current-system/sw/bin/true") + return status == 0 + + machine.wait_for_unit("sockets.target") + machine.wait_for_unit("lxd.service") + machine.wait_for_file("/var/lib/lxd/unix.socket") + + # Wait for lxd to settle + machine.succeed("lxd waitready") + + machine.succeed("lxd init --minimal") + + machine.succeed( + "lxc image import ${lxd-image-metadata}/*/*.tar.xz ${lxd-image-rootfs}/*/*.tar.xz --alias nixos" + ) + + with subtest("Container can be managed"): + machine.succeed("lxc launch nixos container") + with machine.nested("Waiting for instance to start and be usable"): + retry(instance_is_up) + machine.succeed("echo true | lxc exec container /run/current-system/sw/bin/bash -") + machine.succeed("lxc delete -f container") + + with subtest("Container is mounted with lxcfs inside"): + machine.succeed("lxc launch nixos container") + with machine.nested("Waiting for instance to start and be usable"): + retry(instance_is_up) + + ## ---------- ## + ## limits.cpu ## + + machine.succeed("lxc config set container limits.cpu 1") + machine.succeed("lxc restart container") + with machine.nested("Waiting for instance to start and be usable"): + retry(instance_is_up) + + assert ( + "1" + == machine.succeed("lxc exec container grep -- -c ^processor /proc/cpuinfo").strip() + ) + + machine.succeed("lxc config set container limits.cpu 2") + machine.succeed("lxc restart container") + with machine.nested("Waiting for instance to start and be usable"): + retry(instance_is_up) + + assert ( + "2" + == machine.succeed("lxc exec container grep -- -c ^processor /proc/cpuinfo").strip() + ) + + ## ------------- ## + ## limits.memory ## + + machine.succeed("lxc config set container limits.memory 64MB") + machine.succeed("lxc restart container") + with machine.nested("Waiting for instance to start and be usable"): + retry(instance_is_up) + + assert ( + "MemTotal: 62500 kB" + == machine.succeed("lxc exec container grep -- MemTotal /proc/meminfo").strip() + ) + + machine.succeed("lxc config set container limits.memory 128MB") + machine.succeed("lxc restart container") + with machine.nested("Waiting for instance to start and be usable"): + retry(instance_is_up) + + assert ( + "MemTotal: 125000 kB" + == machine.succeed("lxc exec container grep -- MemTotal /proc/meminfo").strip() + ) + + machine.succeed("lxc delete -f container") + ''; +}) |