aboutsummaryrefslogtreecommitdiffstats
path: root/tests/by-name/sn/snm-email-single-server/test.nix
blob: 68c60225a3de88e7b03f02ecd6ccf4814c9d77a0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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")
    '';
  }