1{ lib, ... }:
2{
3 name = "silverbullet";
4 meta.maintainers = with lib.maintainers; [ aorith ];
5
6 nodes.simple =
7 { ... }:
8 {
9 services.silverbullet.enable = true;
10 };
11
12 nodes.configured =
13 { pkgs, ... }:
14 {
15 users.users.test.isNormalUser = true;
16 users.groups.test = { };
17
18 services.silverbullet = {
19 enable = true;
20 package = pkgs.silverbullet;
21 listenPort = 3001;
22 listenAddress = "localhost";
23 spaceDir = "/home/test/silverbullet";
24 user = "test";
25 group = "test";
26 envFile = pkgs.writeText "silverbullet.env" ''
27 SB_USER=user:password
28 SB_AUTH_TOKEN=test
29 '';
30 };
31 };
32
33 testScript =
34 { nodes, ... }:
35 ''
36 PORT = ${builtins.toString nodes.simple.services.silverbullet.listenPort}
37 ADDRESS = "${nodes.simple.services.silverbullet.listenAddress}"
38 SPACEDIR = "${nodes.simple.services.silverbullet.spaceDir}"
39 simple.wait_for_unit("silverbullet.service")
40 simple.wait_for_open_port(PORT)
41 simple.succeed(f"curl --max-time 5 -s -v -o /dev/null --fail http://{ADDRESS}:{PORT}/")
42 simple.succeed(f"test -d '{SPACEDIR}'")
43
44 PORT = ${builtins.toString nodes.configured.services.silverbullet.listenPort}
45 ADDRESS = "${nodes.configured.services.silverbullet.listenAddress}"
46 SPACEDIR = "${nodes.configured.services.silverbullet.spaceDir}"
47 configured.wait_for_unit("silverbullet.service")
48 configured.wait_for_open_port(PORT)
49 assert int(configured.succeed(f"curl --max-time 5 -s -o /dev/null -w '%{{http_code}}' -XPUT -d 'test' --fail http://{ADDRESS}:{PORT}/test.md -H'Authorization: Bearer test'")) == 200
50 assert int(configured.fail(f"curl --max-time 5 -s -o /dev/null -w '%{{http_code}}' -XPUT -d 'test' --fail http://{ADDRESS}:{PORT}/test.md -H'Authorization: Bearer wrong'")) == 401
51 configured.succeed(f"test -d '{SPACEDIR}'")
52 '';
53}