1
0
Fork 1
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-06-08 10:48:06 +09:00
nixpkgs/nixos/tests/nginx-http3.nix
Markus Wamser 962db80796 nixosTests.ngingx-http3: fix race condition
make the client wait for its network to come up before starting test

without the wait, the client might try to access the network before its
own network stack is up, as evidenced in
https://hydra.nixos.org/build/299048133/nixlog/9/tail
2025-06-01 16:06:26 +02:00

120 lines
3.7 KiB
Nix

{ pkgs, runTest, ... }:
let
hosts = ''
192.168.2.101 acme.test
'';
in
builtins.listToAttrs (
builtins.map
(nginxPackage: {
name = pkgs.lib.getName nginxPackage;
value = runTest {
name = "nginx-http3-${pkgs.lib.getName nginxPackage}";
meta.maintainers = with pkgs.lib.maintainers; [ izorkin ];
nodes = {
server =
{ lib, pkgs, ... }:
{
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{
address = "192.168.2.101";
prefixLength = 24;
}
];
};
extraHosts = hosts;
firewall.allowedTCPPorts = [ 443 ];
firewall.allowedUDPPorts = [ 443 ];
};
security.pki.certificates = [
(builtins.readFile ./common/acme/server/ca.cert.pem)
];
services.nginx = {
enable = true;
package = nginxPackage;
virtualHosts."acme.test" = {
onlySSL = true;
sslCertificate = ./common/acme/server/acme.test.cert.pem;
sslCertificateKey = ./common/acme/server/acme.test.key.pem;
http2 = true;
http3 = true;
http3_hq = false;
quic = true;
reuseport = true;
root = lib.mkForce (
pkgs.runCommandLocal "testdir" { } ''
mkdir "$out"
cat > "$out/index.html" <<EOF
<html><body>Hello World!</body></html>
EOF
cat > "$out/example.txt" <<EOF
Check http3 protocol.
EOF
''
);
};
};
};
client =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.curlHTTP3 ];
networking = {
interfaces.eth1 = {
ipv4.addresses = [
{
address = "192.168.2.201";
prefixLength = 24;
}
];
};
extraHosts = hosts;
};
security.pki.certificates = [
(builtins.readFile ./common/acme/server/ca.cert.pem)
];
};
};
testScript = ''
start_all()
server.wait_for_unit("nginx")
server.wait_for_open_port(443)
client.wait_for_unit("network-online.target")
# Check http connections
client.succeed("curl --verbose --http3-only https://acme.test | grep 'Hello World!'")
# Check downloadings
client.succeed("curl --verbose --http3-only https://acme.test/example.txt --output /tmp/example.txt")
client.succeed("cat /tmp/example.txt | grep 'Check http3 protocol.'")
# Check header reading
client.succeed("curl --verbose --http3-only --head https://acme.test | grep 'content-type'")
client.succeed("curl --verbose --http3-only --head https://acme.test | grep 'HTTP/3 200'")
client.succeed("curl --verbose --http3-only --head https://acme.test/error | grep 'HTTP/3 404'")
# Check change User-Agent
client.succeed("curl --verbose --http3-only --user-agent 'Curl test 3.0' https://acme.test")
server.succeed("cat /var/log/nginx/access.log | grep 'Curl test 3.0'")
server.shutdown()
client.shutdown()
'';
};
})
[
pkgs.angieQuic
pkgs.nginxQuic
]
)