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