1import ./make-test-python.nix (
2 { pkgs, ... }:
3 {
4 name = "db-rest";
5 meta.maintainers = with pkgs.lib.maintainers; [ marie ];
6
7 nodes = {
8 database = {
9 networking = {
10 interfaces.eth1 = {
11 ipv4.addresses = [
12 {
13 address = "192.168.2.10";
14 prefixLength = 24;
15 }
16 ];
17 };
18 firewall.allowedTCPPorts = [ 31638 ];
19 };
20
21 services.redis.servers.db-rest = {
22 enable = true;
23 bind = "0.0.0.0";
24 requirePass = "choochoo";
25 port = 31638;
26 };
27 };
28
29 serverWithTcp =
30 { pkgs, ... }:
31 {
32 environment = {
33 etc = {
34 "db-rest/password-redis-db".text = ''
35 choochoo
36 '';
37 };
38 };
39
40 networking = {
41 interfaces.eth1 = {
42 ipv4.addresses = [
43 {
44 address = "192.168.2.11";
45 prefixLength = 24;
46 }
47 ];
48 };
49 firewall.allowedTCPPorts = [ 3000 ];
50 };
51
52 services.db-rest = {
53 enable = true;
54 host = "0.0.0.0";
55 redis = {
56 enable = true;
57 createLocally = false;
58 host = "192.168.2.10";
59 port = 31638;
60 passwordFile = "/etc/db-rest/password-redis-db";
61 useSSL = false;
62 };
63 };
64 };
65
66 serverWithUnixSocket =
67 { pkgs, ... }:
68 {
69 networking = {
70 interfaces.eth1 = {
71 ipv4.addresses = [
72 {
73 address = "192.168.2.12";
74 prefixLength = 24;
75 }
76 ];
77 };
78 firewall.allowedTCPPorts = [ 3000 ];
79 };
80
81 services.db-rest = {
82 enable = true;
83 host = "0.0.0.0";
84 redis = {
85 enable = true;
86 createLocally = true;
87 };
88 };
89 };
90
91 client = {
92 environment.systemPackages = [ pkgs.jq ];
93 networking = {
94 interfaces.eth1 = {
95 ipv4.addresses = [
96 {
97 address = "192.168.2.13";
98 prefixLength = 24;
99 }
100 ];
101 };
102 };
103 };
104 };
105
106 testScript = ''
107 start_all()
108
109 with subtest("db-rest redis with TCP socket"):
110 database.wait_for_unit("redis-db-rest.service")
111 database.wait_for_open_port(31638)
112
113 serverWithTcp.wait_for_unit("db-rest.service")
114 serverWithTcp.wait_for_open_port(3000)
115
116 client.succeed("curl --fail --get http://192.168.2.11:3000/stations --data-urlencode 'query=Köln Hbf' | jq -r '.\"8000207\".name' | grep 'Köln Hbf'")
117
118 with subtest("db-rest redis with Unix socket"):
119 serverWithUnixSocket.wait_for_unit("db-rest.service")
120 serverWithUnixSocket.wait_for_open_port(3000)
121
122 client.succeed("curl --fail --get http://192.168.2.12:3000/stations --data-urlencode 'query=Köln Hbf' | jq -r '.\"8000207\".name' | grep 'Köln Hbf'")
123 '';
124 }
125)