Merge pull request #596 from sosedoff/fix-flaky-backend-test
Fix flaky backend connection test
This commit is contained in:
commit
3cec2c5c66
@ -3,6 +3,7 @@ package api
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@ -69,7 +70,7 @@ func TestBackendFetchCredential(t *testing.T) {
|
|||||||
srvCtx, srvCancel := context.WithTimeout(context.Background(), time.Minute)
|
srvCtx, srvCancel := context.WithTimeout(context.Background(), time.Minute)
|
||||||
defer srvCancel()
|
defer srvCancel()
|
||||||
|
|
||||||
go startTestBackend(srvCtx, "localhost:5555")
|
startTestBackend(srvCtx, "localhost:5555")
|
||||||
|
|
||||||
for _, ex := range examples {
|
for _, ex := range examples {
|
||||||
t.Run(ex.name, func(t *testing.T) {
|
t.Run(ex.name, func(t *testing.T) {
|
||||||
@ -139,17 +140,42 @@ func startTestBackend(ctx context.Context, listenAddr string) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
server := &http.Server{Addr: listenAddr, Handler: router}
|
server := &http.Server{Addr: listenAddr, Handler: router}
|
||||||
go mustStartServer(server)
|
mustStartServer(server)
|
||||||
|
|
||||||
|
go func() {
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
if err := server.Shutdown(context.Background()); err != nil && err != http.ErrServerClosed {
|
if err := server.Shutdown(context.Background()); err != nil && err != http.ErrServerClosed {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustStartServer(server *http.Server) {
|
func mustStartServer(server *http.Server) {
|
||||||
|
go func() {
|
||||||
err := server.ListenAndServe()
|
err := server.ListenAndServe()
|
||||||
if err != nil && err != http.ErrServerClosed {
|
if err != nil && err != http.ErrServerClosed {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err := waitForServer(server.Addr, 5); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func waitForServer(addr string, n int) error {
|
||||||
|
var lastErr error
|
||||||
|
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
conn, err := net.Dial("tcp", addr)
|
||||||
|
if err == nil {
|
||||||
|
conn.Close()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
lastErr = err
|
||||||
|
time.Sleep(time.Millisecond * 100)
|
||||||
|
}
|
||||||
|
|
||||||
|
return lastErr
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user