nixpkgs/nixos/tests/ntpd-rs.nix

75 lines
1.9 KiB
Nix

{ lib, ... }:
{
name = "ntpd-rs";
meta = {
maintainers = with lib.maintainers; [ fpletz ];
};
nodes = {
client = {
services.ntpd-rs = {
enable = true;
metrics.enable = false;
useNetworkingTimeServers = false;
settings = {
source = [
{
mode = "server";
address = "server";
}
];
synchronization = {
minimum-agreeing-sources = 1;
};
};
};
};
server = {
networking.firewall = {
allowedTCPPorts = [
9975
];
allowedUDPPorts = [
123
];
};
services.ntpd-rs = {
enable = true;
metrics.enable = true;
settings = {
observability = {
metrics-exporter-listen = "[::]:9975";
};
server = [
{ listen = "[::]:123"; }
];
};
};
};
};
testScript =
{ nodes, ... }:
''
start_all()
for machine in (server, client):
machine.wait_for_unit('multi-user.target')
machine.succeed('systemctl is-active ntpd-rs.service')
client.fail('systemctl is-active ntpd-rs-metrics.service')
server.succeed('systemctl is-active ntpd-rs-metrics.service')
server.wait_for_open_port(9975)
client.succeed('curl http://server:9975/metrics | grep ntp_uptime_seconds')
server.fail('curl --fail --connect-timeout 2 http://client:9975/metrics | grep ntp_uptime_seconds')
client.succeed("ntp-ctl status | grep server:123")
server.succeed("ntp-ctl status | grep '\[::\]:123'")
client.succeed("grep '^mode = \"server\"' $(systemctl status ntpd-rs | grep -oE '/nix/store[^ ]*ntpd-rs.toml')")
server.succeed("grep '^mode = \"pool\"' $(systemctl status ntpd-rs | grep -oE '/nix/store[^ ]*ntpd-rs.toml')")
'';
}