Replace context in WaitForPort with timeout.

This commit is contained in:
Arseny Balobanov 2020-02-19 00:08:37 +03:00
parent aa7c9ae7c5
commit e1c3ec8cd0
2 changed files with 10 additions and 19 deletions

View file

@ -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
}
}
}

View file

@ -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))
}