рабочий вариант, но скороть 10 МБит
This commit is contained in:
@@ -82,7 +82,7 @@ func TestPeerRecoveryPlanTreatsRelayReadyPeersAsRecoveryGap(t *testing.T) {
|
||||
RendezvousLeaseID: "lease-1",
|
||||
RelayNodeID: "node-r",
|
||||
RelayEndpoint: "quic://relay:19443",
|
||||
RelayControl: true,
|
||||
RelayQUIC: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -121,6 +121,129 @@ func TestPeerRecoveryPlanCapsTargetByConnectablePeers(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPeerRecoveryPlanPrefersExternalRegionsWhenTrimmingReadyPeers(t *testing.T) {
|
||||
now := time.Date(2026, 5, 18, 12, 0, 0, 0, time.UTC)
|
||||
plan := PlanPeerRecovery(PeerRecoveryPlanConfig{
|
||||
PeerCache: PeerCacheSnapshot{
|
||||
Entries: []PeerCacheEntry{
|
||||
{NodeID: "node-home-a", Endpoint: "quic://node-home-a:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home"},
|
||||
{NodeID: "node-home-b", Endpoint: "quic://node-home-b:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home"},
|
||||
{NodeID: "node-usa", Endpoint: "quic://node-usa:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "usa"},
|
||||
{NodeID: "node-ifcm", Endpoint: "quic://node-ifcm:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "ifcm"},
|
||||
},
|
||||
},
|
||||
Connections: PeerConnectionSnapshot{Entries: []PeerConnectionState{
|
||||
{NodeID: "node-home-a", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-home-b", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-usa", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-ifcm", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
}},
|
||||
PreferredRegion: "home",
|
||||
Now: now,
|
||||
})
|
||||
|
||||
if len(plan.Candidates) != DefaultStablePeerTarget {
|
||||
t.Fatalf("candidate count = %d, want %d", len(plan.Candidates), DefaultStablePeerTarget)
|
||||
}
|
||||
if !recoveryPlanHasCandidate(plan, "node-usa", "maintain_ready") || !recoveryPlanHasCandidate(plan, "node-ifcm", "maintain_ready") {
|
||||
t.Fatalf("expected external-region peers to be retained: %+v", plan.Candidates)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPeerRecoveryPlanPrefersPublicIngressAtSameRegion(t *testing.T) {
|
||||
now := time.Date(2026, 5, 18, 12, 0, 0, 0, time.UTC)
|
||||
plan := PlanPeerRecovery(PeerRecoveryPlanConfig{
|
||||
PeerCache: PeerCacheSnapshot{
|
||||
Entries: []PeerCacheEntry{
|
||||
{NodeID: "node-home-private-a", Endpoint: "quic://10.0.0.2:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home"},
|
||||
{NodeID: "node-home-private-b", Endpoint: "quic://10.0.0.3:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home"},
|
||||
{NodeID: "node-home-public", Endpoint: "quic://94.141.118.222:19199", Warm: true, WarmReason: "route_adjacent", BestRegion: "home", PublicIngressCount: 1},
|
||||
{NodeID: "node-usa", Endpoint: "quic://195.123.240.88:19131", Warm: true, WarmReason: "route_adjacent", BestRegion: "usa", PublicIngressCount: 1},
|
||||
},
|
||||
},
|
||||
Connections: PeerConnectionSnapshot{Entries: []PeerConnectionState{
|
||||
{NodeID: "node-home-private-a", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-home-private-b", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-home-public", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-usa", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
}},
|
||||
PreferredRegion: "home",
|
||||
Now: now,
|
||||
})
|
||||
|
||||
if len(plan.Candidates) != DefaultStablePeerTarget {
|
||||
t.Fatalf("candidate count = %d, want %d", len(plan.Candidates), DefaultStablePeerTarget)
|
||||
}
|
||||
if !recoveryPlanHasCandidate(plan, "node-home-public", "maintain_ready") {
|
||||
t.Fatalf("expected public-ingress home peer to be retained: %+v", plan.Candidates)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPeerRecoveryPlanRetainsDistinctExternalRegionsWhenAvailable(t *testing.T) {
|
||||
now := time.Date(2026, 5, 19, 12, 0, 0, 0, time.UTC)
|
||||
plan := PlanPeerRecovery(PeerRecoveryPlanConfig{
|
||||
PeerCache: PeerCacheSnapshot{
|
||||
Entries: []PeerCacheEntry{
|
||||
{NodeID: "node-home-a", Endpoint: "quic://node-home-a:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home"},
|
||||
{NodeID: "node-home-b", Endpoint: "quic://node-home-b:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home"},
|
||||
{NodeID: "node-home-c", Endpoint: "quic://node-home-c:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home"},
|
||||
{NodeID: "node-usa-a", Endpoint: "quic://node-usa-a:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "usa", PublicIngressCount: 1},
|
||||
{NodeID: "node-usa-b", Endpoint: "quic://node-usa-b:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "usa", PublicIngressCount: 1},
|
||||
{NodeID: "node-ifcm", Endpoint: "quic://node-ifcm:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "ifcm", PublicIngressCount: 1},
|
||||
},
|
||||
},
|
||||
Connections: PeerConnectionSnapshot{Entries: []PeerConnectionState{
|
||||
{NodeID: "node-home-a", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-home-b", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-home-c", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-usa-a", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-usa-b", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
{NodeID: "node-ifcm", State: PeerConnectionReady, LastLatencyMs: 20},
|
||||
}},
|
||||
PreferredRegion: "home",
|
||||
Now: now,
|
||||
})
|
||||
|
||||
if len(plan.Candidates) != DefaultStablePeerTarget {
|
||||
t.Fatalf("candidate count = %d, want %d", len(plan.Candidates), DefaultStablePeerTarget)
|
||||
}
|
||||
if !recoveryPlanHasCandidate(plan, "node-usa-a", "maintain_ready") && !recoveryPlanHasCandidate(plan, "node-usa-b", "maintain_ready") {
|
||||
t.Fatalf("expected at least one usa candidate to be retained: %+v", plan.Candidates)
|
||||
}
|
||||
if !recoveryPlanHasCandidate(plan, "node-ifcm", "maintain_ready") {
|
||||
t.Fatalf("expected ifcm candidate to be retained for area diversity: %+v", plan.Candidates)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPeerRecoveryPlanSteadyModeAddsMissingExternalAreaCandidate(t *testing.T) {
|
||||
now := time.Date(2026, 5, 19, 12, 0, 0, 0, time.UTC)
|
||||
plan := PlanPeerRecovery(PeerRecoveryPlanConfig{
|
||||
PeerCache: PeerCacheSnapshot{
|
||||
Entries: []PeerCacheEntry{
|
||||
{NodeID: "node-test-a", Endpoint: "quic://node-test-a:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "test"},
|
||||
{NodeID: "node-test-b", Endpoint: "quic://node-test-b:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "test"},
|
||||
{NodeID: "node-usa", Endpoint: "quic://node-usa:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "usa", PublicIngressCount: 1},
|
||||
{NodeID: "node-home", Endpoint: "quic://node-home:19443", Warm: true, WarmReason: "route_adjacent", BestRegion: "home", PublicIngressCount: 1},
|
||||
},
|
||||
},
|
||||
Connections: PeerConnectionSnapshot{Entries: []PeerConnectionState{
|
||||
{NodeID: "node-test-a", State: PeerConnectionReady, LastLatencyMs: 10},
|
||||
{NodeID: "node-test-b", State: PeerConnectionReady, LastLatencyMs: 10},
|
||||
{NodeID: "node-usa", State: PeerConnectionReady, LastLatencyMs: 10},
|
||||
{NodeID: "node-home", State: PeerConnectionDegraded, LastLatencyMs: 20},
|
||||
}},
|
||||
PreferredRegion: "test",
|
||||
Now: now,
|
||||
})
|
||||
|
||||
if len(plan.Candidates) != DefaultStablePeerTarget {
|
||||
t.Fatalf("candidate count = %d, want %d", len(plan.Candidates), DefaultStablePeerTarget)
|
||||
}
|
||||
if !recoveryPlanHasCandidate(plan, "node-home", "recover_external_area") {
|
||||
t.Fatalf("expected missing external area candidate to be retained: %+v", plan.Candidates)
|
||||
}
|
||||
}
|
||||
|
||||
func recoveryPlanPeer(nodeID string, warm bool, recoverySeed bool, warmReason string) PeerCacheEntry {
|
||||
return PeerCacheEntry{
|
||||
NodeID: nodeID,
|
||||
|
||||
Reference in New Issue
Block a user