Prefer QUIC fabric endpoints

This commit is contained in:
2026-05-16 10:40:41 +03:00
parent 562ccfdbc1
commit efce41f458
5 changed files with 69 additions and 2 deletions
@@ -59,6 +59,9 @@ func scorePeerEndpointCandidate(candidate PeerEndpointCandidate, opts EndpointCa
reasons := []string{"base"}
switch candidate.Transport {
case "quic", "direct_quic", "udp_quic", "quic_udp":
score += 45
reasons = append(reasons, "transport:quic")
case "direct_tcp_tls", "direct_http", "direct_https":
score += 35
reasons = append(reasons, "transport:direct")
@@ -99,6 +99,45 @@ func TestRankPeerEndpointCandidatesUsesDeterministicTieBreak(t *testing.T) {
}
}
func TestRankPeerEndpointCandidatesPrefersQUICFastPath(t *testing.T) {
now := time.Date(2026, 5, 16, 12, 0, 0, 0, time.UTC)
candidates := []PeerEndpointCandidate{
{
EndpointID: "node-b-wss",
NodeID: "node-b",
Transport: "wss",
Address: "wss://node-b.example.test",
Reachability: "public",
NATType: "none",
ConnectivityMode: "direct",
Priority: 10,
LastVerifiedAt: &now,
},
{
EndpointID: "node-b-quic",
NodeID: "node-b",
Transport: "direct_quic",
Address: "quic://node-b.example.test:19443",
Reachability: "public",
NATType: "none",
ConnectivityMode: "direct",
Priority: 10,
LastVerifiedAt: &now,
},
}
ranked := RankPeerEndpointCandidates(candidates, EndpointCandidateScoreOptions{
ChannelClass: SyntheticChannelFabricControl,
Now: now,
MaxVerificationAge: time.Minute,
})
if ranked[0].Candidate.EndpointID != "node-b-quic" {
t.Fatalf("top endpoint = %q, want quic: %+v", ranked[0].Candidate.EndpointID, ranked)
}
if !containsReason(ranked[0].Reasons, "transport:quic") {
t.Fatalf("quic reason missing: %+v", ranked[0].Reasons)
}
}
func TestRankPeerEndpointCandidatesPrefersCorporatePrivateEndpoint(t *testing.T) {
now := time.Date(2026, 4, 28, 12, 0, 0, 0, time.UTC)
candidates := []PeerEndpointCandidate{