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
import (
"net"
"testing"
"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.SetListeners([]net.Listener{ln})
go srv.Start()
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{}
req := fasthttp.AcquireRequest()
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.SetListeners([]net.Listener{ln})
go srv.Start()
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{}
req := fasthttp.AcquireRequest()
resp := fasthttp.AcquireResponse()