aboutsummaryrefslogtreecommitdiffstats
path: root/tests/by-name/sn/snm-email-dual-server
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/by-name/sn/snm-email-dual-server/test.nix134
1 files changed, 134 insertions, 0 deletions
diff --git a/tests/by-name/sn/snm-email-dual-server/test.nix b/tests/by-name/sn/snm-email-dual-server/test.nix
new file mode 100644
index 0000000..6f7bebb
--- /dev/null
+++ b/tests/by-name/sn/snm-email-dual-server/test.nix
@@ -0,0 +1,134 @@
+{
+ lib,
+ vhack,
+ pkgs,
+ vhackPackages,
+ ...
+}: let
+ server1Domain = "mail.server1";
+ server2Domain = "mail.server2";
+
+ common = import ../../../common/email/functions.nix {inherit pkgs vhackPackages;};
+
+ # That's a horrible hack. We should instead wait, until the delivery of the email is
+ # confirmed.
+ sleepTime = "40";
+in
+ vhack.runTest {
+ name = "email";
+
+ serverDomains = [
+ {server1 = server1Domain;}
+ {server2 = server2Domain;}
+ ];
+
+ nodes = {
+ server1 = common.mkMailServer server1Domain "alice";
+ server2 = common.mkMailServer server2Domain "bob";
+
+ alice = common.mkUser "alice" server1Domain;
+ bob = common.mkUser "bob" server2Domain;
+ };
+
+ dns = {
+ server1 = common.mkDnsZone server1Domain;
+ server2 = common.mkDnsZone server2Domain;
+ };
+
+ services = [
+ {server1 = "postfix.service";}
+ {server1 = "dovecot.service";}
+ {server2 = "postfix.service";}
+ {server2 = "dovecot.service";}
+
+ {alice = "multi-user.target";}
+ {bob = "multi-user.target";}
+ ];
+
+ ports = [
+ {server1 = 993;} # imap
+ {server1 = 465;} # smtp
+
+ {server2 = 993;} # imap
+ {server2 = 465;} # smtp
+ ];
+
+ testScript = {...}:
+ # Python
+ ''
+ from time import sleep
+
+ with subtest("Dkim keys work"):
+ server1.succeed("sudo -u rspamd ${pkgs.writeShellScript "dkim-keys-check" ''
+ set -xe
+
+ stat /run/agenix/mailDkim
+
+ ${lib.getExe pkgs.openssl} pkey -text -noout -in /run/agenix/mailDkim | grep Private-Key
+ ${lib.getExe pkgs.openssl} pkey -text -noout -in /run/agenix/mailDkim
+ ''}")
+
+ 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 empty email to bob"):
+ alice.succeed("sudo -u alice ${pkgs.writeShellScript "alice-send" ''
+ set -xe
+
+ echo "" | msmtp --debug --account alice bob@${server2Domain} >&2
+ ''}")
+
+ # Give the mail server some time to send the email.
+ sleep(${sleepTime})
+
+ bob.succeed("sudo -u bob ${common.scripts.expectNewSpamMail}")
+
+ with subtest("Alice can send an non-empty email to bob"):
+ alice.succeed("sudo -u alice ${pkgs.writeShellScript "alice-send" ''
+ set -xe
+
+ cat << EOF | msmtp --debug --account alice bob@${server2Domain} >&2
+ Subject: Hi bob, I'm Alice!
+
+ Good day, Bob!
+
+ This is an email.
+ It contains a subject and a body.
+ I also assert utf8 support by including my last name in this very message.
+
+ XOXO
+ Alice van Dåligen.
+
+ .
+ EOF
+ ''}")
+
+ # Give the mail server some time to send the email.
+ sleep(${sleepTime})
+
+ bob.succeed("sudo -u bob ${common.scripts.expectNewSpamMail}")
+
+ with subtest("Bob can send an email to alice"):
+ bob.succeed("sudo -u bob ${pkgs.writeShellScript "bob-send" ''
+ set -xe
+
+ cat << EOF | msmtp --debug --account bob alice@${server1Domain} >&2
+ Hi Alice!
+
+ Thank you for your emails! (Although they seemed kinda weird tbh :?)
+
+ XXX
+ Bob Älšter
+
+ .
+ EOF
+ ''}")
+
+ # Give the mail server some time to send the email.
+ sleep(${sleepTime})
+
+ alice.succeed("sudo -u alice ${common.scripts.expectNewSpamMail}")
+ '';
+ }