87 lines
2.4 KiB
Nix
87 lines
2.4 KiB
Nix
{nixpkgs ? <nixpkgs>}:
|
|
|
|
with import "${nixpkgs}/nixos/lib/testing-python.nix" { system = builtins.currentSystem; };
|
|
|
|
let
|
|
pkgs = import nixpkgs {};
|
|
|
|
dockerProcessEnv = import ../nixproc/backends/systemd/build-systemd-env.nix {
|
|
exprFile = ../nixproc/backends/docker/test-module/processes-docker.nix;
|
|
};
|
|
|
|
processManagers = [ "supervisord" "sysvinit" "disnix" "s6-rc" ];
|
|
userManagementPolicies = [ "privileged" "unprivileged" ];
|
|
|
|
images = pkgs.lib.genAttrs processManagers (processManager:
|
|
pkgs.lib.genAttrs userManagementPolicies (userManagementPolicy:
|
|
import ../examples/multi-process-image {
|
|
inherit processManager;
|
|
forceDisableUserChange = userManagementPolicy == "unprivileged";
|
|
}
|
|
)
|
|
);
|
|
|
|
nix-processmgmt = ./..;
|
|
|
|
tools = import ../tools {};
|
|
|
|
env = "NIX_PATH=nixpkgs=${nixpkgs} SYSTEMD_TARGET_DIR=/etc/systemd-mutable/system";
|
|
in
|
|
makeTest {
|
|
name = "multi-process-images";
|
|
|
|
nodes.machine =
|
|
{pkgs, ...}:
|
|
|
|
{
|
|
virtualisation.additionalPaths = [ pkgs.stdenv ] ++ pkgs.coreutils.all ++ [ dockerProcessEnv ];
|
|
virtualisation.writableStore = true;
|
|
virtualisation.diskSize = 8192;
|
|
virtualisation.memorySize = 8192;
|
|
|
|
dysnomia = {
|
|
enable = true;
|
|
enableLegacyModules = false;
|
|
};
|
|
|
|
environment.systemPackages = [
|
|
tools.common
|
|
tools.systemd
|
|
pkgs.docker
|
|
];
|
|
};
|
|
|
|
testScript = ''
|
|
start_all()
|
|
|
|
machine.succeed("mkdir -p /etc/systemd-mutable/system")
|
|
|
|
# Deploy Docker as a systemd unit
|
|
|
|
machine.succeed(
|
|
"${env} nixproc-systemd-switch ${nix-processmgmt}/nixproc/backends/docker/test-module/processes-docker.nix"
|
|
)
|
|
|
|
machine.wait_for_unit("nix-process-docker")
|
|
machine.succeed("sleep 10")
|
|
|
|
${pkgs.lib.concatMapStrings (processManager:
|
|
pkgs.lib.concatMapStrings (userManagementPolicy:
|
|
let
|
|
image = images."${processManager}"."${userManagementPolicy}";
|
|
in
|
|
''
|
|
machine.succeed(
|
|
"docker load -i ${image}"
|
|
)
|
|
machine.succeed(
|
|
"docker run --name multiprocess --detach --rm --network host multiprocess:test"
|
|
)
|
|
machine.succeed("sleep 30")
|
|
machine.succeed("curl --fail -H 'Host: webapp.local' http://localhost:8080")
|
|
machine.succeed("docker stop multiprocess")
|
|
machine.succeed("docker rmi multiprocess:test")
|
|
'') userManagementPolicies
|
|
) processManagers}'';
|
|
}
|