tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
lol
0
fork
atom
overview
issues
pulls
pipelines
nixos/alps: test login and cookie
Henri Menke
3 years ago
9820effb
aeb5a692
+43
-5
2 changed files
expand all
collapse all
unified
split
nixos
tests
alps.nix
pkgs
servers
alps
default.nix
+40
-4
nixos/tests/alps.nix
···
2
2
certs = import ./common/acme/server/snakeoil-certs.nix;
3
3
domain = certs.domain;
4
4
in
5
5
-
import ./make-test-python.nix {
5
5
+
import ./make-test-python.nix ({ pkgs, ... }: {
6
6
name = "alps";
7
7
8
8
nodes = {
···
32
32
};
33
33
};
34
34
35
35
-
client = { nodes, ... }: {
35
35
+
client = { nodes, config, ... }: {
36
36
security.pki.certificateFiles = [
37
37
certs.ca.cert
38
38
];
···
51
51
port = 465;
52
52
};
53
53
};
54
54
+
environment.systemPackages = [
55
55
+
(pkgs.writers.writePython3Bin "test-alps-login" { } ''
56
56
+
from urllib.request import build_opener, HTTPCookieProcessor, Request
57
57
+
from urllib.parse import urlencode, urljoin
58
58
+
from http.cookiejar import CookieJar
59
59
+
60
60
+
baseurl = "http://localhost:${toString config.services.alps.port}"
61
61
+
username = "alice"
62
62
+
password = "${nodes.server.config.users.users.alice.password}"
63
63
+
cookiejar = CookieJar()
64
64
+
cookieprocessor = HTTPCookieProcessor(cookiejar)
65
65
+
opener = build_opener(cookieprocessor)
66
66
+
67
67
+
data = urlencode({"username": username, "password": password}).encode()
68
68
+
req = Request(urljoin(baseurl, "login"), data=data, method="POST")
69
69
+
with opener.open(req) as ret:
70
70
+
# Check that the alps_session cookie is set
71
71
+
print(cookiejar)
72
72
+
assert any(cookie.name == "alps_session" for cookie in cookiejar)
73
73
+
74
74
+
req = Request(baseurl)
75
75
+
with opener.open(req) as ret:
76
76
+
# Check that the alps_session cookie is still there...
77
77
+
print(cookiejar)
78
78
+
assert any(cookie.name == "alps_session" for cookie in cookiejar)
79
79
+
# ...and that we have not been redirected back to the login page
80
80
+
print(ret.url)
81
81
+
assert ret.url == urljoin(baseurl, "mailbox/INBOX")
82
82
+
83
83
+
req = Request(urljoin(baseurl, "logout"))
84
84
+
with opener.open(req) as ret:
85
85
+
# Check that the alps_session cookie is now gone
86
86
+
print(cookiejar)
87
87
+
assert all(cookie.name != "alps_session" for cookie in cookiejar)
88
88
+
'')
89
89
+
];
54
90
};
55
91
};
56
92
···
63
99
64
100
client.start()
65
101
client.wait_for_unit("alps.service")
66
66
-
client.wait_until_succeeds("curl -fvvv -s http://127.0.0.1:1323/", timeout=60)
102
102
+
client.succeed("test-alps-login")
67
103
'';
68
68
-
}
104
104
+
})
+3
-1
pkgs/servers/alps/default.nix
···
1
1
-
{ lib, buildGoModule, fetchFromSourcehut }:
1
1
+
{ lib, buildGoModule, fetchFromSourcehut, nixosTests }:
2
2
3
3
buildGoModule rec {
4
4
pname = "alps";
···
30
30
'';
31
31
32
32
proxyVendor = true;
33
33
+
34
34
+
passthru.tests = { inherit(nixosTests) alps; };
33
35
34
36
meta = with lib; {
35
37
description = "A simple and extensible webmail.";