mirror of
https://codeberg.org/demostf/api-test.git
synced 2026-06-03 17:44:07 +02:00
128 lines
3.9 KiB
Nix
128 lines
3.9 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}: {
|
|
name = "demostf-api-client-test";
|
|
nodes.machine = {config, ...}: let
|
|
fpmCfg = config.services.phpfpm.pools.demostf-api;
|
|
in {
|
|
config = {
|
|
users.groups.demostf = {};
|
|
users.users.demostf = {
|
|
group = "demostf";
|
|
isSystemUser = true;
|
|
};
|
|
|
|
services.postgresql = {
|
|
enable = true;
|
|
ensureDatabases = ["demostf"];
|
|
ensureUsers = [
|
|
{
|
|
name = "demostf";
|
|
ensureDBOwnership = true;
|
|
}
|
|
];
|
|
initialScript = pkgs.writeText "init-sql-script" ''
|
|
CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public;
|
|
'';
|
|
};
|
|
|
|
services.nginx = {
|
|
enable = true;
|
|
virtualHosts."localhost" = {
|
|
root = "/var/empty";
|
|
extraConfig = ''
|
|
try_files $uri /index.php?$query_string /index.php;
|
|
'';
|
|
locations = {
|
|
"~ ^(.+?\\.php)(/.*)?$" = {
|
|
extraConfig = ''
|
|
fastcgi_param PATH_INFO $2;
|
|
fastcgi_pass unix:${fpmCfg.socket};
|
|
fastcgi_index index.php;
|
|
fastcgi_param SCRIPT_FILENAME ${pkgs.demostf-api}/share/php/demostf-api/src/public/index.php;
|
|
include ${pkgs.nginx}/conf/fastcgi_params;
|
|
client_max_body_size 250m;
|
|
'';
|
|
};
|
|
"= /upload" = {
|
|
extraConfig = ''
|
|
fastcgi_pass unix:${fpmCfg.socket};
|
|
fastcgi_index index.php;
|
|
fastcgi_param SCRIPT_FILENAME ${pkgs.demostf-api}/share/php/demostf-api/src/public/upload.php;
|
|
include ${pkgs.nginx}/conf/fastcgi_params;
|
|
client_max_body_size 250m;
|
|
'';
|
|
};
|
|
"/static/" = {
|
|
alias = "/demos/";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
services.phpfpm.pools.demostf-api = {
|
|
phpPackage = pkgs.php.buildEnv {
|
|
extensions = {
|
|
enabled,
|
|
all,
|
|
}:
|
|
enabled ++ (with all; [pdo apcu]);
|
|
extraConfig = ''
|
|
post_max_size = 150M
|
|
upload_max_filesize = 150M
|
|
'';
|
|
};
|
|
settings = {
|
|
"clear_env" = "no";
|
|
"pm" = "dynamic";
|
|
"pm.max_children" = "25";
|
|
"pm.start_servers" = "5";
|
|
"pm.min_spare_servers" = "5";
|
|
"pm.max_spare_servers" = "15";
|
|
"catch_workers_output" = "yes";
|
|
"listen.owner" = "nginx";
|
|
"listen.group" = "nginx";
|
|
};
|
|
phpEnv = {
|
|
BASE_HOST = "demos.tf";
|
|
DEMO_ROOT = "/demos";
|
|
DEMO_HOST = "localhost";
|
|
DB_TYPE = "pgsql";
|
|
DB_HOST = "/run/postgresql";
|
|
DB_PORT = "5432";
|
|
DB_DATABASE = "demostf";
|
|
DB_USERNAME = "demostf";
|
|
APP_ROOT = "http://localhost";
|
|
EDIT_SECRET = "edit";
|
|
ACCESS_KEY = "access";
|
|
PARSER_PATH = "${pkgs.demostf-parser}/bin/parse_demo";
|
|
};
|
|
user = "demostf";
|
|
group = "demostf";
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = let
|
|
testBinary = lib.getExe pkgs.demostf-api-test;
|
|
initSql = pkgs.fetchurl {
|
|
url = "https://github.com/demostf/db/raw/refs/heads/master/schema.sql";
|
|
hash = "sha256-tdMYDxlvpuQRxHglX46sCldxzsh1cDxkch2lGWnFH8E=";
|
|
};
|
|
in ''
|
|
machine.succeed("mkdir /demos && chmod 0777 /demos");
|
|
machine.wait_for_unit("postgresql")
|
|
machine.succeed("sudo -u demostf psql demostf demostf < ${initSql}");
|
|
machine.succeed("sudo -u postgres psql postgres postgres -c \"alter user demostf with password 'test';\"");
|
|
machine.wait_for_unit("phpfpm-demostf-api")
|
|
machine.wait_for_unit("nginx")
|
|
machine.wait_until_succeeds("curl http://127.0.0.1", timeout=45)
|
|
machine.succeed("DB_URL='postgres://demostf:test@localhost/demostf'\
|
|
BASE_URL='http://localhost/'\
|
|
ACCESS_KEY='access'\
|
|
EDIT_KEY='edit'\
|
|
${testBinary}", timeout=180)
|
|
'';
|
|
}
|