From 63f8122cd93b8d100865515d80b5e1325e69f2cd Mon Sep 17 00:00:00 2001 From: danbst Date: Wed, 23 Aug 2017 12:43:07 +0300 Subject: [PATCH] nixos tests: add test for declarative containers, that container config changes are applied on `nixos-rebuild switch` invocations. --- nixos/tests/containers-reloadable.nix | 66 +++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 nixos/tests/containers-reloadable.nix diff --git a/nixos/tests/containers-reloadable.nix b/nixos/tests/containers-reloadable.nix new file mode 100644 index 00000000000..b5867c6f6ab --- /dev/null +++ b/nixos/tests/containers-reloadable.nix @@ -0,0 +1,66 @@ +import ./make-test.nix ({ pkgs, lib, ...} : +let + client_base = rec { + + containers.test1 = { + autoStart = true; + config = { + environment.etc."check".text = "client_base"; + }; + }; + + # prevent make-test.nix to change IP + networking.interfaces = { + eth1.ip4 = lib.mkOverride 0 [ ]; + }; + }; +in { + name = "cotnainers-reloadable"; + meta = with pkgs.stdenv.lib.maintainers; { + maintainers = [ danbst ]; + }; + + nodes = { + client = { lib, pkgs, ... }: { + imports = [ client_base ]; + }; + + client_c1 = { lib, pkgs, ... }: { + imports = [ client_base ]; + + containers.test1.config = { + environment.etc."check".text = lib.mkForce "client_c1"; + services.httpd.enable = true; + services.httpd.adminAddr = "nixos@example.com"; + }; + }; + client_c2 = { lib, pkgs, ... }: { + imports = [ client_base ]; + + containers.test1.config = { + environment.etc."check".text = lib.mkForce "client_c2"; + services.nginx.enable = true; + }; + }; + }; + + testScript = {nodes, ...}: let + originalSystem = nodes.client.config.system.build.toplevel; + c1System = nodes.client_c1.config.system.build.toplevel; + c2System = nodes.client_c2.config.system.build.toplevel; + in '' + $client->start(); + $client->waitForUnit("default.target"); + $client->succeed("[[ \$(nixos-container run test1 cat /etc/check) == client_base ]] >&2"); + + $client->succeed("${c1System}/bin/switch-to-configuration test >&2"); + $client->succeed("[[ \$(nixos-container run test1 cat /etc/check) == client_c1 ]] >&2"); + $client->succeed("systemctl status httpd -M test1 >&2"); + + $client->succeed("${c2System}/bin/switch-to-configuration test >&2"); + $client->succeed("[[ \$(nixos-container run test1 cat /etc/check) == client_c2 ]] >&2"); + $client->fail("systemctl status httpd -M test1 >&2"); + $client->succeed("systemctl status nginx -M test1 >&2"); + ''; + +})