nixos/gotify: init module and test

Changed files
+96
nixos
+1
nixos/modules/module-list.nix
···
./services/web-apps/cryptpad.nix
./services/web-apps/documize.nix
./services/web-apps/frab.nix
+
./services/web-apps/gotify-server.nix
./services/web-apps/icingaweb2/icingaweb2.nix
./services/web-apps/icingaweb2/module-monitoring.nix
./services/web-apps/limesurvey.nix
+49
nixos/modules/services/web-apps/gotify-server.nix
···
+
{ pkgs, lib, config, ... }:
+
+
with lib;
+
+
let
+
cfg = config.services.gotify;
+
in {
+
options = {
+
services.gotify = {
+
enable = mkEnableOption "Gotify webserver";
+
+
port = mkOption {
+
type = types.port;
+
description = ''
+
Port the server listens to.
+
'';
+
};
+
+
stateDirectoryName = mkOption {
+
type = types.str;
+
default = "gotify-server";
+
description = ''
+
The name of the directory below <filename>/var/lib</filename> where
+
gotify stores its runtime data.
+
'';
+
};
+
};
+
};
+
+
config = mkIf cfg.enable {
+
systemd.services.gotify-server = {
+
wantedBy = [ "multi-user.target" ];
+
after = [ "network.target" ];
+
description = "Simple server for sending and receiving messages";
+
+
environment = {
+
GOTIFY_SERVER_PORT = toString cfg.port;
+
};
+
+
serviceConfig = {
+
WorkingDirectory = "/var/lib/${cfg.stateDirectoryName}";
+
StateDirectory = cfg.stateDirectoryName;
+
Restart = "always";
+
DynamicUser = "yes";
+
ExecStart = "${pkgs.gotify-server}/bin/server";
+
};
+
};
+
};
+
}
+1
nixos/tests/all-tests.nix
···
fsck = handleTest ./fsck.nix {};
fwupd = handleTestOn ["x86_64-linux"] ./fwupd.nix {}; # libsmbios is unsupported on aarch64
gdk-pixbuf = handleTest ./gdk-pixbuf.nix {};
+
gotify-server = handleTest ./gotify-server.nix {};
gitea = handleTest ./gitea.nix {};
gitlab = handleTest ./gitlab.nix {};
gitolite = handleTest ./gitolite.nix {};
+45
nixos/tests/gotify-server.nix
···
+
import ./make-test.nix ({ pkgs, lib, ...} : {
+
name = "gotify-server";
+
meta = with pkgs.stdenv.lib.maintainers; {
+
maintainers = [ ma27 ];
+
};
+
+
machine = { pkgs, ... }: {
+
environment.systemPackages = [ pkgs.jq ];
+
+
services.gotify = {
+
enable = true;
+
port = 3000;
+
};
+
};
+
+
testScript = ''
+
startAll;
+
+
$machine->waitForUnit("gotify-server");
+
$machine->waitForOpenPort(3000);
+
+
my $token = $machine->succeed(
+
"curl --fail -sS -X POST localhost:3000/application -F name=nixos " .
+
'-H "Authorization: Basic $(echo -ne "admin:admin" | base64 --wrap 0)" ' .
+
'| jq .token | xargs echo -n'
+
);
+
+
my $usertoken = $machine->succeed(
+
"curl --fail -sS -X POST localhost:3000/client -F name=nixos " .
+
'-H "Authorization: Basic $(echo -ne "admin:admin" | base64 --wrap 0)" ' .
+
'| jq .token | xargs echo -n'
+
);
+
+
$machine->succeed(
+
"curl --fail -sS -X POST 'localhost:3000/message?token=$token' -H 'Accept: application/json' " .
+
'-F title=Gotify -F message=Works'
+
);
+
+
my $title = $machine->succeed(
+
"curl --fail -sS 'localhost:3000/message?since=0&token=$usertoken' | jq '.messages|.[0]|.title' | xargs echo -n"
+
);
+
+
$title eq "Gotify" or die "Wrong title ($title), expected 'Gotify'!";
+
'';
+
})