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

View file

@ -1,7 +1,6 @@
package testtool package testtool
import ( import (
"context"
"fmt" "fmt"
"net" "net"
"os" "os"
@ -29,21 +28,24 @@ func GetFreePort() (string, error) {
// WaitForPort tries to connect to given local port with constant backoff. // WaitForPort tries to connect to given local port with constant backoff.
// //
// Can be canceled via ctx. // Returns error if port is not ready after timeout.
func WaitForPort(ctx context.Context, port string) { func WaitForPort(timeout time.Duration, port string) error {
stopTimer := time.NewTimer(timeout)
defer stopTimer.Stop()
t := time.NewTicker(time.Millisecond * 100) t := time.NewTicker(time.Millisecond * 100)
defer t.Stop() defer t.Stop()
for { for {
select { select {
case <-ctx.Done(): case <-stopTimer.C:
return return fmt.Errorf("timeout")
case <-t.C: case <-t.C:
if err := portIsReady(port); err != nil { if err := portIsReady(port); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "waiting for port: %s\n", err) _, _ = fmt.Fprintf(os.Stderr, "waiting for port: %s\n", err)
break break
} }
return return nil
} }
} }
} }

View file

@ -1,7 +1,6 @@
package testtool package testtool
import ( import (
"context"
"net" "net"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
@ -27,22 +26,12 @@ func TestWaitForPort(t *testing.T) {
_, port, err := net.SplitHostPort(u.Host) _, port, err := net.SplitHostPort(u.Host)
require.Nil(t, err) require.Nil(t, err)
ctx, cancel := context.WithTimeout(context.Background(), time.Second) require.NoError(t, WaitForPort(time.Second, port))
defer cancel()
WaitForPort(ctx, port)
require.NoError(t, ctx.Err())
} }
func TestWaitForPort_timeout(t *testing.T) { func TestWaitForPort_timeout(t *testing.T) {
p, err := GetFreePort() p, err := GetFreePort()
require.NoError(t, err) require.NoError(t, err)
ctx, cancel := context.WithTimeout(context.Background(), time.Second) require.Error(t, WaitForPort(time.Second, p))
defer cancel()
WaitForPort(ctx, p)
require.Error(t, ctx.Err())
} }