WIP: module qois.cloud: add basic test #77

Draft
das-g wants to merge 2 commits from test-cloud into main
3 changed files with 76 additions and 1 deletions

View file

@ -3,6 +3,7 @@
config, config,
lib, lib,
pkgs, pkgs,
options,
... ...
}: }:
@ -30,6 +31,10 @@ with lib;
"nextcloud30" "nextcloud30"
]; ];
}; };
adminpassFile = options.services.nextcloud.config.adminpassFile // {
default = config.sops.secrets."nextcloud/admin".path;
};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -59,7 +64,7 @@ with lib;
database.createLocally = true; database.createLocally = true;
config = { config = {
adminpassFile = config.sops.secrets."nextcloud/admin".path; inherit (cfg) adminpassFile;
adminuser = "root"; adminuser = "root";
dbtype = "pgsql"; dbtype = "pgsql";
}; };

View file

@ -0,0 +1,36 @@
{
...
}:
{
# Note: This extends the default configuration from ${self}/checks/nixos-modules
nodes.webserver =
{ pkgs, lib, ... }:
let
inherit (pkgs) curl gnugrep;
inherit (lib) mkForce;
cloud-domain = "cloud.example.com";
in
{
qois.cloud = {
enable = true;
domain = cloud-domain;
package = pkgs.nextcloud31;
adminpassFile = "${pkgs.writeText "adminpass" "insecure"}"; # Don't try this at home!
};
qois.postgresql.package = pkgs.postgresql;
sops.secrets = mkForce { };
# Disable TLS services
services.nginx.virtualHosts."${cloud-domain}" = {
forceSSL = mkForce false;
enableACME = mkForce false;
};
# Test environment
environment.systemPackages = [
curl
gnugrep
];
};
}

View file

@ -0,0 +1,34 @@
def test(subtest, webserver):
webserver.wait_for_unit("nginx")
webserver.wait_for_open_port(80)
webserver.wait_for_unit("nextcloud-setup.service")
webserver.wait_for_unit("phpfpm-nextcloud.service")
# Helpers
def curl_variable_test(node, variable, expected, url):
value = node.succeed(
f"curl -s --no-location -o /dev/null -w '%{{{variable}}}' '{url}'"
)
assert value == expected, (
f"expected {variable} to be '{expected}' but got '{value}'"
)
def expect_http_code(node, code, url):
curl_variable_test(node, "http_code", code, url)
def expect_http_content_contains(node, expectedContentSnippet, url):
content = node.succeed(f"curl --no-location --silent '{url}'")
assert expectedContentSnippet in content, f"""
expected in content:
{expectedContentSnippet}
at {url} but got following content:
{content}
"""
# Tests
with subtest("website is successfully served on cloud.example.com"):
webserver.succeed("grep cloud.example.com /etc/hosts")
expect_http_code(webserver, "200", "http://cloud.example.com")
expect_http_content_contains(
webserver, "Log in to cloud.qoo.is", "http://docs.example.com"
)