Merge pull request #596 from sosedoff/fix-flaky-backend-test

Fix flaky backend connection test
This commit is contained in:
Dan Sosedoff 2022-12-03 16:49:51 -06:00 committed by GitHub
commit 3cec2c5c66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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)
<-ctx.Done() go func() {
if err := server.Shutdown(context.Background()); err != nil && err != http.ErrServerClosed { <-ctx.Done()
panic(err) if err := server.Shutdown(context.Background()); err != nil && err != http.ErrServerClosed {
} panic(err)
}
}()
} }
func mustStartServer(server *http.Server) { func mustStartServer(server *http.Server) {
err := server.ListenAndServe() go func() {
if err != nil && err != http.ErrServerClosed { err := server.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
panic(err)
}
}()
if err := waitForServer(server.Addr, 5); err != nil {
panic(err) 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
}