at 23.05-pre 3.4 kB view raw
1let 2 certs = import ./common/acme/server/snakeoil-certs.nix; 3 domain = certs.domain; 4in 5import ./make-test-python.nix ({ pkgs, ... }: { 6 name = "alps"; 7 8 nodes = { 9 server = { 10 imports = [ ./common/user-account.nix ]; 11 security.pki.certificateFiles = [ 12 certs.ca.cert 13 ]; 14 networking.extraHosts = '' 15 127.0.0.1 ${domain} 16 ''; 17 networking.firewall.allowedTCPPorts = [ 25 465 993 ]; 18 services.postfix = { 19 enable = true; 20 enableSubmission = true; 21 enableSubmissions = true; 22 tlsTrustedAuthorities = "${certs.ca.cert}"; 23 sslCert = "${certs.${domain}.cert}"; 24 sslKey = "${certs.${domain}.key}"; 25 }; 26 services.dovecot2 = { 27 enable = true; 28 enableImap = true; 29 sslCACert = "${certs.ca.cert}"; 30 sslServerCert = "${certs.${domain}.cert}"; 31 sslServerKey = "${certs.${domain}.key}"; 32 }; 33 }; 34 35 client = { nodes, config, ... }: { 36 security.pki.certificateFiles = [ 37 certs.ca.cert 38 ]; 39 networking.extraHosts = '' 40 ${nodes.server.config.networking.primaryIPAddress} ${domain} 41 ''; 42 services.alps = { 43 enable = true; 44 theme = "alps"; 45 imaps = { 46 host = domain; 47 port = 993; 48 }; 49 smtps = { 50 host = domain; 51 port = 465; 52 }; 53 }; 54 environment.systemPackages = [ 55 (pkgs.writers.writePython3Bin "test-alps-login" { } '' 56 from urllib.request import build_opener, HTTPCookieProcessor, Request 57 from urllib.parse import urlencode, urljoin 58 from http.cookiejar import CookieJar 59 60 baseurl = "http://localhost:${toString config.services.alps.port}" 61 username = "alice" 62 password = "${nodes.server.config.users.users.alice.password}" 63 cookiejar = CookieJar() 64 cookieprocessor = HTTPCookieProcessor(cookiejar) 65 opener = build_opener(cookieprocessor) 66 67 data = urlencode({"username": username, "password": password}).encode() 68 req = Request(urljoin(baseurl, "login"), data=data, method="POST") 69 with opener.open(req) as ret: 70 # Check that the alps_session cookie is set 71 print(cookiejar) 72 assert any(cookie.name == "alps_session" for cookie in cookiejar) 73 74 req = Request(baseurl) 75 with opener.open(req) as ret: 76 # Check that the alps_session cookie is still there... 77 print(cookiejar) 78 assert any(cookie.name == "alps_session" for cookie in cookiejar) 79 # ...and that we have not been redirected back to the login page 80 print(ret.url) 81 assert ret.url == urljoin(baseurl, "mailbox/INBOX") 82 83 req = Request(urljoin(baseurl, "logout")) 84 with opener.open(req) as ret: 85 # Check that the alps_session cookie is now gone 86 print(cookiejar) 87 assert all(cookie.name != "alps_session" for cookie in cookiejar) 88 '') 89 ]; 90 }; 91 }; 92 93 testScript = '' 94 server.start() 95 server.wait_for_unit("postfix.service") 96 server.wait_for_unit("dovecot2.service") 97 server.wait_for_open_port(465) 98 server.wait_for_open_port(993) 99 100 client.start() 101 client.wait_for_unit("alps.service") 102 client.succeed("test-alps-login") 103 ''; 104})