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