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