summaryrefslogtreecommitdiffstats
path: root/nixos/tests/davis.nix
blob: 4aa666dede959ef2400d0711160055b733291bc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
{
  pkgs,
  config,
  ...
}:
{
  name = "davis";

  meta.maintainers = pkgs.davis.meta.maintainers;

  nodes.machine1 =
    { config, ... }:
    {
      virtualisation = {
        memorySize = 512;
      };

      services.davis = {
        enable = true;
        hostname = "davis.example.com";
        database = {
          driver = "postgresql";
        };
        mail = {
          dsnFile = "${pkgs.writeText "davisMailDns" "smtp://username:password@example.com:25"}";
          inviteFromAddress = "dav@example.com";
        };
        adminLogin = "admin";
        appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}";
        adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}";
      };
    };
  nodes.machine2 =
    { nodes, config, ... }:
    {
      virtualisation = {
        memorySize = 512;
      };
      environment.systemPackages = [ pkgs.fcgi ];

      # no nginx, and no mail dsn
      services.davis = {
        enable = true;
        hostname = "davis.example.com";
        database = {
          driver = "postgresql";
        };
        adminLogin = "admin";
        appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}";
        adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}";
        nginx = null;
      };
    };

  testScript = ''
    start_all()

    machine1.wait_for_unit("postgresql.target")
    machine1.wait_for_unit("davis-env-setup.service")
    machine1.wait_for_unit("davis-db-migrate.service")
    machine1.wait_for_unit("phpfpm-davis.service")

    with subtest("welcome screen loads"):
        machine1.succeed(
            "curl -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/ | grep '<title>Davis</title>'"
        )

    with subtest("login works"):
        csrf_token = machine1.succeed(
            "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'"
        )
        r = machine1.succeed(
            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"
        )
        print(r)
        machine1.succeed(
          "[[ $(grep -i 'location: ' headers | cut -d: -f2- | xargs echo) == /dashboard* ]]"
        )
    machine2.wait_for_unit("davis-env-setup.service")
    machine2.wait_for_unit("davis-db-migrate.service")
    machine2.wait_for_unit("phpfpm-davis.service")
    r = machine2.succeed(
        "find /var/lib/davis/var/log"
    )
    print(r)
    env = (
      "SCRIPT_NAME=/index.php",
      "SCRIPT_FILENAME=${config.nodes.machine2.services.davis.package}/public/index.php",
      "REMOTE_ADDR=127.0.0.1",
      "REQUEST_METHOD=GET",
    );
    page = machine2.succeed(f"{' '.join(env)} ${pkgs.fcgi}/bin/cgi-fcgi -bind -connect ${config.nodes.machine2.services.phpfpm.pools.davis.socket}")
  '';
}