nix-processmgmt/tests/webapps-agnostic-supervisor...

181 lines
5.3 KiB
Nix

{nixpkgs ? <nixpkgs>}:
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
let
supervisordProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
exprFile = ../nixproc/backends/supervisord/test-module/processes-supervisord.nix;
};
processesEnvForeground = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "foreground";
};
};
processesEnvDaemon = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
extraParams = {
webappMode = "daemon";
};
};
processesEnvAuto = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
};
processesEnvAutoUnprivileged = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes.nix;
forceDisableUserChange = true;
};
processesEnvAdvanced = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = ../examples/webapps-agnostic/processes-advanced.nix;
};
processesEnvEmpty = import ../nixproc/backends/supervisord/build-supervisord-env.nix {
exprFile = null;
};
tools = import ../tools {};
nix-processmgmt = ./..;
env = "NIX_PATH=nixpkgs=${nixpkgs} SYSTEMD_TARGET_DIR=/etc/systemd-mutable/system SUPERVISORD_CONF_DIR=/var/lib/supervisord";
in
makeTest {
name = "webapps-agnostic-supervisord";
nodes.machine =
{pkgs, ...}:
{
virtualisation.additionalPaths = [ pkgs.stdenv ] ++ pkgs.coreutils.all ++ [
supervisordProcessEnv
processesEnvForeground
processesEnvDaemon
processesEnvAuto
processesEnvAutoUnprivileged
processesEnvAdvanced
processesEnvEmpty
];
virtualisation.writableStore = true;
virtualisation.memorySize = 1024;
boot.extraSystemdUnitPaths = [ "/etc/systemd-mutable/system" ];
# We can't download any substitutes in a test environment. To make tests
# faster, we disable substitutes so that Nix does not waste any time by
# attempting to download them.
nix.extraOptions = ''
substitute = false
'';
environment.systemPackages = [
pkgs.stdenv
pkgs.python3Packages.supervisor
pkgs.dysnomia
tools.common
tools.systemd
tools.supervisord
];
};
testScript = ''
def check_nginx_redirection():
machine.succeed(
"curl --fail -H 'Host: webapp.local' http://localhost:8080 | grep 'listening on port: 5000'"
)
def check_system_unavailable():
machine.fail("curl --fail http://localhost:8080")
machine.fail("pgrep -f '/bin/webapp'")
def check_nginx_multi_instance_redirection():
machine.succeed(
"curl --fail -H 'Host: webapp1.local' http://localhost:8080 | grep 'listening on port: 5001'"
)
machine.succeed(
"curl --fail -H 'Host: webapp5.local' http://localhost:8081 | grep 'listening on port: 5005'"
)
start_all()
machine.succeed("mkdir -p /etc/systemd-mutable/system")
# Deploy supervisord as a systemd unit
machine.succeed(
"${env} nixproc-systemd-switch ${nix-processmgmt}/nixproc/backends/supervisord/test-module/processes-supervisord.nix"
)
machine.wait_for_open_port(9001)
# Deploy the system with foreground webapp processes
machine.succeed(
'${env} nixproc-supervisord-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --extra-params \'{ "webappMode" = "foreground"; }\'${""}'
)
machine.succeed("sleep 1")
machine.succeed("pgrep -u webapp -f '/bin/webapp$'")
check_nginx_redirection()
# Deploy the system with daemon webapp processes
machine.succeed(
'${env} nixproc-supervisord-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --extra-params \'{ "webappMode" = "daemon"; }\'${""}'
)
machine.succeed("sleep 1")
machine.succeed("pgrep -u webapp -f '/bin/webapp -D$'")
check_nginx_redirection()
# Deploy the entire system in auto mode. Should result in foreground webapp processes
machine.succeed(
"${env} nixproc-supervisord-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix"
)
machine.succeed("sleep 1")
machine.succeed("pgrep -u webapp -f '/bin/webapp$'")
check_nginx_redirection()
# Deploy the advanced example with multiple instances and see if it works
machine.succeed(
"${env} nixproc-supervisord-switch ${nix-processmgmt}/examples/webapps-agnostic/processes-advanced.nix"
)
machine.succeed("sleep 1")
check_nginx_multi_instance_redirection()
# Deploy an instance without changing user privileges
machine.succeed(
"${env} nixproc-supervisord-switch ${nix-processmgmt}/examples/webapps-agnostic/processes.nix --force-disable-user-change"
)
machine.succeed("sleep 1")
machine.succeed("pgrep -u root -f '/bin/webapp$'")
check_nginx_redirection()
# Undeploy the system
machine.succeed(
"${env} nixproc-supervisord-switch --undeploy"
)
check_system_unavailable()
'';
}