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})