at 23.11-beta 5.4 kB view raw
1import ./make-test-python.nix ({ pkgs, lib, ... }: 2let 3 host = "smoke.test"; 4 port = "8065"; 5 url = "http://${host}:${port}"; 6 siteName = "NixOS Smoke Tests, Inc."; 7 8 makeMattermost = mattermostConfig: 9 { config, ... }: { 10 environment.systemPackages = [ 11 pkgs.mattermost 12 pkgs.curl 13 pkgs.jq 14 ]; 15 networking.hosts = { 16 "127.0.0.1" = [ host ]; 17 }; 18 services.mattermost = lib.recursiveUpdate { 19 enable = true; 20 inherit siteName; 21 listenAddress = "0.0.0.0:${port}"; 22 siteUrl = url; 23 extraConfig = { 24 SupportSettings.AboutLink = "https://nixos.org"; 25 }; 26 } mattermostConfig; 27 }; 28in 29{ 30 name = "mattermost"; 31 32 nodes = { 33 mutable = makeMattermost { 34 mutableConfig = true; 35 extraConfig.SupportSettings.HelpLink = "https://search.nixos.org"; 36 }; 37 mostlyMutable = makeMattermost { 38 mutableConfig = true; 39 preferNixConfig = true; 40 plugins = let 41 mattermostDemoPlugin = pkgs.fetchurl { 42 url = "https://github.com/mattermost/mattermost-plugin-demo/releases/download/v0.9.0/com.mattermost.demo-plugin-0.9.0.tar.gz"; 43 sha256 = "1h4qi34gcxcx63z8wiqcf2aaywmvv8lys5g8gvsk13kkqhlmag25"; 44 }; 45 in [ 46 mattermostDemoPlugin 47 ]; 48 }; 49 immutable = makeMattermost { 50 mutableConfig = false; 51 extraConfig.SupportSettings.HelpLink = "https://search.nixos.org"; 52 }; 53 environmentFile = makeMattermost { 54 mutableConfig = false; 55 extraConfig.SupportSettings.AboutLink = "https://example.org"; 56 environmentFile = pkgs.writeText "mattermost-env" '' 57 MM_SUPPORTSETTINGS_ABOUTLINK=https://nixos.org 58 ''; 59 }; 60 }; 61 62 testScript = let 63 expectConfig = jqExpression: pkgs.writeShellScript "expect-config" '' 64 set -euo pipefail 65 echo "Expecting config to match: "${lib.escapeShellArg jqExpression} >&2 66 curl ${lib.escapeShellArg url} >/dev/null 67 config="$(curl ${lib.escapeShellArg "${url}/api/v4/config/client?format=old"})" 68 echo "Config: $(echo "$config" | ${pkgs.jq}/bin/jq)" >&2 69 [[ "$(echo "$config" | ${pkgs.jq}/bin/jq -r ${lib.escapeShellArg ".SiteName == $siteName and .Version == ($mattermostName / $sep)[-1] and (${jqExpression})"} --arg siteName ${lib.escapeShellArg siteName} --arg mattermostName ${lib.escapeShellArg pkgs.mattermost.name} --arg sep '-')" = "true" ]] 70 ''; 71 72 setConfig = jqExpression: pkgs.writeShellScript "set-config" '' 73 set -euo pipefail 74 mattermostConfig=/var/lib/mattermost/config/config.json 75 newConfig="$(${pkgs.jq}/bin/jq -r ${lib.escapeShellArg jqExpression} $mattermostConfig)" 76 rm -f $mattermostConfig 77 echo "$newConfig" > "$mattermostConfig" 78 ''; 79 80 in 81 '' 82 start_all() 83 84 ## Mutable node tests ## 85 mutable.wait_for_unit("mattermost.service") 86 mutable.wait_for_open_port(8065) 87 88 # Get the initial config 89 mutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://search.nixos.org"''}") 90 91 # Edit the config 92 mutable.succeed("${setConfig ''.SupportSettings.AboutLink = "https://mattermost.com"''}") 93 mutable.succeed("${setConfig ''.SupportSettings.HelpLink = "https://nixos.org/nixos/manual"''}") 94 mutable.systemctl("restart mattermost.service") 95 mutable.wait_for_open_port(8065) 96 97 # AboutLink and HelpLink should be changed 98 mutable.succeed("${expectConfig ''.AboutLink == "https://mattermost.com" and .HelpLink == "https://nixos.org/nixos/manual"''}") 99 100 ## Mostly mutable node tests ## 101 mostlyMutable.wait_for_unit("mattermost.service") 102 mostlyMutable.wait_for_open_port(8065) 103 104 # Get the initial config 105 mostlyMutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org"''}") 106 107 # Edit the config 108 mostlyMutable.succeed("${setConfig ''.SupportSettings.AboutLink = "https://mattermost.com"''}") 109 mostlyMutable.succeed("${setConfig ''.SupportSettings.HelpLink = "https://nixos.org/nixos/manual"''}") 110 mostlyMutable.systemctl("restart mattermost.service") 111 mostlyMutable.wait_for_open_port(8065) 112 113 # AboutLink should be overridden by NixOS configuration; HelpLink should be what we set above 114 mostlyMutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://nixos.org/nixos/manual"''}") 115 116 ## Immutable node tests ## 117 immutable.wait_for_unit("mattermost.service") 118 immutable.wait_for_open_port(8065) 119 120 # Get the initial config 121 immutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://search.nixos.org"''}") 122 123 # Edit the config 124 immutable.succeed("${setConfig ''.SupportSettings.AboutLink = "https://mattermost.com"''}") 125 immutable.succeed("${setConfig ''.SupportSettings.HelpLink = "https://nixos.org/nixos/manual"''}") 126 immutable.systemctl("restart mattermost.service") 127 immutable.wait_for_open_port(8065) 128 129 # Our edits should be ignored on restart 130 immutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://search.nixos.org"''}") 131 132 133 ## Environment File node tests ## 134 environmentFile.wait_for_unit("mattermost.service") 135 environmentFile.wait_for_open_port(8065) 136 137 # Settings in the environment file should override settings set otherwise 138 environmentFile.succeed("${expectConfig ''.AboutLink == "https://nixos.org"''}") 139 ''; 140})