1# Test for cntr tool
2{ system ? builtins.currentSystem, config ? { }
3, pkgs ? import ../.. { inherit system config; }, lib ? pkgs.lib }:
4
5let
6 inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest;
7
8 mkOCITest = backend:
9 makeTest {
10 name = "cntr-${backend}";
11
12 meta = { maintainers = with lib.maintainers; [ sorki mic92 ]; };
13
14 nodes = {
15 ${backend} = { pkgs, ... }: {
16 environment.systemPackages = [ pkgs.cntr ];
17 virtualisation.oci-containers = {
18 inherit backend;
19 containers.nginx = {
20 image = "nginx-container";
21 imageFile = pkgs.dockerTools.examples.nginx;
22 ports = [ "8181:80" ];
23 };
24 };
25 };
26 };
27
28 testScript = ''
29 start_all()
30 ${backend}.wait_for_unit("${backend}-nginx.service")
31 result = ${backend}.wait_until_succeeds(
32 "cntr attach -t ${backend} nginx sh -- -c 'curl localhost | grep Hello'"
33 )
34 assert "Hello" in result
35 '';
36 };
37
38 mkContainersTest = makeTest {
39 name = "cntr-containers";
40
41 meta = with pkgs.lib.maintainers; { maintainers = [ sorki mic92 ]; };
42
43 machine = { lib, ... }: {
44 environment.systemPackages = [ pkgs.cntr ];
45 containers.test = {
46 autoStart = true;
47 privateNetwork = true;
48 hostAddress = "172.16.0.1";
49 localAddress = "172.16.0.2";
50 config = { };
51 };
52 };
53
54 testScript = ''
55 machine.start()
56 machine.wait_for_unit("container@test.service")
57 machine.succeed("cntr attach test sh -- -c 'ping -c5 172.16.0.1'")
58 '';
59 };
60in {
61 nixos-container = mkContainersTest;
62} // (lib.foldl' (attrs: backend: attrs // { ${backend} = mkOCITest backend; })
63 { } [ "docker" "podman" ])