Xfce updates 2024-12-27 (#368555)
[NixPkgs.git] / nixos / tests / xmpp / prosody.nix
blob0183e876803eb85d47a511953bbfccd49dcbd8fc
1 let
2   cert =
3     pkgs:
4     pkgs.runCommand "selfSignedCerts" { buildInputs = [ pkgs.openssl ]; } ''
5       openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -subj '/CN=example.com/CN=uploads.example.com/CN=conference.example.com' -days 36500
6       mkdir -p $out
7       cp key.pem cert.pem $out
8     '';
9   createUsers =
10     pkgs:
11     pkgs.writeScriptBin "create-prosody-users" ''
12       #!${pkgs.bash}/bin/bash
13       set -e
15       # Creates and set password for the 2 xmpp test users.
16       #
17       # Doing that in a bash script instead of doing that in the test
18       # script allow us to easily provision the users when running that
19       # test interactively.
21       prosodyctl register cthon98 example.com nothunter2
22       prosodyctl register azurediamond example.com hunter2
23     '';
24   delUsers =
25     pkgs:
26     pkgs.writeScriptBin "delete-prosody-users" ''
27       #!${pkgs.bash}/bin/bash
28       set -e
30       # Deletes the test users.
31       #
32       # Doing that in a bash script instead of doing that in the test
33       # script allow us to easily provision the users when running that
34       # test interactively.
36       prosodyctl deluser cthon98@example.com
37       prosodyctl deluser azurediamond@example.com
38     '';
40 import ../make-test-python.nix {
41   name = "prosody";
42   nodes = {
43     client =
44       {
45         nodes,
46         pkgs,
47         config,
48         ...
49       }:
50       {
51         security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
52         console.keyMap = "fr-bepo";
53         networking.extraHosts = ''
54           ${nodes.server.config.networking.primaryIPAddress} example.com
55           ${nodes.server.config.networking.primaryIPAddress} conference.example.com
56           ${nodes.server.config.networking.primaryIPAddress} uploads.example.com
57         '';
58         environment.systemPackages = [
59           (pkgs.callPackage ./xmpp-sendmessage.nix { connectTo = "example.com"; })
60         ];
61       };
62     server =
63       { config, pkgs, ... }:
64       {
65         security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
66         console.keyMap = "fr-bepo";
67         networking.extraHosts = ''
68           ${config.networking.primaryIPAddress} example.com
69           ${config.networking.primaryIPAddress} conference.example.com
70           ${config.networking.primaryIPAddress} uploads.example.com
71         '';
72         networking.firewall.enable = false;
73         environment.systemPackages = [
74           (createUsers pkgs)
75           (delUsers pkgs)
76         ];
77         services.prosody = {
78           enable = true;
79           ssl.cert = "${cert pkgs}/cert.pem";
80           ssl.key = "${cert pkgs}/key.pem";
81           virtualHosts.example = {
82             domain = "example.com";
83             enabled = true;
84             ssl.cert = "${cert pkgs}/cert.pem";
85             ssl.key = "${cert pkgs}/key.pem";
86           };
87           muc = [
88             {
89               domain = "conference.example.com";
90             }
91           ];
92           uploadHttp = {
93             domain = "uploads.example.com";
94           };
95         };
96       };
97   };
99   testScript =
100     { nodes, ... }:
101     ''
102       # Check with sqlite storage
103       start_all()
104       server.wait_for_unit("prosody.service")
105       server.succeed('prosodyctl status | grep "Prosody is running"')
107       server.succeed("create-prosody-users")
108       client.succeed("send-message")
109       server.succeed("delete-prosody-users")
110     '';