summary refs log tree commit diff
path: root/nixos/tests/web-apps/peertube.nix
blob: 38b31f6c3325ad332ccd84fe4e2280a775eb0b44 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import ../make-test-python.nix ({pkgs, ...}:
{
  name = "peertube";
  meta.maintainers = with pkgs.lib.maintainers; [ izorkin ];

  nodes = {
    database = {
      networking = {
       interfaces.eth1 = {
          ipv4.addresses = [
            { address = "192.168.2.10"; prefixLength = 24; }
          ];
        };
        firewall.allowedTCPPorts = [ 5432 6379 ];
      };

      services.postgresql = {
        enable = true;
        enableTCPIP = true;
        authentication = ''
          hostnossl peertube_local peertube_test 192.168.2.11/32 md5
        '';
        initialScript = pkgs.writeText "postgresql_init.sql" ''
          CREATE ROLE peertube_test LOGIN PASSWORD '0gUN0C1mgST6czvjZ8T9';
          CREATE DATABASE peertube_local TEMPLATE template0 ENCODING UTF8;
          GRANT ALL PRIVILEGES ON DATABASE peertube_local TO peertube_test;
          \connect peertube_local
          CREATE EXTENSION IF NOT EXISTS pg_trgm;
          CREATE EXTENSION IF NOT EXISTS unaccent;
        '';
      };

      services.redis = {
        enable = true;
        bind = "0.0.0.0";
        requirePass = "turrQfaQwnanGbcsdhxy";
      };
    };

    server = { pkgs, ... }: {
      environment = {
        etc = {
          "peertube/password-posgressql-db".text = ''
            0gUN0C1mgST6czvjZ8T9
          '';
          "peertube/password-redis-db".text = ''
            turrQfaQwnanGbcsdhxy
          '';
        };
      };

      networking = {
        interfaces.eth1 = {
          ipv4.addresses = [
            { address = "192.168.2.11"; prefixLength = 24; }
          ];
        };
        extraHosts = ''
          192.168.2.11 peertube.local
        '';
        firewall.allowedTCPPorts = [ 9000 ];
      };

      services.peertube = {
        enable = true;
        localDomain = "peertube.local";
        enableWebHttps = false;

        database = {
          host = "192.168.2.10";
          name = "peertube_local";
          user = "peertube_test";
          passwordFile = "/etc/peertube/password-posgressql-db";
        };

        redis = {
          host = "192.168.2.10";
          passwordFile = "/etc/peertube/password-redis-db";
        };

        settings = {
          listen = {
            hostname = "0.0.0.0";
          };
          instance = {
            name = "PeerTube Test Server";
          };
        };
      };
    };

    client = {
      environment.systemPackages = [ pkgs.jq ];
      networking = {
       interfaces.eth1 = {
          ipv4.addresses = [
            { address = "192.168.2.12"; prefixLength = 24; }
          ];
        };
        extraHosts = ''
          192.168.2.11 peertube.local
        '';
      };
    };

  };

  testScript = ''
    start_all()

    database.wait_for_unit("postgresql.service")
    database.wait_for_unit("redis.service")

    database.wait_for_open_port(5432)
    database.wait_for_open_port(6379)

    server.wait_for_unit("peertube.service")
    server.wait_for_open_port(9000)

    # Check if PeerTube is running
    client.succeed("curl --fail http://peertube.local:9000/api/v1/config/about | jq -r '.instance.name' | grep 'PeerTube\ Test\ Server'")

    client.shutdown()
    server.shutdown()
    database.shutdown()
  '';
})