Initial test cases implementation for a sub set of services

This commit is contained in:
Sander van der Burg 2021-03-25 21:30:24 +01:00 committed by Sander van der Burg
parent 878ea506e0
commit 69115ec021
18 changed files with 605 additions and 3 deletions

View File

@ -21,9 +21,9 @@ createManagedProcess {
''}
'';
process = "${subversion.out}/bin/svnserve";
args = [ "-r" svnBaseDir "--listen-port" (toString port) ];
foregroundProcessExtraArgs = [ "--foreground" ];
daemonExtraArgs = [ "--daemon" "--pid-file" pidFile ];
args = [ "-r" svnBaseDir "--listen-port" port "--daemon" ];
foregroundProcessExtraArgs = ["--foreground" ];
daemonExtraArgs = [ "--pid-file" pidFile ];
overrides = {
sysvinit = {

View File

@ -0,0 +1,25 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
readiness = {instanceName, instance, stateDir, ...}:
if instanceName == "tomcat" then ''
machine.wait_for_open_port(${toString instance.httpPort})
machine.wait_for_file("${stateDir}/tomcat/webapps/examples")
''
else if instanceName == "apache" then ''
machine.wait_for_open_port(${toString instance.port})
''
else "";
tests = {instanceName, instance, ...}:
pkgs.lib.optionalString (instanceName == "apache") ''
machine.succeed("sleep 20")
machine.succeed(
"curl --fail http://localhost:${toString instance.port}/examples/servlets/servlet/HelloWorldExample | grep 'Hello World!'"
)
'';
inherit processManagers profiles;
}

View File

@ -0,0 +1,41 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir libDir spoolDir forceDisableUserChange processManager;
};
in
rec {
tomcat = rec {
ajpPort = 8009;
httpPort = 8080;
pkg = constructors.simpleAppservingTomcat {
enableAJP = true;
inherit ajpPort httpPort;
};
};
apache = rec {
port = if forceDisableUserChange then 8081 else 80;
pkg = constructors.reverseProxyApache {
inherit port;
dependency = tomcat;
serverAdmin = "admin@localhost";
targetProtocol = "ajp";
portPropertyName = "ajpPort";
};
};
}

View File

@ -0,0 +1,24 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
nixosConfig = {
virtualisation.diskSize = 8192;
virtualisation.memorySize = 1024;
};
readiness = {instanceName, instance, ...}:
''
machine.wait_for_open_port(${toString instance.httpPort})
'';
tests = {instanceName, instance, ...}:
''
machine.succeed(
"curl --fail http://localhost:${toString instance.httpPort}/examples/servlets/servlet/HelloWorldExample | grep 'Hello World!'"
)
'';
inherit processManagers profiles;
}

View File

@ -0,0 +1,43 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir libDir spoolDir forceDisableUserChange processManager;
};
in
rec {
tomcat-primary = rec {
serverPort = 8005;
httpPort = 8080;
httpsPort = 8443;
ajpPort = 8009;
pkg = constructors.simpleAppservingTomcat {
inherit serverPort httpPort httpsPort ajpPort;
instanceSuffix = "-primary";
};
};
tomcat-secondary = rec {
serverPort = 8006;
httpPort = 8081;
httpsPort = 8444;
ajpPort = 8010;
pkg = constructors.simpleAppservingTomcat {
inherit serverPort httpPort httpsPort ajpPort;
instanceSuffix = "-secondary";
};
};
}

17
tests/apache/default.nix Normal file
View File

@ -0,0 +1,17 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
readiness = {instanceName, instance, ...}:
''
machine.wait_for_open_port(${toString instance.port})
'';
tests = {instanceName, instance, ...}:
''
machine.succeed("curl --fail http://localhost:${toString instance.port} | grep 'Hello world!'")
'';
inherit processManagers profiles;
}

View File

@ -0,0 +1,84 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir libDir spoolDir forceDisableUserChange processManager;
};
webappStatic = pkgs.stdenv.mkDerivation {
name = "webapp-static";
buildCommand = ''
mkdir -p $out
cat > $out/index.html <<EOF
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
EOF
'';
};
webappPHP = pkgs.stdenv.mkDerivation {
name = "webapp-php";
buildCommand = ''
mkdir -p $out
cat > $out/index.php <<EOF
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1><?php print("Hello world!"); ?></h1>
</body>
</html>
EOF
'';
};
in
rec {
# The first instance only serves static web apps
apache-primary = rec {
port = if forceDisableUserChange then 8080 else 80;
pkg = constructors.simpleWebappApache {
inherit port;
instanceSuffix = "-primary";
serverAdmin = "root@localhost";
documentRoot = webappStatic;
};
};
# The second instance is PHP enabled
apache-secondary = rec {
port = if forceDisableUserChange then 8081 else 81;
pkg = constructors.simpleWebappApache {
inherit port;
instanceSuffix = "-secondary";
serverAdmin = "root@localhost";
documentRoot = webappPHP;
enablePHP = true;
};
};
}

45
tests/default.nix Normal file
View File

@ -0,0 +1,45 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, processManagers ? [ "supervisord" "sysvinit" "systemd" "docker" "disnix" "s6-rc" ]
, profiles ? [ "privileged" "unprivileged" ]
, nix-processmgmt ? ../../nix-processmgmt
}:
let
testService = import "${nix-processmgmt}/nixproc/test-driver/universal.nix" {
inherit system;
};
in
{
apache = import ./apache {
inherit pkgs processManagers profiles testService;
};
apache-tomcat = import ./apache-tomcat {
inherit pkgs processManagers profiles testService;
};
apache-tomcat-ajp-reverse-proxy = import ./apache-tomcat-ajp-reverse-proxy {
inherit pkgs processManagers profiles testService;
};
influxdb = import ./influxdb {
inherit pkgs processManagers profiles testService;
};
mongodb = import ./mongodb {
inherit pkgs processManagers profiles testService;
};
mysql = import ./mysql {
inherit pkgs processManagers profiles testService;
};
postgresql = import ./postgresql {
inherit pkgs processManagers profiles testService;
};
svnserve = import ./svnserve {
inherit pkgs processManagers profiles testService;
};
}

View File

@ -0,0 +1,21 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
systemPackages = [ pkgs.influxdb ];
readiness = {instanceName, instance, ...}:
''
machine.wait_for_open_port(${toString instance.httpPort})
'';
tests = {instanceName, instance, runtimeDir, forceDisableUserChange, ...}:
# Make a special exception for the first instance running in privileged mode. It should be connectible with the default settings
if instanceName == "influxdb" && !forceDisableUserChange then ''
machine.succeed("influx -execute 'show databases' >&2")
'' else ''
machine.succeed("influx -execute 'show databases' --port ${toString instance.httpPort} >&2")
'';
inherit processManagers profiles;
}

View File

@ -0,0 +1,38 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir libDir forceDisableUserChange processManager;
};
in
rec {
influxdb = rec {
rpcPort = 8088;
httpPort = 8086;
pkg = constructors.simpleInfluxdb {
inherit rpcPort httpPort;
};
};
influxdb-secondary = rec {
rpcPort = 8092;
httpPort = 8090;
pkg = constructors.simpleInfluxdb {
inherit rpcPort httpPort;
instanceSuffix = "-secondary";
};
};
}

24
tests/mongodb/default.nix Normal file
View File

@ -0,0 +1,24 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
systemPackages = [ pkgs.mongodb ];
nixosConfig = {
virtualisation.memorySize = 1024;
virtualisation.diskSize = 8192;
};
readiness = {instanceName, instance, ...}:
''
machine.wait_for_open_port(${toString instance.port})
'';
tests = {instanceName, instance, runtimeDir, forceDisableUserChange, ...}:
# Make a special exception for the first instance running in privileged mode. It should be connectible with the default settings
if instanceName == "mongodb" && !forceDisableUserChange then ''
machine.succeed("echo 'show databases' | mongo >&2")
'' else ''
machine.succeed("echo 'show databases' | mongo --port ${toString instance.port} >&2")
'';
inherit processManagers profiles;
}

View File

@ -0,0 +1,36 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir libDir forceDisableUserChange processManager;
};
in
rec {
mongodb = rec {
port = 27017;
pkg = constructors.simpleMongodb {
inherit port;
};
};
mongodb-secondary = rec {
port = 27018;
pkg = constructors.simpleMongodb {
inherit port;
instanceSuffix = "-secondary";
};
};
}

23
tests/mysql/default.nix Normal file
View File

@ -0,0 +1,23 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
systemPackages = [ pkgs.mysql ];
readiness = {instanceName, instance, ...}:
''
machine.wait_for_open_port(${toString instance.port})
'';
tests = {instanceName, instance, runtimeDir, forceDisableUserChange, ...}:
# Make a special exception for the first instance running in privileged mode. It should be connectible with the default settings
if instanceName == "mysql" && !forceDisableUserChange then ''
machine.succeed("echo 'show databases;' | mysql >&2")
'' else ''
machine.succeed(
"echo 'show databases;' | mysql -S ${runtimeDir}/mysqld${instance.instanceSuffix}/mysqld.sock >&2"
)
'';
inherit processManagers profiles;
}

37
tests/mysql/processes.nix Normal file
View File

@ -0,0 +1,37 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir libDir forceDisableUserChange processManager;
};
in
rec {
mysql = rec {
port = 3306;
instanceSuffix = "";
pkg = constructors.mysql {
inherit port instanceSuffix;
};
};
mysql-secondary = rec {
port = 3307;
instanceSuffix = "-secondary";
pkg = constructors.mysql {
inherit port instanceSuffix;
};
};
}

View File

@ -0,0 +1,29 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
systemPackages = [ pkgs.postgresql ];
nixosConfig = {
virtualisation.diskSize = 8192;
virtualisation.memorySize = 1024;
};
readiness = {instanceName, instance, ...}:
''
machine.wait_for_open_port(${toString instance.port})
'';
tests = {instanceName, instance, runtimeDir, forceDisableUserChange, ...}:
# Make a special exception for the first instance running in privileged mode. It should be connectible with the default settings
if instanceName == "postgresql" && !forceDisableUserChange then ''
machine.succeed("su - postgresql -c 'psql -l'")
'' else ''
# fmt: off
machine.succeed(
"su - ${if forceDisableUserChange then "unprivileged" else instanceName} -c 'psql ${pkgs.lib.optionalString forceDisableUserChange "-U unprivileged"} -h ${runtimeDir}/${instanceName} --port ${toString instance.port} -l'"
)
# fmt: on
'';
inherit processManagers profiles;
}

View File

@ -0,0 +1,36 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir libDir forceDisableUserChange processManager;
};
in
rec {
postgresql = rec {
port = 5432;
pkg = constructors.simplePostgresql {
inherit port;
};
};
postgresql-secondary = rec {
port = 5433;
pkg = constructors.simplePostgresql {
inherit port;
instanceSuffix = "-secondary";
};
};
}

View File

@ -0,0 +1,39 @@
{ pkgs, testService, processManagers, profiles }:
testService {
exprFile = ./processes.nix;
systemPackages = [ pkgs.subversion ];
readiness = {instanceName, instance, ...}:
''
machine.wait_for_open_port(${toString instance.port})
'';
tests = {instanceName, instance, stateDir, forceDisableUserChange, ...}:
''
# fmt: off
machine.succeed(
"mkdir -p ${instance.svnBaseDir}"
)
machine.succeed(
"svnadmin create ${instance.svnBaseDir}/testrepo-${instanceName}"
)
# fmt: on
''
# Make a special exception for the first instance running in privileged mode. It should be connectible with the default settings
+ (if instanceName == "svnserve" && !forceDisableUserChange then ''
# fmt: off
machine.succeed(
"svn co svn://localhost/testrepo-${instanceName}"
)
# fmt: on
'' else ''
# fmt: off
machine.succeed(
"svn co svn://localhost:${toString instance.port}/testrepo-${instanceName}"
)
# fmt: on
'');
inherit processManagers profiles;
}

View File

@ -0,0 +1,40 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, libDir ? "${stateDir}/lib"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir libDir spoolDir forceDisableUserChange processManager;
};
in
rec {
svnserve = rec {
port = 3690;
svnBaseDir = "${stateDir}/repos";
pkg = constructors.svnserve {
inherit port svnBaseDir;
svnGroup = "root";
};
};
svnserve-secondary = rec {
port = 3691;
svnBaseDir = "${stateDir}/repos-secondary";
pkg = constructors.svnserve {
inherit port svnBaseDir;
instanceSuffix = "-secondary";
svnGroup = "root";
};
};
}