about summary refs log tree commit diff
path: root/nixos/tests/cntr.nix
diff options
context:
space:
mode:
authorRichard Marko <srk@48.io>2021-02-24 14:10:22 +0100
committerRichard Marko <srk@48.io>2021-04-07 20:27:17 +0200
commitb1672eee0cc014408bff056375436fb25d6235ab (patch)
tree77c7badb93c5385b45ea1abe1173802fd6430330 /nixos/tests/cntr.nix
parentb132849daed0f3a4ad67551084eddb957a179de0 (diff)
nixosTests.cntr: init
Diffstat (limited to 'nixos/tests/cntr.nix')
-rw-r--r--nixos/tests/cntr.nix63
1 files changed, 63 insertions, 0 deletions
diff --git a/nixos/tests/cntr.nix b/nixos/tests/cntr.nix
new file mode 100644
index 0000000000000..8cffd97459d00
--- /dev/null
+++ b/nixos/tests/cntr.nix
@@ -0,0 +1,63 @@
+# Test for cntr tool
+{ system ? builtins.currentSystem, config ? { }
+, pkgs ? import ../.. { inherit system config; }, lib ? pkgs.lib }:
+
+let
+  inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest;
+
+  mkOCITest = backend:
+    makeTest {
+      name = "cntr-${backend}";
+
+      meta = { maintainers = with lib.maintainers; [ srk mic92 ]; };
+
+      nodes = {
+        ${backend} = { pkgs, ... }: {
+          environment.systemPackages = [ pkgs.cntr ];
+          virtualisation.oci-containers = {
+            inherit backend;
+            containers.nginx = {
+              image = "nginx-container";
+              imageFile = pkgs.dockerTools.examples.nginx;
+              ports = [ "8181:80" ];
+            };
+          };
+        };
+      };
+
+      testScript = ''
+        start_all()
+        ${backend}.wait_for_unit("${backend}-nginx.service")
+        result = ${backend}.wait_until_succeeds(
+            "cntr attach -t ${backend} nginx sh -- -c 'curl localhost | grep Hello'"
+        )
+        assert "Hello" in result
+      '';
+    };
+
+  mkContainersTest = makeTest {
+    name = "cntr-containers";
+
+    meta = with pkgs.lib.maintainers; { maintainers = [ sorki mic92 ]; };
+
+    machine = { lib, ... }: {
+      environment.systemPackages = [ pkgs.cntr ];
+      containers.test = {
+        autoStart = true;
+        privateNetwork = true;
+        hostAddress = "172.16.0.1";
+        localAddress = "172.16.0.2";
+        config = { };
+      };
+    };
+
+    testScript = ''
+      machine.start()
+      machine.wait_for_unit("container@test.service")
+      machine.succeed("cntr attach test sh -- -c 'ping -c5 172.16.0.1'")
+    '';
+  };
+in {
+  nixos-container = mkContainersTest;
+} // (lib.foldl' (attrs: backend: attrs // { ${backend} = mkOCITest backend; })
+  { } [ "docker" "podman" ])