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 31638 ];
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.servers.peertube = {
34 enable = true;
35 bind = "0.0.0.0";
36 requirePass = "turrQfaQwnanGbcsdhxy";
37 port = 31638;
38 };
39 };
40
41 server = { pkgs, ... }: {
42 environment = {
43 etc = {
44 "peertube/secrets-peertube".text = ''
45 063d9c60d519597acef26003d5ecc32729083965d09181ef3949200cbe5f09ee
46 '';
47 "peertube/password-posgressql-db".text = ''
48 0gUN0C1mgST6czvjZ8T9
49 '';
50 "peertube/password-redis-db".text = ''
51 turrQfaQwnanGbcsdhxy
52 '';
53 };
54 };
55
56 networking = {
57 interfaces.eth1 = {
58 ipv4.addresses = [
59 { address = "192.168.2.11"; prefixLength = 24; }
60 ];
61 };
62 extraHosts = ''
63 192.168.2.11 peertube.local
64 '';
65 firewall.allowedTCPPorts = [ 9000 ];
66 };
67
68 services.peertube = {
69 enable = true;
70 localDomain = "peertube.local";
71 enableWebHttps = false;
72
73 secrets = {
74 secretsFile = "/etc/peertube/secrets-peertube";
75 };
76
77 database = {
78 host = "192.168.2.10";
79 name = "peertube_local";
80 user = "peertube_test";
81 passwordFile = "/etc/peertube/password-posgressql-db";
82 };
83
84 redis = {
85 host = "192.168.2.10";
86 port = 31638;
87 passwordFile = "/etc/peertube/password-redis-db";
88 };
89
90 settings = {
91 listen = {
92 hostname = "0.0.0.0";
93 };
94 instance = {
95 name = "PeerTube Test Server";
96 };
97 };
98 };
99 };
100
101 client = {
102 environment.systemPackages = [ pkgs.jq ];
103 networking = {
104 interfaces.eth1 = {
105 ipv4.addresses = [
106 { address = "192.168.2.12"; prefixLength = 24; }
107 ];
108 };
109 extraHosts = ''
110 192.168.2.11 peertube.local
111 '';
112 };
113 };
114
115 };
116
117 testScript = ''
118 start_all()
119
120 database.wait_for_unit("postgresql.service")
121 database.wait_for_unit("redis-peertube.service")
122
123 database.wait_for_open_port(5432)
124 database.wait_for_open_port(31638)
125
126 server.wait_for_unit("peertube.service")
127 server.wait_for_open_port(9000)
128
129 # Check if PeerTube is running
130 client.succeed("curl --fail http://peertube.local:9000/api/v1/config/about | jq -r '.instance.name' | grep 'PeerTube\ Test\ Server'")
131
132 # Check PeerTube CLI version
133 assert "${pkgs.peertube.version}" in server.succeed('su - peertube -s /bin/sh -c "peertube --version"')
134
135 client.shutdown()
136 server.shutdown()
137 database.shutdown()
138 '';
139})