at master 2.2 kB view raw
1import ./make-test-python.nix { 2 name = "rss2email"; 3 4 nodes = { 5 server = 6 { pkgs, ... }: 7 { 8 imports = [ common/user-account.nix ]; 9 services.nginx = { 10 enable = true; 11 virtualHosts."127.0.0.1".root = ./common/webroot; 12 }; 13 services.rss2email = { 14 enable = true; 15 to = "alice@localhost"; 16 interval = "1"; 17 config.from = "test@example.org"; 18 feeds = { 19 nixos = { 20 url = "http://127.0.0.1/news-rss.xml"; 21 }; 22 }; 23 }; 24 services.opensmtpd = { 25 enable = true; 26 extraServerArgs = [ "-v" ]; 27 serverConfiguration = '' 28 listen on 127.0.0.1 29 action dovecot_deliver mda \ 30 "${pkgs.dovecot}/libexec/dovecot/deliver -d %{user.username}" 31 match from any for local action dovecot_deliver 32 ''; 33 }; 34 services.dovecot2 = { 35 enable = true; 36 enableImap = true; 37 mailLocation = "maildir:~/mail"; 38 protocols = [ "imap" ]; 39 }; 40 environment.systemPackages = 41 let 42 checkMailLanded = pkgs.writeScriptBin "check-mail-landed" '' 43 #!${pkgs.python3.interpreter} 44 import imaplib 45 46 with imaplib.IMAP4('127.0.0.1', 143) as imap: 47 imap.login('alice', 'foobar') 48 imap.select() 49 status, refs = imap.search(None, 'ALL') 50 print("=====> Result of search for all:", status, refs) 51 assert status == 'OK' 52 assert len(refs) > 0 53 status, msg = imap.fetch(refs[0], 'BODY[TEXT]') 54 assert status == 'OK' 55 ''; 56 in 57 [ 58 pkgs.opensmtpd 59 checkMailLanded 60 ]; 61 }; 62 }; 63 64 testScript = '' 65 start_all() 66 67 server.systemctl("start network-online.target") 68 server.wait_for_unit("network-online.target") 69 server.wait_for_unit("opensmtpd") 70 server.wait_for_unit("dovecot2") 71 server.wait_for_unit("nginx") 72 server.wait_for_unit("rss2email") 73 74 server.wait_until_succeeds("check-mail-landed >&2") 75 ''; 76}