The `-q` flag makes grep close the pipe early, which curl doesn't handle gracefully, but exits with an error like "(23) Failed writing body".
44 lines
1.2 KiB
Nix
44 lines
1.2 KiB
Nix
import ./make-test-python.nix ({ lib, pkgs, ... }: {
|
|
name = "doh-proxy-rust";
|
|
meta = with lib.maintainers; {
|
|
maintainers = [ stephank ];
|
|
};
|
|
|
|
nodes = {
|
|
machine = { pkgs, lib, ... }: {
|
|
services.bind = {
|
|
enable = true;
|
|
extraOptions = "empty-zones-enable no;";
|
|
zones = lib.singleton {
|
|
name = ".";
|
|
master = true;
|
|
file = pkgs.writeText "root.zone" ''
|
|
$TTL 3600
|
|
. IN SOA ns.example.org. admin.example.org. ( 1 3h 1h 1w 1d )
|
|
. IN NS ns.example.org.
|
|
ns.example.org. IN A 192.168.0.1
|
|
'';
|
|
};
|
|
};
|
|
services.doh-proxy-rust = {
|
|
enable = true;
|
|
flags = [
|
|
"--server-address=127.0.0.1:53"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = { nodes, ... }: ''
|
|
url = "http://localhost:3000/dns-query"
|
|
query = "AAABAAABAAAAAAAAAm5zB2V4YW1wbGUDb3JnAAABAAE=" # IN A ns.example.org.
|
|
bin_ip = r"$'\xC0\xA8\x00\x01'" # 192.168.0.1, as shell binary string
|
|
|
|
machine.wait_for_unit("bind.service")
|
|
machine.wait_for_unit("doh-proxy-rust.service")
|
|
machine.wait_for_open_port(53)
|
|
machine.wait_for_open_port(3000)
|
|
machine.succeed(f"curl --fail '{url}?dns={query}' | grep -F {bin_ip}")
|
|
'';
|
|
})
|