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