diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 7e657878509..dd9390e382b 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -69,6 +69,7 @@ in cjdns = handleTest ./cjdns.nix {}; clickhouse = handleTest ./clickhouse.nix {}; cloud-init = handleTest ./cloud-init.nix {}; + cntr = handleTest ./cntr.nix {}; cockroachdb = handleTestOn ["x86_64-linux"] ./cockroachdb.nix {}; consul = handleTest ./consul.nix {}; containers-bridge = handleTest ./containers-bridge.nix {}; diff --git a/nixos/tests/cntr.nix b/nixos/tests/cntr.nix new file mode 100644 index 00000000000..8cffd97459d --- /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" ]) diff --git a/pkgs/applications/virtualization/cntr/default.nix b/pkgs/applications/virtualization/cntr/default.nix index fa81913d72f..0a20dee1e99 100644 --- a/pkgs/applications/virtualization/cntr/default.nix +++ b/pkgs/applications/virtualization/cntr/default.nix @@ -1,4 +1,4 @@ -{ lib, rustPlatform, fetchFromGitHub }: +{ lib, rustPlatform, fetchFromGitHub, nixosTests }: rustPlatform.buildRustPackage rec { pname = "cntr"; @@ -13,6 +13,10 @@ rustPlatform.buildRustPackage rec { cargoSha256 = "sha256-3e5wDne6Idu+kDinHPcAKHfH/d4DrGg90GkiMbyF280="; + passthru.tests = { + nixos = nixosTests.cntr; + }; + meta = with lib; { description = "A container debugging tool based on FUSE"; homepage = "https://github.com/Mic92/cntr";