@@ -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