1import ../make-test-python.nix ({pkgs, ...}:
2{
3 name = "peertube";
4 meta.maintainers = with pkgs.lib.maintainers; [ izorkin ];
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 = [ 5432 6379 ];
15 };
16
17 services.postgresql = {
18 enable = true;
19 enableTCPIP = true;
20 authentication = ''
21 hostnossl peertube_local peertube_test 192.168.2.11/32 md5
22 '';
23 initialScript = pkgs.writeText "postgresql_init.sql" ''
24 CREATE ROLE peertube_test LOGIN PASSWORD '0gUN0C1mgST6czvjZ8T9';
25 CREATE DATABASE peertube_local TEMPLATE template0 ENCODING UTF8;
26 GRANT ALL PRIVILEGES ON DATABASE peertube_local TO peertube_test;
27 \connect peertube_local
28 CREATE EXTENSION IF NOT EXISTS pg_trgm;
29 CREATE EXTENSION IF NOT EXISTS unaccent;
30 '';
31 };
32
33 services.redis = {
34 enable = true;
35 bind = "0.0.0.0";
36 requirePass = "turrQfaQwnanGbcsdhxy";
37 };
38 };
39
40 server = { pkgs, ... }: {
41 environment = {
42 etc = {
43 "peertube/password-posgressql-db".text = ''
44 0gUN0C1mgST6czvjZ8T9
45 '';
46 "peertube/password-redis-db".text = ''
47 turrQfaQwnanGbcsdhxy
48 '';
49 };
50 };
51
52 networking = {
53 interfaces.eth1 = {
54 ipv4.addresses = [
55 { address = "192.168.2.11"; prefixLength = 24; }
56 ];
57 };
58 extraHosts = ''
59 192.168.2.11 peertube.local
60 '';
61 firewall.allowedTCPPorts = [ 9000 ];
62 };
63
64 services.peertube = {
65 enable = true;
66 localDomain = "peertube.local";
67 enableWebHttps = false;
68
69 database = {
70 host = "192.168.2.10";
71 name = "peertube_local";
72 user = "peertube_test";
73 passwordFile = "/etc/peertube/password-posgressql-db";
74 };
75
76 redis = {
77 host = "192.168.2.10";
78 passwordFile = "/etc/peertube/password-redis-db";
79 };
80
81 settings = {
82 listen = {
83 hostname = "0.0.0.0";
84 };
85 instance = {
86 name = "PeerTube Test Server";
87 };
88 };
89 };
90 };
91
92 client = {
93 environment.systemPackages = [ pkgs.jq ];
94 networking = {
95 interfaces.eth1 = {
96 ipv4.addresses = [
97 { address = "192.168.2.12"; prefixLength = 24; }
98 ];
99 };
100 extraHosts = ''
101 192.168.2.11 peertube.local
102 '';
103 };
104 };
105
106 };
107
108 testScript = ''
109 start_all()
110
111 database.wait_for_unit("postgresql.service")
112 database.wait_for_unit("redis.service")
113
114 database.wait_for_open_port(5432)
115 database.wait_for_open_port(6379)
116
117 server.wait_for_unit("peertube.service")
118 server.wait_for_open_port(9000)
119
120 # Check if PeerTube is running
121 client.succeed("curl --fail http://peertube.local:9000/api/v1/config/about | jq -r '.instance.name' | grep 'PeerTube\ Test\ Server'")
122
123 client.shutdown()
124 server.shutdown()
125 database.shutdown()
126 '';
127})