test(server): fix data race in monitoring endpoint tests

Replace concurrent polling of srv.GetListeners() with pre-created
net.Listener injected via srv.SetListeners(). The previous approach
raced with the Start() goroutine writing to s.listeners and calling
net.Listen().

Also remove unused waitForServerRunning call.
This commit is contained in:
xfy 2026-06-11 15:23:46 +08:00
parent e8fbbf368c
commit dea5e28f5f

View File

@ -1,6 +1,7 @@
package server package server
import ( import (
"net"
"testing" "testing"
"time" "time"
@ -22,22 +23,19 @@ func TestMonitoringEndpoints_OnlyRegisteredWhenEnabled(t *testing.T) {
}}, }},
} }
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("listen failed: %v", err)
}
defer ln.Close()
addr := ln.Addr().String()
cfg.Servers[0].Listen = addr
srv := New(cfg) srv := New(cfg)
srv.SetListeners([]net.Listener{ln})
go srv.Start() go srv.Start()
defer srv.StopWithTimeout(5 * time.Second) defer srv.StopWithTimeout(5 * time.Second)
var addr string
for start := time.Now(); time.Since(start) < 2*time.Second; time.Sleep(10 * time.Millisecond) {
listeners := srv.GetListeners()
if len(listeners) > 0 {
addr = listeners[0].Addr().String()
break
}
}
if addr == "" {
t.Fatal("server has no listeners")
}
client := &fasthttp.Client{} client := &fasthttp.Client{}
req := fasthttp.AcquireRequest() req := fasthttp.AcquireRequest()
resp := fasthttp.AcquireResponse() resp := fasthttp.AcquireResponse()
@ -74,22 +72,19 @@ func TestMonitoringEndpoints_ReachableWhenEnabled(t *testing.T) {
}}, }},
} }
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("listen failed: %v", err)
}
defer ln.Close()
addr := ln.Addr().String()
cfg.Servers[0].Listen = addr
srv := New(cfg) srv := New(cfg)
srv.SetListeners([]net.Listener{ln})
go srv.Start() go srv.Start()
defer srv.StopWithTimeout(5 * time.Second) defer srv.StopWithTimeout(5 * time.Second)
var addr string
for start := time.Now(); time.Since(start) < 2*time.Second; time.Sleep(10 * time.Millisecond) {
listeners := srv.GetListeners()
if len(listeners) > 0 {
addr = listeners[0].Addr().String()
break
}
}
if addr == "" {
t.Fatal("server has no listeners")
}
client := &fasthttp.Client{} client := &fasthttp.Client{}
req := fasthttp.AcquireRequest() req := fasthttp.AcquireRequest()
resp := fasthttp.AcquireResponse() resp := fasthttp.AcquireResponse()