1
0
Fork 0
forked from NixOS/nixpkgs
nixpkgs/nixos/tests/davis.nix
Casey Link 23d344b9da nixos/davis: fix several outstanding bugs
As reported in #317303, this fixes:

- nginx config is now actually optional
- mail dsn options are now optional
- broken stdout logging has been replaced with default file logging in
  state dir

fixes #317303
2025-05-20 15:19:19 +02:00

94 lines
3 KiB
Nix

{
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.service")
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}")
'';
}