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