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