1import ./make-test-python.nix (
2 { pkgs, ... }:
3 {
4 name = "jibri";
5 meta = with pkgs.lib; {
6 maintainers = teams.jitsi.members;
7 };
8
9 nodes.machine =
10 { config, pkgs, ... }:
11 {
12 virtualisation.memorySize = 5120;
13
14 services.jitsi-meet = {
15 enable = true;
16 hostName = "machine";
17 jibri.enable = true;
18 };
19 services.jibri.ignoreCert = true;
20 services.jitsi-videobridge.openFirewall = true;
21
22 networking.firewall.allowedTCPPorts = [
23 80
24 443
25 ];
26
27 services.nginx.virtualHosts.machine = {
28 enableACME = true;
29 forceSSL = true;
30 };
31
32 security.acme.defaults.email = "me@example.org";
33 security.acme.acceptTerms = true;
34 security.acme.defaults.server = "https://example.com"; # self-signed only
35 };
36
37 testScript = ''
38 machine.wait_for_unit("jitsi-videobridge2.service")
39 machine.wait_for_unit("jicofo.service")
40 machine.wait_for_unit("nginx.service")
41 machine.wait_for_unit("prosody.service")
42 machine.wait_for_unit("jibri.service")
43
44 machine.wait_until_succeeds(
45 "journalctl -b -u prosody -o cat | grep -q 'Authenticated as focus@auth.machine'", timeout=31
46 )
47 machine.wait_until_succeeds(
48 "journalctl -b -u prosody -o cat | grep -q 'Authenticated as jvb@auth.machine'", timeout=32
49 )
50 machine.wait_until_succeeds(
51 "journalctl -b -u prosody -o cat | grep -q 'Authenticated as jibri@auth.machine'", timeout=33
52 )
53 machine.wait_until_succeeds(
54 "cat /var/log/jitsi/jibri/log.0.txt | grep -q 'Joined MUC: jibribrewery@internal.auth.machine'", timeout=34
55 )
56
57 assert '"busyStatus":"IDLE","health":{"healthStatus":"HEALTHY"' in machine.succeed(
58 "curl -X GET http://machine:2222/jibri/api/v1.0/health"
59 )
60 machine.succeed(
61 """curl -H "Content-Type: application/json" -X POST http://localhost:2222/jibri/api/v1.0/startService -d '{"sessionId": "RecordTest","callParams":{"callUrlInfo":{"baseUrl": "https://machine","callName": "TestCall"}},"callLoginParams":{"domain": "recorder.machine", "username": "recorder", "password": "'"$(cat /var/lib/jitsi-meet/jibri-recorder-secret)"'" },"sinkType": "file"}'"""
62 )
63 machine.wait_until_succeeds(
64 "cat /var/log/jitsi/jibri/log.0.txt | grep -q 'File recording service transitioning from state Starting up to Running'", timeout=35
65 )
66 machine.succeed(
67 """sleep 15 && curl -H "Content-Type: application/json" -X POST http://localhost:2222/jibri/api/v1.0/stopService -d '{"sessionId": "RecordTest","callParams":{"callUrlInfo":{"baseUrl": "https://machine","callName": "TestCall"}},"callLoginParams":{"domain": "recorder.machine", "username": "recorder", "password": "'"$(cat /var/lib/jitsi-meet/jibri-recorder-secret)"'" },"sinkType": "file"}'"""
68 )
69 machine.wait_until_succeeds(
70 "cat /var/log/jitsi/jibri/log.0.txt | grep -q 'Finalize script finished with exit value 0'", timeout=36
71 )
72 '';
73 }
74)