forked from NixOS/nixpkgs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Ctem <c@ctem.me> Co-authored-by: cab <cab404@mailbox.org> Co-authored-by: a-kenji <aks.kenji@protonmail.com> Co-authored-by: Shahar Dawn Or <mightyiampresence@gmail.com> Co-authored-by: Matthias Meschede <MMesch@users.noreply.github.com> Co-authored-by: Ilan Joselevich <personal@ilanjoselevich.com>
- Loading branch information
1 parent
50361fb
commit cbf8e91
Showing
4 changed files
with
90 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
import ./make-test-python.nix ({ pkgs, lib, ... }: | ||
let | ||
uiPort = 1234; | ||
backendPort = 5678; | ||
lemmyNodeName = "server"; | ||
in | ||
{ | ||
name = "lemmy"; | ||
meta = with lib.maintainers; { maintainers = [ mightyiam ]; }; | ||
|
||
nodes = { | ||
client = { }; | ||
|
||
"${lemmyNodeName}" = { | ||
services.lemmy = { | ||
enable = true; | ||
jwtSecretPath = pkgs.writeTextFile { | ||
name = "lemmy-secret"; | ||
text = "very-secret-password123"; | ||
}; | ||
ui.port = uiPort; | ||
settings = { | ||
hostname = "http://${lemmyNodeName}"; | ||
port = backendPort; | ||
database.createLocally = true; | ||
}; | ||
caddy.enable = true; | ||
}; | ||
|
||
networking.firewall.allowedTCPPorts = [ 80 ]; | ||
|
||
# pict-rs seems to need more than 1025114112 bytes | ||
virtualisation.memorySize = 2000; | ||
}; | ||
}; | ||
|
||
testScript = '' | ||
server = ${lemmyNodeName} | ||
with subtest("the backend starts and responds"): | ||
server.wait_for_unit("lemmy.service") | ||
server.wait_for_open_port(${toString backendPort}) | ||
server.succeed("curl --fail localhost:${toString backendPort}/api/v3/site") | ||
with subtest("the UI starts and responds"): | ||
server.wait_for_unit("lemmy-ui.service") | ||
server.wait_for_open_port(${toString uiPort}) | ||
server.succeed("curl --fail localhost:${toString uiPort}") | ||
with subtest("Lemmy-UI responds through the caddy reverse proxy"): | ||
server.wait_for_unit("network-online.target") | ||
server.wait_for_unit("caddy.service") | ||
server.wait_for_open_port(80) | ||
body = server.execute("curl --fail --location ${lemmyNodeName}")[1] | ||
assert "Lemmy" in body, f"String Lemmy not found in response for ${lemmyNodeName}: \n{body}" | ||
with subtest("the server is exposed externally"): | ||
client.wait_for_unit("network-online.target") | ||
client.succeed("curl -v --fail ${lemmyNodeName}") | ||
with subtest("caddy correctly routes backend requests"): | ||
# Make sure we are not hitting frontend | ||
server.execute("systemctl stop lemmy-ui.service") | ||
def assert_http_code(url, expected_http_code, extra_curl_args=""): | ||
_, http_code = server.execute(f'curl --silent -o /dev/null {extra_curl_args} --fail --write-out "%{{http_code}}" {url}') | ||
assert http_code == str(expected_http_code), f"expected http code {expected_http_code}, got {http_code}" | ||
# Caddy responds with HTTP code 502 if it cannot handle the requested path | ||
assert_http_code("${lemmyNodeName}/obviously-wrong-path/", 502) | ||
assert_http_code("${lemmyNodeName}/static/js/client.js", 200) | ||
assert_http_code("${lemmyNodeName}/api/v3/site", 200) | ||
# A 404 confirms that the request goes to the backend | ||
# No path can return 200 until after we upload an image to pict-rs | ||
assert_http_code("${lemmyNodeName}/pictrs/", 404) | ||
# The paths `/feeds/*` and `/nodeinfo/*` are not tested because they seem to be misconfigured | ||
assert_http_code("${lemmyNodeName}/some-other-made-up-path/", 404, "-X POST") | ||
assert_http_code("${lemmyNodeName}/some-other-path", 404, "-H 'Accept: application/activity+json'") | ||
assert_http_code("${lemmyNodeName}/some-other-path", 404, "-H 'Accept: application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"'") | ||
''; | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters