{ 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}") ''; }