125 lines
4.7 KiB
Nix
125 lines
4.7 KiB
Nix
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
|
let
|
|
host = "smoke.test";
|
|
port = "8065";
|
|
url = "http://${host}:${port}";
|
|
siteName = "NixOS Smoke Tests, Inc.";
|
|
|
|
makeMattermost = mattermostConfig:
|
|
{ config, ... }: {
|
|
environment.systemPackages = [
|
|
pkgs.mattermost
|
|
pkgs.curl
|
|
pkgs.jq
|
|
];
|
|
networking.hosts = {
|
|
"127.0.0.1" = [ host ];
|
|
};
|
|
services.mattermost = lib.recursiveUpdate {
|
|
enable = true;
|
|
inherit siteName;
|
|
listenAddress = "0.0.0.0:${port}";
|
|
siteUrl = url;
|
|
extraConfig = {
|
|
SupportSettings.AboutLink = "https://nixos.org";
|
|
};
|
|
} mattermostConfig;
|
|
};
|
|
in
|
|
{
|
|
name = "mattermost";
|
|
|
|
nodes = {
|
|
mutable = makeMattermost {
|
|
mutableConfig = true;
|
|
extraConfig.SupportSettings.HelpLink = "https://search.nixos.org";
|
|
};
|
|
mostlyMutable = makeMattermost {
|
|
mutableConfig = true;
|
|
preferNixConfig = true;
|
|
plugins = let
|
|
mattermostDemoPlugin = pkgs.fetchurl {
|
|
url = "https://github.com/mattermost/mattermost-plugin-demo/releases/download/v0.9.0/com.mattermost.demo-plugin-0.9.0.tar.gz";
|
|
sha256 = "1h4qi34gcxcx63z8wiqcf2aaywmvv8lys5g8gvsk13kkqhlmag25";
|
|
};
|
|
in [
|
|
mattermostDemoPlugin
|
|
];
|
|
};
|
|
immutable = makeMattermost {
|
|
mutableConfig = false;
|
|
extraConfig.SupportSettings.HelpLink = "https://search.nixos.org";
|
|
};
|
|
};
|
|
|
|
testScript = let
|
|
expectConfig = jqExpression: pkgs.writeShellScript "expect-config" ''
|
|
set -euo pipefail
|
|
echo "Expecting config to match: "${lib.escapeShellArg jqExpression} >&2
|
|
curl ${lib.escapeShellArg url} >/dev/null
|
|
config="$(curl ${lib.escapeShellArg "${url}/api/v4/config/client?format=old"})"
|
|
echo "Config: $(echo "$config" | ${pkgs.jq}/bin/jq)" >&2
|
|
[[ "$(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" ]]
|
|
'';
|
|
|
|
setConfig = jqExpression: pkgs.writeShellScript "set-config" ''
|
|
set -euo pipefail
|
|
mattermostConfig=/var/lib/mattermost/config/config.json
|
|
newConfig="$(${pkgs.jq}/bin/jq -r ${lib.escapeShellArg jqExpression} $mattermostConfig)"
|
|
rm -f $mattermostConfig
|
|
echo "$newConfig" > "$mattermostConfig"
|
|
'';
|
|
in
|
|
''
|
|
start_all()
|
|
|
|
## Mutable node tests ##
|
|
mutable.wait_for_unit("mattermost.service")
|
|
mutable.wait_for_open_port(8065)
|
|
|
|
# Get the initial config
|
|
mutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://search.nixos.org"''}")
|
|
|
|
# Edit the config
|
|
mutable.succeed("${setConfig ''.SupportSettings.AboutLink = "https://mattermost.com"''}")
|
|
mutable.succeed("${setConfig ''.SupportSettings.HelpLink = "https://nixos.org/nixos/manual"''}")
|
|
mutable.systemctl("restart mattermost.service")
|
|
mutable.wait_for_open_port(8065)
|
|
|
|
# AboutLink and HelpLink should be changed
|
|
mutable.succeed("${expectConfig ''.AboutLink == "https://mattermost.com" and .HelpLink == "https://nixos.org/nixos/manual"''}")
|
|
|
|
## Mostly mutable node tests ##
|
|
mostlyMutable.wait_for_unit("mattermost.service")
|
|
mostlyMutable.wait_for_open_port(8065)
|
|
|
|
# Get the initial config
|
|
mostlyMutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org"''}")
|
|
|
|
# Edit the config
|
|
mostlyMutable.succeed("${setConfig ''.SupportSettings.AboutLink = "https://mattermost.com"''}")
|
|
mostlyMutable.succeed("${setConfig ''.SupportSettings.HelpLink = "https://nixos.org/nixos/manual"''}")
|
|
mostlyMutable.systemctl("restart mattermost.service")
|
|
mostlyMutable.wait_for_open_port(8065)
|
|
|
|
# AboutLink should be overridden by NixOS configuration; HelpLink should be what we set above
|
|
mostlyMutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://nixos.org/nixos/manual"''}")
|
|
|
|
## Immutable node tests ##
|
|
immutable.wait_for_unit("mattermost.service")
|
|
immutable.wait_for_open_port(8065)
|
|
|
|
# Get the initial config
|
|
immutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://search.nixos.org"''}")
|
|
|
|
# Edit the config
|
|
immutable.succeed("${setConfig ''.SupportSettings.AboutLink = "https://mattermost.com"''}")
|
|
immutable.succeed("${setConfig ''.SupportSettings.HelpLink = "https://nixos.org/nixos/manual"''}")
|
|
immutable.systemctl("restart mattermost.service")
|
|
immutable.wait_for_open_port(8065)
|
|
|
|
# Our edits should be ignored on restart
|
|
immutable.succeed("${expectConfig ''.AboutLink == "https://nixos.org" and .HelpLink == "https://search.nixos.org"''}")
|
|
'';
|
|
})
|