diff --git a/tools/testtool/freeport.go b/tools/testtool/freeport.go index 8f07e38..b31ef87 100644 --- a/tools/testtool/freeport.go +++ b/tools/testtool/freeport.go @@ -1,7 +1,6 @@ package testtool import ( - "context" "fmt" "net" "os" @@ -29,21 +28,24 @@ func GetFreePort() (string, error) { // WaitForPort tries to connect to given local port with constant backoff. // -// Can be canceled via ctx. -func WaitForPort(ctx context.Context, port string) { +// Returns error if port is not ready after timeout. +func WaitForPort(timeout time.Duration, port string) error { + stopTimer := time.NewTimer(timeout) + defer stopTimer.Stop() + t := time.NewTicker(time.Millisecond * 100) defer t.Stop() for { select { - case <-ctx.Done(): - return + case <-stopTimer.C: + return fmt.Errorf("timeout") case <-t.C: if err := portIsReady(port); err != nil { _, _ = fmt.Fprintf(os.Stderr, "waiting for port: %s\n", err) break } - return + return nil } } } diff --git a/tools/testtool/freeport_test.go b/tools/testtool/freeport_test.go index 4314c3b..f9cbbbb 100644 --- a/tools/testtool/freeport_test.go +++ b/tools/testtool/freeport_test.go @@ -1,7 +1,6 @@ package testtool import ( - "context" "net" "net/http" "net/http/httptest" @@ -27,22 +26,12 @@ func TestWaitForPort(t *testing.T) { _, port, err := net.SplitHostPort(u.Host) require.Nil(t, err) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - - WaitForPort(ctx, port) - - require.NoError(t, ctx.Err()) + require.NoError(t, WaitForPort(time.Second, port)) } func TestWaitForPort_timeout(t *testing.T) { p, err := GetFreePort() require.NoError(t, err) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - - WaitForPort(ctx, p) - - require.Error(t, ctx.Err()) + require.Error(t, WaitForPort(time.Second, p)) }