upstream: a diagnostics episode follows health, and a peer fault carries its cause
Gates / frontend (push) Successful in 2m5s
Gates / test (push) Successful in 2m43s
Gates / test-aarch64 (push) Successful in 8m19s
Gates / package (push) Successful in 4m21s
Gates / container (push) Successful in 13s
CI / gates (push) Successful in 30m43s

This commit is contained in:
2026-09-12 20:24:49 +02:00
parent 6e9a36903e
commit 08cdf86ecd
20 changed files with 1797 additions and 426 deletions
+5 -5
View File
@@ -978,14 +978,14 @@ fn probeUpstreams(r: Runner, cfg: model.Config) !usize {
// what keeps the close off `dot` while it is still undefined.
var dot_wired = false;
defer if (dot_wired) dot.close(r.io);
const client: transport.Client = switch (endpoint.scheme) {
const client: transport.Leaf = switch (endpoint.scheme) {
.doh => doh: {
doh = doh_client.DohClient.init(&http, endpoint, &request_buf, &transfer_buf) catch {
try r.out.print("FAIL upstreams[{d}] {f}: not a usable DoH url\n", .{ i, safe_url.redactQuoted(server.url) });
failures += 1;
continue;
};
break :doh doh.client();
break :doh doh.leaf();
},
.dot => dot: {
dot = dot_client.DotClient.init(endpoint, server.tls_name, r.gpa, &bundle, &bundle_lock, null, .{
@@ -995,7 +995,7 @@ fn probeUpstreams(r: Runner, cfg: model.Config) !usize {
.stream_write = tls_buffers[3 * chunk ..],
});
dot_wired = true;
break :dot dot.client();
break :dot dot.leaf();
},
};
@@ -1792,8 +1792,8 @@ test "a failed DoT probe reaches close through the per-iteration defer without a
try testing.expectEqual(@as(usize, 2), try probeUpstreams(r, cfg));
try testing.expectEqualStrings(
"FAIL upstreams[0] 'tls://dns.example:853': ConnectFailed\n" ++
"FAIL upstreams[1] 'tls://other.example:853': ConnectFailed\n",
"FAIL upstreams[0] 'tls://dns.example:853': ConnectFailed (cause ConnectFailed)\n" ++
"FAIL upstreams[1] 'tls://other.example:853': ConnectFailed (cause ConnectFailed)\n",
captured.out.written(),
);
}