1import ./make-test-python.nix ({ pkgs, ... }: {
2 name = "maddy";
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 };
13 };
14
15 client = { ... }: {
16 environment.systemPackages = [
17 (pkgs.writers.writePython3Bin "send-testmail" { } ''
18 import smtplib
19 from email.mime.text import MIMEText
20
21 msg = MIMEText("Hello World")
22 msg['Subject'] = 'Test'
23 msg['From'] = "postmaster@server"
24 msg['To'] = "postmaster@server"
25 with smtplib.SMTP('server', 587) as smtp:
26 smtp.login('postmaster@server', 'test')
27 smtp.sendmail('postmaster@server', 'postmaster@server', msg.as_string())
28 '')
29 (pkgs.writers.writePython3Bin "test-imap" { } ''
30 import imaplib
31
32 with imaplib.IMAP4('server') as imap:
33 imap.login('postmaster@server', 'test')
34 imap.select()
35 status, refs = imap.search(None, 'ALL')
36 assert status == 'OK'
37 assert len(refs) == 1
38 status, msg = imap.fetch(refs[0], 'BODY[TEXT]')
39 assert status == 'OK'
40 assert msg[0][1].strip() == b"Hello World"
41 '')
42 ];
43 };
44 };
45
46 testScript = ''
47 start_all()
48 server.wait_for_unit("maddy.service")
49 server.wait_for_open_port(143)
50 server.wait_for_open_port(587)
51
52 server.succeed("maddyctl creds create --password test postmaster@server")
53 server.succeed("maddyctl imap-acct create postmaster@server")
54
55 client.succeed("send-testmail")
56 client.succeed("test-imap")
57 '';
58})