aboutsummaryrefslogtreecommitdiffstats
path: root/tests/by-name/st/stalwart-email-http/test.nix
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-10-02 00:27:50 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-10-02 00:27:50 +0200
commit82d1dc4549f3ba079505b6ebaa266e6d04d1cce4 (patch)
tree2377a080b1946b921f85fbc42c2a9385446760d7 /tests/by-name/st/stalwart-email-http/test.nix
parentpkgs/fetchmail-common-name: Update patch, so that it applies again (diff)
downloadnixos-server-82d1dc4549f3ba079505b6ebaa266e6d04d1cce4.zip
tests/email/*: Rename to stalwart email tests
These tests explicitly test our stalwart email module.
Diffstat (limited to 'tests/by-name/st/stalwart-email-http/test.nix')
-rw-r--r--tests/by-name/st/stalwart-email-http/test.nix103
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/by-name/st/stalwart-email-http/test.nix b/tests/by-name/st/stalwart-email-http/test.nix
new file mode 100644
index 0000000..42fd22b
--- /dev/null
+++ b/tests/by-name/st/stalwart-email-http/test.nix
@@ -0,0 +1,103 @@
+{
+ nixos-lib,
+ pkgsUnstable,
+ nixpkgs-unstable,
+ vhackPackages,
+ pkgs,
+ extraModules,
+ nixLib,
+ ...
+}: let
+ mail_server = import ./nodes/mail_server.nix {inherit extraModules pkgs vhackPackages;};
+ inherit (mail_server) mkMailServer;
+ user = import ./nodes/user.nix {inherit pkgs vhackPackages;};
+ inherit (user) mkUser;
+in
+ nixos-lib.runTest {
+ # Wait until we actually use stalwart again
+ meta.broken = true;
+
+ hostPkgs = pkgs; # the Nixpkgs package set used outside the VMs
+
+ name = "email-http";
+
+ node = {
+ specialArgs = {inherit pkgsUnstable vhackPackages nixpkgs-unstable nixLib;};
+
+ # Use the nixpkgs as constructed by the `nixpkgs.*` options
+ pkgs = null;
+ };
+
+ nodes = {
+ acme = {
+ nodes,
+ lib,
+ ...
+ }: {
+ imports = [
+ ../../../common/acme/server.nix
+ ../../../common/dns/client.nix
+ ];
+ };
+
+ name_server = {nodes, ...}: {
+ imports =
+ extraModules
+ ++ [
+ ../../../common/acme/client.nix
+ ../../../common/dns/server.nix
+ ];
+
+ vhack.dns.zones = {
+ "mail.server.com" = {
+ SOA = {
+ nameServer = "ns";
+ adminEmail = "admin@server.com";
+ serial = 2025012301;
+ };
+ useOrigin = false;
+
+ A = [
+ nodes.mail_server.networking.primaryIPAddress
+ ];
+ AAAA = [
+ nodes.mail_server.networking.primaryIPv6Address
+ ];
+ };
+ };
+ };
+
+ mail_server = mkMailServer "mail" null;
+
+ bob = mkUser "bob" "mail";
+ };
+
+ # TODO(@bpeetz): This test should also test the http JMAP features of stalwart-mail. <2025-04-12>
+ testScript = _: let
+ acme = import ../../../common/acme {inherit pkgs;};
+ in
+ acme.prepare ["mail_server" "bob"]
+ # Python
+ ''
+ mail_server.wait_for_unit("stalwart-mail.service")
+ mail_server.wait_for_open_port(993) # imap
+ mail_server.wait_for_open_port(465) # smtp
+
+ bob.wait_for_unit("multi-user.target")
+
+ with subtest("The mailserver successfully started all services"):
+ import json
+ def all_services_running(host):
+ (status, output) = host.systemctl("list-units --state=failed --plain --no-pager --output=json")
+ host_failed = json.loads(output)
+ assert len(host_failed) == 0, f"Expected zero failing services, but found: {json.dumps(host_failed, indent=4)}"
+ all_services_running(mail_server)
+
+ with subtest("Bob can use the self-service interface"):
+ bob.succeed("${pkgs.writeShellScript "check-self-service" ''
+ curl mail.server.com --location --output /home/bob/output.html;
+ ''}")
+
+ bob.copy_from_vm("/home/bob", "")
+ '';
+ }