forked from Fediversity/Fediversity
- simplify the configuration module the `package` attribute makes little sense to be user-configurable, since it will always need to be the derivation defined in this very repository. for debugging one may as well change the original code itself. - unbreak deployment setting `CREDENTIALS_DIRECTORY` disabled the systemd mechanism set up in the configuration module. - remove unneeded configuration for deployment - unbreak integration tests before that missed waiting for the service to create some state before running the application-level tests.
64 lines
2.1 KiB
Nix
64 lines
2.1 KiB
Nix
{ lib, pkgs }:
|
|
let
|
|
# TODO: specify project/service name globally
|
|
name = "panel";
|
|
defaults = {
|
|
# XXX: we have to duplicate this here despite it being defined in the service module, otherwise the test framework will error out
|
|
nixpkgs.overlays = lib.mkForce [ (import ./overlay.nix) ];
|
|
services.${name} = {
|
|
enable = true;
|
|
production = false;
|
|
restart = "no";
|
|
domain = "example.com";
|
|
secrets = {
|
|
SECRET_KEY = pkgs.writeText "SECRET_KEY" "secret";
|
|
};
|
|
};
|
|
|
|
virtualisation = {
|
|
memorySize = 2048;
|
|
cores = 2;
|
|
};
|
|
};
|
|
in
|
|
lib.mapAttrs (name: test: pkgs.testers.runNixOSTest (test // { inherit name; })) {
|
|
application-tests = {
|
|
inherit defaults;
|
|
nodes.server = _: { imports = [ ./configuration.nix ]; };
|
|
# run all application-level tests managed by Django
|
|
# https://docs.djangoproject.com/en/5.0/topics/testing/overview/
|
|
testScript = ''
|
|
server.wait_for_unit("${name}.service")
|
|
server.succeed("manage test ${name}")
|
|
'';
|
|
};
|
|
admin = {
|
|
inherit defaults;
|
|
nodes.server = _: { imports = [ ./configuration.nix ]; };
|
|
# check that the admin interface is served
|
|
testScript = ''
|
|
server.wait_for_unit("${name}.service")
|
|
server.wait_for_open_port(8000)
|
|
server.succeed("curl --fail -L -H 'Host: example.org' http://localhost/admin")
|
|
'';
|
|
};
|
|
|
|
sass-processing = {
|
|
inherit defaults;
|
|
nodes.server = _: { imports = [ ./configuration.nix ]; };
|
|
extraPythonPackages = ps: with ps; [ beautifulsoup4 ];
|
|
# type checking on `beautifulsoup4` will error out
|
|
skipTypeCheck = true;
|
|
# check that stylesheets are pre-processed and served
|
|
testScript = ''
|
|
from bs4 import BeautifulSoup
|
|
server.wait_for_unit("${name}.service")
|
|
server.wait_for_open_port(8000)
|
|
stdout = server.succeed("curl --fail -H 'Host: example.org' http://localhost")
|
|
# the CSS is auto-generated with a hash in the file name
|
|
html = BeautifulSoup(stdout, 'html.parser')
|
|
css = html.find('link', type="text/css")['href']
|
|
server.succeed(f"curl --fail -H 'Host: example.org' http://localhost/{css}")
|
|
'';
|
|
};
|
|
}
|