1import ./make-test-python.nix (
2 { lib, ... }:
3 {
4 name = "ntpd-rs";
5
6 meta = {
7 maintainers = with lib.maintainers; [ fpletz ];
8 };
9
10 nodes = {
11 client = {
12 services.ntpd-rs = {
13 enable = true;
14 metrics.enable = false;
15 useNetworkingTimeServers = false;
16 settings = {
17 source = [
18 {
19 mode = "server";
20 address = "server";
21 }
22 ];
23 synchronization = {
24 minimum-agreeing-sources = 1;
25 };
26 };
27 };
28 };
29 server = {
30 networking.firewall = {
31 allowedTCPPorts = [
32 9975
33 ];
34 allowedUDPPorts = [
35 123
36 ];
37 };
38
39 services.ntpd-rs = {
40 enable = true;
41 metrics.enable = true;
42 settings = {
43 observability = {
44 metrics-exporter-listen = "[::]:9975";
45 };
46 server = [
47 { listen = "[::]:123"; }
48 ];
49 };
50 };
51 };
52 };
53
54 testScript =
55 { nodes, ... }:
56 ''
57 start_all()
58
59 for machine in (server, client):
60 machine.wait_for_unit('multi-user.target')
61 machine.succeed('systemctl is-active ntpd-rs.service')
62
63 client.fail('systemctl is-active ntpd-rs-metrics.service')
64 server.succeed('systemctl is-active ntpd-rs-metrics.service')
65
66 server.wait_for_open_port(9975)
67 client.succeed('curl http://server:9975/metrics | grep ntp_uptime_seconds')
68 server.fail('curl --fail --connect-timeout 2 http://client:9975/metrics | grep ntp_uptime_seconds')
69
70 client.succeed("ntp-ctl status | grep server:123")
71 server.succeed("ntp-ctl status | grep '\[::\]:123'")
72
73 client.succeed("grep '^mode = \"server\"' $(systemctl status ntpd-rs | grep -oE '/nix/store[^ ]*ntpd-rs.toml')")
74 server.succeed("grep '^mode = \"pool\"' $(systemctl status ntpd-rs | grep -oE '/nix/store[^ ]*ntpd-rs.toml')")
75 '';
76 }
77)