blob: 0b3c84b315f059369edcfb3945c8c4c193d15216 (
plain)
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
|
import ./make-test-python.nix {
name = "rss2email";
nodes = {
server =
{ config, pkgs, ... }:
{
imports = [ common/user-account.nix ];
services.nginx = {
enable = true;
virtualHosts."127.0.0.1".root = ./common/webroot;
};
services.rss2email = {
enable = true;
to = "alice@localhost";
interval = "1";
config.from = "test@example.org";
feeds = {
nixos = {
url = "http://127.0.0.1/news-rss.xml";
};
};
};
services.opensmtpd = {
enable = true;
extraServerArgs = [ "-v" ];
serverConfiguration = ''
listen on 127.0.0.1
action dovecot_deliver mda \
"${pkgs.dovecot}/libexec/dovecot/deliver -d %{user.username}"
match from any for local action dovecot_deliver
'';
};
services.dovecot2 = {
enable = true;
enablePAM = true;
settings = {
dovecot_config_version = "2.4.3";
dovecot_storage_version = config.services.dovecot2.package.version;
mail_driver = "maildir";
mail_path = "~/mail";
protocols.imap = true;
};
};
environment.systemPackages =
let
checkMailLanded = pkgs.writeScriptBin "check-mail-landed" ''
#!${pkgs.python3.interpreter}
import imaplib
with imaplib.IMAP4('127.0.0.1', 143) as imap:
imap.login('alice', 'foobar')
imap.select()
status, refs = imap.search(None, 'ALL')
print("=====> Result of search for all:", status, refs)
assert status == 'OK'
assert len(refs) > 0
status, msg = imap.fetch(refs[0], 'BODY[TEXT]')
assert status == 'OK'
'';
in
[
pkgs.opensmtpd
checkMailLanded
];
};
};
testScript = ''
start_all()
server.systemctl("start network-online.target")
server.wait_for_unit("network-online.target")
server.wait_for_unit("opensmtpd")
server.wait_for_unit("dovecot")
server.wait_for_unit("nginx")
server.wait_for_unit("rss2email")
server.wait_until_succeeds("check-mail-landed >&2")
'';
}
|