1{
2 pkgs,
3 config,
4 ...
5}:
6{
7 name = "davis";
8
9 meta.maintainers = pkgs.davis.meta.maintainers;
10
11 nodes.machine1 =
12 { config, ... }:
13 {
14 virtualisation = {
15 memorySize = 512;
16 };
17
18 services.davis = {
19 enable = true;
20 hostname = "davis.example.com";
21 database = {
22 driver = "postgresql";
23 };
24 mail = {
25 dsnFile = "${pkgs.writeText "davisMailDns" "smtp://username:password@example.com:25"}";
26 inviteFromAddress = "dav@example.com";
27 };
28 adminLogin = "admin";
29 appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}";
30 adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}";
31 };
32 };
33 nodes.machine2 =
34 { nodes, config, ... }:
35 {
36 virtualisation = {
37 memorySize = 512;
38 };
39 environment.systemPackages = [ pkgs.fcgi ];
40
41 # no nginx, and no mail dsn
42 services.davis = {
43 enable = true;
44 hostname = "davis.example.com";
45 database = {
46 driver = "postgresql";
47 };
48 adminLogin = "admin";
49 appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}";
50 adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}";
51 nginx = null;
52 };
53 };
54
55 testScript = ''
56 start_all()
57
58 machine1.wait_for_unit("postgresql.target")
59 machine1.wait_for_unit("davis-env-setup.service")
60 machine1.wait_for_unit("davis-db-migrate.service")
61 machine1.wait_for_unit("phpfpm-davis.service")
62
63 with subtest("welcome screen loads"):
64 machine1.succeed(
65 "curl -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/ | grep '<title>Davis</title>'"
66 )
67
68 with subtest("login works"):
69 csrf_token = machine1.succeed(
70 "curl -c /tmp/cookies -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login | grep '_csrf_token' | sed -E 's,.*value=\"(.*)\".*,\\1,g'"
71 )
72 r = machine1.succeed(
73 f"curl -b /tmp/cookies --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login -X POST -F _username=admin -F _password=nixos -F _csrf_token={csrf_token.strip()} -D headers"
74 )
75 print(r)
76 machine1.succeed(
77 "[[ $(grep -i 'location: ' headers | cut -d: -f2- | xargs echo) == /dashboard* ]]"
78 )
79 machine2.wait_for_unit("davis-env-setup.service")
80 machine2.wait_for_unit("davis-db-migrate.service")
81 machine2.wait_for_unit("phpfpm-davis.service")
82 r = machine2.succeed(
83 "find /var/lib/davis/var/log"
84 )
85 print(r)
86 env = (
87 "SCRIPT_NAME=/index.php",
88 "SCRIPT_FILENAME=${config.nodes.machine2.services.davis.package}/public/index.php",
89 "REMOTE_ADDR=127.0.0.1",
90 "REQUEST_METHOD=GET",
91 );
92 page = machine2.succeed(f"{' '.join(env)} ${pkgs.fcgi}/bin/cgi-fcgi -bind -connect ${config.nodes.machine2.services.phpfpm.pools.davis.socket}")
93 '';
94}