1import ./make-test-python.nix ({ lib, ... }: {
2 name = "silverbullet";
3 meta.maintainers = with lib.maintainers; [ aorith ];
4
5 nodes.simple = { ... }: {
6 services.silverbullet.enable = true;
7 };
8
9 nodes.configured = { pkgs, ... }: {
10 users.users.test.isNormalUser = true;
11 users.groups.test = { };
12
13 services.silverbullet = {
14 enable = true;
15 package = pkgs.silverbullet;
16 listenPort = 3001;
17 listenAddress = "localhost";
18 spaceDir = "/home/test/silverbullet";
19 user = "test";
20 group = "test";
21 envFile = pkgs.writeText "silverbullet.env" ''
22 SB_USER=user:password
23 SB_AUTH_TOKEN=test
24 '';
25 extraArgs = [ "--reindex" "--db /home/test/silverbullet/custom.db" ];
26 };
27 };
28
29 testScript = { nodes, ... }: ''
30 PORT = ${builtins.toString nodes.simple.services.silverbullet.listenPort}
31 ADDRESS = "${nodes.simple.services.silverbullet.listenAddress}"
32 SPACEDIR = "${nodes.simple.services.silverbullet.spaceDir}"
33 simple.wait_for_unit("silverbullet.service")
34 simple.wait_for_open_port(PORT)
35 simple.succeed(f"curl --max-time 5 -s -v -o /dev/null --fail http://{ADDRESS}:{PORT}/")
36 simple.succeed(f"test -d '{SPACEDIR}'")
37
38 PORT = ${builtins.toString nodes.configured.services.silverbullet.listenPort}
39 ADDRESS = "${nodes.configured.services.silverbullet.listenAddress}"
40 SPACEDIR = "${nodes.configured.services.silverbullet.spaceDir}"
41 configured.wait_for_unit("silverbullet.service")
42 configured.wait_for_open_port(PORT)
43 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
44 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
45 configured.succeed(f"test -d '{SPACEDIR}'")
46 '';
47})