From 3461ec2ffdd51f298d9dd520974d998b153b3b6f Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Fri, 25 Oct 2019 15:14:57 +0200 Subject: [PATCH] nixos/gotify: init module and test --- nixos/modules/module-list.nix | 1 + .../services/web-apps/gotify-server.nix | 49 +++++++++++++++++++ nixos/tests/all-tests.nix | 1 + nixos/tests/gotify-server.nix | 45 +++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 nixos/modules/services/web-apps/gotify-server.nix create mode 100644 nixos/tests/gotify-server.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 5214126ff7ed..13a7867b772a 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -793,6 +793,7 @@ ./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 diff --git a/nixos/modules/services/web-apps/gotify-server.nix b/nixos/modules/services/web-apps/gotify-server.nix new file mode 100644 index 000000000000..03e01f46a944 --- /dev/null +++ b/nixos/modules/services/web-apps/gotify-server.nix @@ -0,0 +1,49 @@ +{ 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 /var/lib 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"; + }; + }; + }; +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index e94c9712cbfa..694376b9d367 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -93,6 +93,7 @@ in 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 {}; diff --git a/nixos/tests/gotify-server.nix b/nixos/tests/gotify-server.nix new file mode 100644 index 000000000000..0ffc3138d5a1 --- /dev/null +++ b/nixos/tests/gotify-server.nix @@ -0,0 +1,45 @@ +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'!"; + ''; +})