nixpkgs/nixos/tests/haproxy.nix
Hugo Geoffroy c784d3ab76 nixos/haproxy: add reloading support, use upstream service hardening
Refactor the systemd service definition for the haproxy reverse proxy,
using the upstream systemd service definition. This allows the service
to be reloaded on changes, preserving existing server state, and adds
some hardening options.
2020-05-31 22:35:27 +02:00

56 lines
1.6 KiB
Nix

import ./make-test-python.nix ({ pkgs, ...}: {
name = "haproxy";
nodes = {
machine = { ... }: {
imports = [ ../modules/profiles/minimal.nix ];
services.haproxy = {
enable = true;
config = ''
defaults
timeout connect 10s
backend http_server
mode http
server httpd [::1]:8000
frontend http
bind *:80
mode http
option http-use-htx
http-request use-service prometheus-exporter if { path /metrics }
use_backend http_server
'';
};
services.httpd = {
enable = true;
virtualHosts.localhost = {
documentRoot = pkgs.writeTextDir "index.txt" "We are all good!";
adminAddr = "notme@yourhost.local";
listen = [{
ip = "::1";
port = 8000;
}];
};
};
};
};
testScript = ''
start_all()
machine.wait_for_unit("multi-user.target")
machine.wait_for_unit("haproxy.service")
machine.wait_for_unit("httpd.service")
assert "We are all good!" in machine.succeed("curl -k http://localhost:80/index.txt")
assert "haproxy_process_pool_allocated_bytes" in machine.succeed(
"curl -k http://localhost:80/metrics"
)
with subtest("reload"):
machine.succeed("systemctl reload haproxy")
# wait some time to ensure the following request hits the reloaded haproxy
machine.sleep(5)
assert "We are all good!" in machine.succeed(
"curl -k http://localhost:80/index.txt"
)
'';
})