Tests: fix TestShutdownTCP race using NotifyStartedFunc
This commit is contained in:
parent
2c1a31d550
commit
17a90cfd68
|
@ -6,7 +6,6 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func HelloServer(w ResponseWriter, req *Msg) {
|
func HelloServer(w ResponseWriter, req *Msg) {
|
||||||
|
@ -33,13 +32,17 @@ func RunLocalUDPServer(laddr string) (*Server, string, error) {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
server := &Server{PacketConn: pc}
|
server := &Server{PacketConn: pc}
|
||||||
|
|
||||||
|
waitLock := sync.Mutex{}
|
||||||
|
waitLock.Lock()
|
||||||
|
server.NotifyStartedFunc = waitLock.Unlock
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.ActivateAndServe()
|
server.ActivateAndServe()
|
||||||
pc.Close()
|
pc.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
time.Sleep(50 * time.Millisecond)
|
waitLock.Lock()
|
||||||
|
|
||||||
return server, pc.LocalAddr().String(), nil
|
return server, pc.LocalAddr().String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,13 +52,17 @@ func RunLocalUDPServerUnsafe(laddr string) (*Server, string, error) {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
server := &Server{PacketConn: pc, Unsafe: true}
|
server := &Server{PacketConn: pc, Unsafe: true}
|
||||||
|
|
||||||
|
waitLock := sync.Mutex{}
|
||||||
|
waitLock.Lock()
|
||||||
|
server.NotifyStartedFunc = waitLock.Unlock
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.ActivateAndServe()
|
server.ActivateAndServe()
|
||||||
pc.Close()
|
pc.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
time.Sleep(50 * time.Millisecond)
|
waitLock.Lock()
|
||||||
|
|
||||||
return server, pc.LocalAddr().String(), nil
|
return server, pc.LocalAddr().String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,24 +71,19 @@ func RunLocalTCPServer(laddr string) (*Server, string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
server := &Server{Listener: l}
|
server := &Server{Listener: l}
|
||||||
|
|
||||||
|
waitLock := sync.Mutex{}
|
||||||
|
waitLock.Lock()
|
||||||
|
server.NotifyStartedFunc = waitLock.Unlock
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
server.ActivateAndServe()
|
server.ActivateAndServe()
|
||||||
l.Close()
|
l.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
for i := 0; ; i++ {
|
waitLock.Lock()
|
||||||
conn, err := net.Dial("tcp", l.Addr().String())
|
|
||||||
if err == nil {
|
|
||||||
conn.Close()
|
|
||||||
break
|
|
||||||
}
|
|
||||||
time.Sleep(50 * time.Millisecond)
|
|
||||||
if i > 50 {
|
|
||||||
return nil, "", fmt.Errorf("failed to start server: ", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return server, l.Addr().String(), nil
|
return server, l.Addr().String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue