aboutsummaryrefslogtreecommitdiffstats
path: root/tests/by-name/sn/snm-email-single-server
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-10-28 13:48:44 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-10-28 13:48:44 +0100
commitb849839d66c353c53548615d8e55c2397027aacb (patch)
tree1db8562e3d27d3164daa6bc8d133e295ac9dcf8e /tests/by-name/sn/snm-email-single-server
parenttests/common/email/dkim: Remove old dkim keys (diff)
downloadnixos-server-b849839d66c353c53548615d8e55c2397027aacb.zip
tests/simple-nixos-mailserver: Init
These two tests kinda cover our email infrastructure. Importantly, all new mail gets classified as spam, which is why the tests do not really cover `rspamd`. As such things like dkim signing, correct DNS records and so on are not actually covered.
Diffstat (limited to 'tests/by-name/sn/snm-email-single-server')
-rw-r--r--tests/by-name/sn/snm-email-single-server/test.nix83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/by-name/sn/snm-email-single-server/test.nix b/tests/by-name/sn/snm-email-single-server/test.nix
new file mode 100644
index 0000000..68c6022
--- /dev/null
+++ b/tests/by-name/sn/snm-email-single-server/test.nix
@@ -0,0 +1,83 @@
+{
+ vhack,
+ pkgs,
+ vhackPackages,
+ ...
+}: let
+ domain = "mail.server.test";
+
+ common = import ../../../common/email/functions.nix {inherit pkgs vhackPackages;};
+in
+ vhack.runTest {
+ name = "email";
+
+ serverDomains = [
+ {server = domain;}
+ ];
+
+ nodes = {
+ server = {config, ...}: {
+ systemd.tmpfiles.rules = [
+ #- path mode user group - content
+ "f /passwords/alice 777 root root - alice-password"
+ "f /passwords/bob 777 root root - bob-password"
+ ];
+
+ vhack = {
+ mail = {
+ enable = true;
+ fqdn = domain;
+ domains = [
+ domain
+ ];
+ accounts = {
+ "alice@${domain}" = {
+ passwordFile = "/passwords/alice";
+ };
+ "bob@${domain}" = {
+ passwordFile = "/passwords/bob";
+ };
+ };
+ };
+ };
+ };
+
+ alice = common.mkUser "alice" domain;
+ bob = common.mkUser "bob" domain;
+ };
+
+ services = [
+ {server = "postfix.service";}
+ ];
+
+ ports = [
+ {server = 993;} # imap
+ {server = 465;} # smtp
+ ];
+
+ testScript = {...}:
+ # Python
+ ''
+ with subtest("Both start without mail"):
+ alice.succeed("sudo -u alice ${common.scripts.expectNoNewMail}")
+ bob.succeed("sudo -u bob ${common.scripts.expectNoNewMail}")
+
+ with subtest("Alice can send an email to bob"):
+ alice.succeed("sudo -u alice ${pkgs.writeShellScript "alice-send" ''
+ set -xe
+
+ cat << EOF | msmtp --debug --account alice bob@${domain} >&2
+ Hi Bob!
+
+ This is an email.
+ It contains a subject and a body.
+
+ ALICE
+ EOF
+ ''}")
+ bob.succeed("sudo -u bob ${common.scripts.expectNewMail}")
+
+ server.copy_from_machine("/var/lib/", "server")
+ bob.copy_from_machine("/home/bob/mail", "bob")
+ '';
+ }