aboutsummaryrefslogtreecommitdiffstats
path: root/tests/by-name/em/email-dns/test.nix
diff options
context:
space:
mode:
Diffstat (limited to 'tests/by-name/em/email-dns/test.nix')
-rw-r--r--tests/by-name/em/email-dns/test.nix170
1 files changed, 0 insertions, 170 deletions
diff --git a/tests/by-name/em/email-dns/test.nix b/tests/by-name/em/email-dns/test.nix
deleted file mode 100644
index 33955d8..0000000
--- a/tests/by-name/em/email-dns/test.nix
+++ /dev/null
@@ -1,170 +0,0 @@
-{
- 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-dns";
-
- 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 = import ./nodes/name_server.nix {inherit extraModules;};
-
- mail1_server =
- mkMailServer "mail1"
- {
- class = "individual";
- name = "bob";
- secret = "{PLAIN}bob-password";
- email = ["bob@bob.com"];
- };
-
- mail2_server =
- mkMailServer "mail2"
- {
- class = "individual";
- name = "alice";
- secret = "{PLAIN}alice-password";
- email = ["alice@alice.com"];
- };
-
- bob = mkUser "bob" "mail1";
- alice = mkUser "alice" "mail2";
- };
-
- testScript = {...}: let
- checkEmailEmpty = pkgs.writeShellScript "assert-empty-emails" ''
- set -xe
-
- # fetchmail returns EXIT_CODE 1 when no new mail
- fetchmail --verbose >&2 || [ "$?" -eq 1 ] || {
- echo "Mail was not empty" >&2
- exit 1
- }
- '';
- checkEmailNotEmpty = pkgs.writeShellScript "assert-empty-emails" ''
- set -xe
-
- # fetchmail returns EXIT_CODE 1 when no new mail
- fetchmail --verbose >&2 || [ "$?" -ne 1 ] || {
- echo "No new mail" >&2
- exit 1
- }
- '';
- checkSpamEmailNotEmpty = pkgs.writeShellScript "assert-empty-emails" ''
- set -xe
-
- # fetchmail returns EXIT_CODE 1 when no new mail
- fetchmail --folder JUNK --verbose >&2 || [ "$?" -ne 1 ] || {
- echo "No new mail" >&2
- exit 1
- }
- '';
-
- acme = import ../../../common/acme {inherit pkgs;};
- in
- acme.prepare ["mail1_server" "mail2_server" "alice" "bob"]
- # Python
- ''
- from time import sleep
-
- mail1_server.wait_for_unit("stalwart-mail.service")
- mail1_server.wait_for_open_port(993) # imap
- mail1_server.wait_for_open_port(465) # smtp
- mail2_server.wait_for_unit("stalwart-mail.service")
- mail2_server.wait_for_open_port(993) # imap
- mail2_server.wait_for_open_port(465) # smtp
-
- alice.wait_for_unit("multi-user.target")
- bob.wait_for_unit("multi-user.target")
-
- name_server.wait_until_succeeds("stat /var/lib/acme/mta-sts.alice.com/cert.pem")
- name_server.wait_until_succeeds("stat /var/lib/acme/mta-sts.bob.com/cert.pem")
-
- with subtest("Both 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(mail1_server)
- all_services_running(mail2_server)
-
- with subtest("Both start without mail"):
- alice.succeed("sudo -u alice ${checkEmailEmpty}")
- bob.succeed("sudo -u bob ${checkEmailEmpty}")
-
- 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@bob.com >&2
- ''}")
-
- # Give `mail2_server` some time to send the email.
- sleep(160)
-
- bob.succeed("sudo -u bob ${checkSpamEmailNotEmpty}")
-
- 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@bob.com >&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 `mail2_server` some time to send the email.
- sleep(120)
-
- bob.succeed("sudo -u bob ${checkEmailNotEmpty}")
-
- mail1_server.copy_from_vm("/var/lib/", "server1")
- mail2_server.copy_from_vm("/var/lib/", "server2")
- bob.copy_from_vm("/home/bob/mail", "bob")
- '';
- }