2019-12-15 16:01:03 +00:00
|
|
|
import ./make-test-python.nix ({ pkgs, ...}: {
|
2018-06-08 21:30:24 +01:00
|
|
|
name = "haproxy";
|
|
|
|
nodes = {
|
2018-07-20 21:56:59 +01:00
|
|
|
machine = { ... }: {
|
2018-06-08 21:30:24 +01:00
|
|
|
services.haproxy = {
|
|
|
|
enable = true;
|
|
|
|
config = ''
|
|
|
|
defaults
|
|
|
|
timeout connect 10s
|
|
|
|
|
|
|
|
backend http_server
|
|
|
|
mode http
|
|
|
|
server httpd [::1]:8000
|
|
|
|
|
|
|
|
frontend http
|
|
|
|
bind *:80
|
|
|
|
mode http
|
2019-11-08 05:47:13 +00:00
|
|
|
http-request use-service prometheus-exporter if { path /metrics }
|
2018-06-08 21:30:24 +01:00
|
|
|
use_backend http_server
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
services.httpd = {
|
|
|
|
enable = true;
|
2019-11-04 21:24:55 +00:00
|
|
|
virtualHosts.localhost = {
|
|
|
|
documentRoot = pkgs.writeTextDir "index.txt" "We are all good!";
|
|
|
|
adminAddr = "notme@yourhost.local";
|
|
|
|
listen = [{
|
|
|
|
ip = "::1";
|
|
|
|
port = 8000;
|
|
|
|
}];
|
|
|
|
};
|
2018-06-08 21:30:24 +01:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
testScript = ''
|
2019-12-15 16:01:03 +00:00
|
|
|
start_all()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
machine.wait_for_unit("haproxy.service")
|
|
|
|
machine.wait_for_unit("httpd.service")
|
2020-09-15 23:38:02 +01:00
|
|
|
assert "We are all good!" in machine.succeed("curl -fk http://localhost:80/index.txt")
|
2019-12-15 16:01:03 +00:00
|
|
|
assert "haproxy_process_pool_allocated_bytes" in machine.succeed(
|
2020-09-15 23:38:02 +01:00
|
|
|
"curl -fk http://localhost:80/metrics"
|
2019-12-15 16:01:03 +00:00
|
|
|
)
|
2020-05-20 08:29:27 +01:00
|
|
|
|
|
|
|
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(
|
2020-09-15 23:38:02 +01:00
|
|
|
"curl -fk http://localhost:80/index.txt"
|
2020-05-20 08:29:27 +01:00
|
|
|
)
|
2018-06-08 21:30:24 +01:00
|
|
|
'';
|
|
|
|
})
|