Skip to content

Commit 0f5cb0c

Browse files
committed
test: fix flaky test
1 parent 9cb9109 commit 0f5cb0c

File tree

1 file changed

+54
-17
lines changed

1 file changed

+54
-17
lines changed

internal/proxy/balancer_test.go

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -495,30 +495,67 @@ func TestStickyLatencyBased_ServerUpdate(t *testing.T) {
495495
t.Fatal("expected a server to be selected")
496496
}
497497

498+
// Verify session was created
499+
lb.sessionMu.RLock()
500+
originalServer, sessionExists := lb.sessionMap["session123"]
501+
lb.sessionMu.RUnlock()
502+
if !sessionExists {
503+
t.Fatal("expected session to be created")
504+
}
505+
498506
// Update servers - remove server1, add server3
499507
updatedServers := []*Server{
500508
createTestServer("server2", 20*time.Millisecond),
501509
createTestServer("server3", 15*time.Millisecond),
502510
}
503511
lb.Update(updatedServers)
504512

505-
// Request with same session should now go to a different server since server1 is gone
506-
server2 := lb.NextServer(req)
507-
if server2 == nil {
508-
t.Fatal("expected a server to be selected")
509-
}
510-
511-
if server2.name == server1.name {
512-
t.Fatalf("expected a different server after update; still got %s", server2.name)
513-
}
514-
515-
// Verify session mapping still exists and points to a valid server
516-
lb.sessionMu.RLock()
517-
server, exists := lb.sessionMap["session123"]
518-
lb.sessionMu.RUnlock()
519-
520-
if exists && server == nil {
521-
t.Error("session exists but points to nil server")
513+
// If the original server was removed, the session should be cleaned up
514+
serverWasRemoved := true
515+
for _, s := range updatedServers {
516+
if s.name == originalServer.name {
517+
serverWasRemoved = false
518+
break
519+
}
520+
}
521+
522+
if serverWasRemoved {
523+
// Session should have been removed
524+
lb.sessionMu.RLock()
525+
_, sessionStillExists := lb.sessionMap["session123"]
526+
lb.sessionMu.RUnlock()
527+
if sessionStillExists {
528+
t.Error("expected session to be removed when server was removed")
529+
}
530+
531+
// Request with same session should create a new session with an available server
532+
server2 := lb.NextServer(req)
533+
if server2 == nil {
534+
t.Fatal("expected a server to be selected")
535+
}
536+
537+
// Verify the selected server is one of the available servers
538+
serverIsValid := false
539+
for _, s := range updatedServers {
540+
if s.name == server2.name {
541+
serverIsValid = true
542+
break
543+
}
544+
}
545+
if !serverIsValid {
546+
t.Fatalf("selected server %s is not in the updated server list", server2.name)
547+
}
548+
549+
// Verify new session was created
550+
lb.sessionMu.RLock()
551+
newServer, newSessionExists := lb.sessionMap["session123"]
552+
lb.sessionMu.RUnlock()
553+
if !newSessionExists {
554+
t.Error("expected new session to be created")
555+
}
556+
if newServer == nil {
557+
t.Error("new session points to nil server")
558+
}
522559
}
523560
}
524561

0 commit comments

Comments
 (0)