From b295ae93966fe46e206eb731eeeddb49422382cd Mon Sep 17 00:00:00 2001 From: Raphael Borun Das Gupta Date: Sat, 14 Jun 2025 21:04:26 +0200 Subject: [PATCH 1/2] qois.cloud: make adminpassFile an option --- nixos-modules/cloud/default.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nixos-modules/cloud/default.nix b/nixos-modules/cloud/default.nix index ee503bb..aaba0ef 100644 --- a/nixos-modules/cloud/default.nix +++ b/nixos-modules/cloud/default.nix @@ -3,6 +3,7 @@ config, lib, pkgs, + options, ... }: @@ -30,6 +31,10 @@ with lib; "nextcloud30" ]; }; + + adminpassFile = options.services.nextcloud.config.adminpassFile // { + default = config.sops.secrets."nextcloud/admin".path; + }; }; config = mkIf cfg.enable { @@ -59,7 +64,7 @@ with lib; database.createLocally = true; config = { - adminpassFile = config.sops.secrets."nextcloud/admin".path; + inherit (cfg) adminpassFile; adminuser = "root"; dbtype = "pgsql"; }; From a072ba0dd73947d905c1936c51036fb71e8c997b Mon Sep 17 00:00:00 2001 From: Raphael Borun Das Gupta Date: Sat, 14 Jun 2025 21:08:12 +0200 Subject: [PATCH 2/2] qois.cloud: add basic test (WIP) --- nixos-modules/cloud/test.nix | 35 +++++++++++++++++++++++++++++++++++ nixos-modules/cloud/test.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 nixos-modules/cloud/test.nix create mode 100644 nixos-modules/cloud/test.py diff --git a/nixos-modules/cloud/test.nix b/nixos-modules/cloud/test.nix new file mode 100644 index 0000000..5dbfa78 --- /dev/null +++ b/nixos-modules/cloud/test.nix @@ -0,0 +1,35 @@ +{ + ... +}: +{ + # Note: This extends the default configuration from ${self}/checks/nixos-modules + nodes.webserver = + { pkgs, lib, ... }: + let + inherit (pkgs) curl gnugrep; + inherit (lib) mkForce genAttrs const; + in + { + qois.cloud = { + enable = true; + domain = "cloud.example.com"; + package = pkgs.nextcloud31; + adminpassFile = (pkgs.writeText "nextcloud-test-adminpass-file" "super secret password").outPath; + }; + + qois.postgresql.package = pkgs.postgresql; + sops.secrets = mkForce { }; + + # Disable TLS services + services.nginx.virtualHosts = genAttrs [ "cloud.example.com" ] (const { + forceSSL = mkForce false; + enableACME = mkForce false; + }); + + # Test environment + environment.systemPackages = [ + curl + gnugrep + ]; + }; +} diff --git a/nixos-modules/cloud/test.py b/nixos-modules/cloud/test.py new file mode 100644 index 0000000..b7d5cf9 --- /dev/null +++ b/nixos-modules/cloud/test.py @@ -0,0 +1,32 @@ +def test(subtest, webserver): + webserver.wait_for_unit("nginx") + webserver.wait_for_open_port(80) + + # 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" + )