1import ../make-test-python.nix (
2 { pkgs, ... }:
3 {
4 name = "maddy-unencrypted";
5 meta = with pkgs.lib.maintainers; {
6 maintainers = [ onny ];
7 };
8
9 nodes = {
10 server =
11 { ... }:
12 {
13 services.maddy = {
14 enable = true;
15 hostname = "server";
16 primaryDomain = "server";
17 openFirewall = true;
18 ensureAccounts = [ "postmaster@server" ];
19 ensureCredentials = {
20 # Do not use this in production. This will make passwords world-readable
21 # in the Nix store
22 "postmaster@server".passwordFile = "${pkgs.writeText "postmaster" "test"}";
23 };
24 };
25 };
26
27 client =
28 { ... }:
29 {
30 environment.systemPackages = [
31 (pkgs.writers.writePython3Bin "send-testmail" { } ''
32 import smtplib
33 from email.mime.text import MIMEText
34
35 msg = MIMEText("Hello World")
36 msg['Subject'] = 'Test'
37 msg['From'] = "postmaster@server"
38 msg['To'] = "postmaster@server"
39 with smtplib.SMTP('server', 587) as smtp:
40 smtp.login('postmaster@server', 'test')
41 smtp.sendmail('postmaster@server', 'postmaster@server', msg.as_string())
42 '')
43 (pkgs.writers.writePython3Bin "test-imap" { } ''
44 import imaplib
45
46 with imaplib.IMAP4('server') as imap:
47 imap.login('postmaster@server', 'test')
48 imap.select()
49 status, refs = imap.search(None, 'ALL')
50 assert status == 'OK'
51 assert len(refs) == 1
52 status, msg = imap.fetch(refs[0], 'BODY[TEXT]')
53 assert status == 'OK'
54 assert msg[0][1].strip() == b"Hello World"
55 '')
56 ];
57 };
58 };
59
60 testScript = ''
61 start_all()
62 server.wait_for_unit("maddy.service")
63 server.wait_for_open_port(143)
64 server.wait_for_open_port(587)
65 client.succeed("send-testmail")
66 client.succeed("test-imap")
67 '';
68 }
69)