1import ./make-test-python.nix ({ lib, pkgs, ... }: {
2 name = "karma";
3 nodes = {
4 server = { ... }: {
5 services.prometheus.alertmanager = {
6 enable = true;
7 logLevel = "debug";
8 port = 9093;
9 openFirewall = true;
10 configuration = {
11 global = {
12 resolve_timeout = "1m";
13 };
14 route = {
15 # Root route node
16 receiver = "test";
17 group_by = ["..."];
18 continue = false;
19 group_wait = "1s";
20 group_interval="15s";
21 repeat_interval = "24h";
22 };
23 receivers = [
24 {
25 name = "test";
26 webhook_configs = [
27 {
28 url = "http://localhost:1234";
29 send_resolved = true;
30 max_alerts = 0;
31 }
32 ];
33 }
34 ];
35 };
36 };
37 services.karma = {
38 enable = true;
39 openFirewall = true;
40 settings = {
41 listen = {
42 address = "0.0.0.0";
43 port = 8081;
44 };
45 alertmanager = {
46 servers = [
47 {
48 name = "alertmanager";
49 uri = "https://127.0.0.1:9093";
50 }
51 ];
52 };
53 karma.name = "test-dashboard";
54 log.config = true;
55 log.requests = true;
56 log.timestamp = true;
57 };
58 };
59 };
60 };
61
62 testScript = ''
63 start_all()
64
65 with subtest("Wait for server to come up"):
66
67 server.wait_for_unit("alertmanager.service")
68 server.wait_for_unit("karma.service")
69
70 server.sleep(5) # wait for both services to settle
71
72 server.wait_for_open_port(9093)
73 server.wait_for_open_port(8081)
74
75 with subtest("Test alertmanager readiness"):
76 server.succeed("curl -s http://127.0.0.1:9093/-/ready")
77
78 # Karma only starts serving the dashboard once it has established connectivity to all alertmanagers in its config
79 # Therefore, this will fail if karma isn't able to reach alertmanager
80 server.succeed("curl -s http://127.0.0.1:8081")
81
82 server.shutdown()
83 '';
84})