at 22.05-pre 3.1 kB view raw
1let 2 cert = pkgs: pkgs.runCommand "selfSignedCerts" { buildInputs = [ pkgs.openssl ]; } '' 3 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 4 mkdir -p $out 5 cp key.pem cert.pem $out 6 ''; 7 createUsers = pkgs: pkgs.writeScriptBin "create-prosody-users" '' 8 #!${pkgs.bash}/bin/bash 9 set -e 10 11 # Creates and set password for the 2 xmpp test users. 12 # 13 # Doing that in a bash script instead of doing that in the test 14 # script allow us to easily provision the users when running that 15 # test interactively. 16 17 prosodyctl register cthon98 example.com nothunter2 18 prosodyctl register azurediamond example.com hunter2 19 ''; 20 delUsers = pkgs: pkgs.writeScriptBin "delete-prosody-users" '' 21 #!${pkgs.bash}/bin/bash 22 set -e 23 24 # Deletes the test users. 25 # 26 # Doing that in a bash script instead of doing that in the test 27 # script allow us to easily provision the users when running that 28 # test interactively. 29 30 prosodyctl deluser cthon98@example.com 31 prosodyctl deluser azurediamond@example.com 32 ''; 33in import ../make-test-python.nix { 34 name = "prosody"; 35 nodes = { 36 client = { nodes, pkgs, config, ... }: { 37 security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ]; 38 console.keyMap = "fr-bepo"; 39 networking.extraHosts = '' 40 ${nodes.server.config.networking.primaryIPAddress} example.com 41 ${nodes.server.config.networking.primaryIPAddress} conference.example.com 42 ${nodes.server.config.networking.primaryIPAddress} uploads.example.com 43 ''; 44 environment.systemPackages = [ 45 (pkgs.callPackage ./xmpp-sendmessage.nix { connectTo = nodes.server.config.networking.primaryIPAddress; }) 46 ]; 47 }; 48 server = { config, pkgs, ... }: { 49 security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ]; 50 console.keyMap = "fr-bepo"; 51 networking.extraHosts = '' 52 ${config.networking.primaryIPAddress} example.com 53 ${config.networking.primaryIPAddress} conference.example.com 54 ${config.networking.primaryIPAddress} uploads.example.com 55 ''; 56 networking.firewall.enable = false; 57 environment.systemPackages = [ 58 (createUsers pkgs) 59 (delUsers pkgs) 60 ]; 61 services.prosody = { 62 enable = true; 63 ssl.cert = "${cert pkgs}/cert.pem"; 64 ssl.key = "${cert pkgs}/key.pem"; 65 virtualHosts.example = { 66 domain = "example.com"; 67 enabled = true; 68 ssl.cert = "${cert pkgs}/cert.pem"; 69 ssl.key = "${cert pkgs}/key.pem"; 70 }; 71 muc = [ 72 { 73 domain = "conference.example.com"; 74 } 75 ]; 76 uploadHttp = { 77 domain = "uploads.example.com"; 78 }; 79 }; 80 }; 81 }; 82 83 testScript = { nodes, ... }: '' 84 server.wait_for_unit("prosody.service") 85 server.succeed('prosodyctl status | grep "Prosody is running"') 86 87 server.succeed("create-prosody-users") 88 client.succeed("send-message") 89 server.succeed("delete-prosody-users") 90 ''; 91}