at 25.11-pre 3.4 kB view raw
1let 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 14 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. 20 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 29 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. 35 36 prosodyctl deluser cthon98@example.com 37 prosodyctl deluser azurediamond@example.com 38 ''; 39in 40import ../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 }; 98 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"') 106 107 server.succeed("create-prosody-users") 108 client.succeed("send-message") 109 server.succeed("delete-prosody-users") 110 ''; 111}