Replace context in WaitForPort with timeout.

This commit is contained in:
Arseny Balobanov 2020-02-15 23:18:14 +03:00
parent 1957ef1d73
commit a07059c769
3 changed files with 11 additions and 26 deletions

View file

@ -1,7 +1,6 @@
package main
import (
"context"
"encoding/json"
"fmt"
"image"
@ -58,12 +57,7 @@ func startServer(t *testing.T) (port string, stop func()) {
<-done
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
defer cancel()
testtool.WaitForPort(ctx, port)
if ctx.Err() != nil {
err = ctx.Err()
if err = testtool.WaitForPort(time.Second*30, port); err != nil {
stop()
}

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