at master 4.2 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 -days 365 \ 6 -subj '/C=GB/CN=example.com' -addext "subjectAltName = DNS:example.com,DNS:uploads.example.com,DNS:conference.example.com" 7 mkdir -p $out 8 cp key.pem cert.pem $out 9 ''; 10 # Creates and set password for the 2 xmpp test users. 11 # 12 # Doing that in a bash script instead of doing that in the test 13 # script allow us to easily provision the users when running that 14 # test interactively. 15 createUsers = 16 pkgs: 17 pkgs.writeShellScriptBin "create-prosody-users" '' 18 set -e 19 prosodyctl register cthon98 example.com nothunter2 20 prosodyctl register azurediamond example.com hunter2 21 ''; 22 # Deletes the test users. 23 delUsers = 24 pkgs: 25 pkgs.writeShellScriptBin "delete-prosody-users" '' 26 set -e 27 prosodyctl deluser cthon98@example.com 28 prosodyctl deluser azurediamond@example.com 29 ''; 30in 31import ../make-test-python.nix { 32 name = "prosody-mysql"; 33 nodes = { 34 client = 35 { 36 nodes, 37 pkgs, 38 config, 39 ... 40 }: 41 { 42 security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ]; 43 networking.extraHosts = '' 44 ${nodes.server.networking.primaryIPAddress} example.com 45 ${nodes.server.networking.primaryIPAddress} conference.example.com 46 ${nodes.server.networking.primaryIPAddress} uploads.example.com 47 ''; 48 environment.systemPackages = [ 49 (pkgs.callPackage ./xmpp-sendmessage.nix { 50 connectTo = nodes.server.networking.primaryIPAddress; 51 }) 52 ]; 53 }; 54 55 server = 56 { nodes, pkgs, ... }: 57 { 58 nixpkgs.overlays = [ 59 (self: super: { 60 prosody = super.prosody.override { 61 withExtraLuaPackages = p: [ p.luadbi-mysql ]; 62 }; 63 }) 64 ]; 65 security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ]; 66 networking.extraHosts = '' 67 ${nodes.server.networking.primaryIPAddress} example.com 68 ${nodes.server.networking.primaryIPAddress} conference.example.com 69 ${nodes.server.networking.primaryIPAddress} uploads.example.com 70 ''; 71 networking.firewall.enable = false; 72 environment.systemPackages = [ 73 (createUsers pkgs) 74 (delUsers pkgs) 75 ]; 76 services.prosody = { 77 enable = true; 78 ssl.cert = "${cert pkgs}/cert.pem"; 79 ssl.key = "${cert pkgs}/key.pem"; 80 virtualHosts.example = { 81 domain = "example.com"; 82 enabled = true; 83 ssl.cert = "${cert pkgs}/cert.pem"; 84 ssl.key = "${cert pkgs}/key.pem"; 85 }; 86 muc = [ 87 { 88 domain = "conference.example.com"; 89 } 90 ]; 91 httpFileShare = { 92 domain = "uploads.example.com"; 93 }; 94 extraConfig = '' 95 storage = "sql" 96 sql = { 97 driver = "MySQL"; 98 database = "prosody"; 99 host = "mysql"; 100 port = 3306; 101 username = "prosody"; 102 password = "password123"; 103 }; 104 ''; 105 }; 106 }; 107 mysql = 108 { config, pkgs, ... }: 109 { 110 networking.firewall.enable = false; 111 services.mysql = { 112 enable = true; 113 initialScript = pkgs.writeText "mysql_init.sql" '' 114 CREATE DATABASE prosody; 115 CREATE USER 'prosody'@'server' IDENTIFIED BY 'password123'; 116 GRANT ALL PRIVILEGES ON prosody.* TO 'prosody'@'server'; 117 FLUSH PRIVILEGES; 118 ''; 119 package = pkgs.mariadb; 120 }; 121 }; 122 }; 123 124 testScript = _: '' 125 # Check with mysql storage 126 start_all() 127 mysql.wait_for_unit("mysql.service") 128 server.wait_for_unit("prosody.service") 129 server.succeed('prosodyctl status | grep "Prosody is running"') 130 131 server.succeed("create-prosody-users") 132 client.succeed("send-message") 133 server.succeed("delete-prosody-users") 134 ''; 135}