Skip to content

Commit

Permalink
Merge pull request moby#45909 from corhere/backport-24.0/improve-test…
Browse files Browse the repository at this point in the history
…-flakiness

[24.0 backport] make tests less flaky
  • Loading branch information
corhere committed Jul 7, 2023
2 parents 4ffc614 + 0e88c57 commit ecd494a
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 16 deletions.
8 changes: 4 additions & 4 deletions integration/container/daemon_linux_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ func TestDaemonHostGatewayIP(t *testing.T) {
// Verify the IP in /etc/hosts is same as host-gateway-ip
d := daemon.New(t)
// Verify the IP in /etc/hosts is same as the default bridge's IP
d.StartWithBusybox(t)
d.StartWithBusybox(t, "--iptables=false")
c := d.NewClientT(t)
ctx := context.Background()
cID := container.Run(ctx, t, c,
Expand All @@ -157,7 +157,7 @@ func TestDaemonHostGatewayIP(t *testing.T) {
d.Stop(t)

// Verify the IP in /etc/hosts is same as host-gateway-ip
d.StartWithBusybox(t, "--host-gateway-ip=6.7.8.9")
d.StartWithBusybox(t, "--iptables=false", "--host-gateway-ip=6.7.8.9")
cID = container.Run(ctx, t, c,
container.WithExtraHost("host.docker.internal:host-gateway"),
)
Expand Down Expand Up @@ -208,7 +208,7 @@ func TestRestartDaemonWithRestartingContainer(t *testing.T) {
c.HasBeenStartedBefore = true
})

d.Start(t)
d.Start(t, "--iptables=false")

ctxTimeout, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
Expand Down Expand Up @@ -256,7 +256,7 @@ func TestHardRestartWhenContainerIsRunning(t *testing.T) {
})
}

d.Start(t)
d.Start(t, "--iptables=false")

t.Run("RestartPolicy=none", func(t *testing.T) {
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
Expand Down
2 changes: 1 addition & 1 deletion integration/container/daemon_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func TestContainerKillOnDaemonStart(t *testing.T) {
assert.Assert(t, inspect.State.Running)

assert.NilError(t, d.Kill())
d.Start(t)
d.Start(t, "--iptables=false")

inspect, err = client.ContainerInspect(ctx, id)
assert.Check(t, is.Nil(err))
Expand Down
2 changes: 1 addition & 1 deletion integration/image/import_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func TestImportExtremelyLargeImageWorks(t *testing.T) {

// Spin up a new daemon, so that we can run this test in parallel (it's a slow test)
d := daemon.New(t)
d.Start(t)
d.Start(t, "--iptables=false")
defer d.Stop(t)

client := d.NewClientT(t)
Expand Down
37 changes: 27 additions & 10 deletions pkg/plugins/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package plugins // import "github.com/docker/docker/pkg/plugins"
import (
"bytes"
"encoding/json"
"errors"
"io"
"net/http"
"net/http/httptest"
Expand All @@ -13,7 +14,6 @@ import (

"github.com/docker/docker/pkg/plugins/transport"
"github.com/docker/go-connections/tlsconfig"
"github.com/pkg/errors"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
)
Expand Down Expand Up @@ -240,22 +240,39 @@ func TestClientWithRequestTimeout(t *testing.T) {
Timeout() bool
}

timeout := 1 * time.Millisecond
unblock := make(chan struct{})
testHandler := func(w http.ResponseWriter, r *http.Request) {
time.Sleep(timeout + 10*time.Millisecond)
select {
case <-unblock:
case <-r.Context().Done():
}
w.WriteHeader(http.StatusOK)
}

srv := httptest.NewServer(http.HandlerFunc(testHandler))
defer srv.Close()
defer func() {
close(unblock)
srv.Close()
}()

client := &Client{http: srv.Client(), requestFactory: &testRequestWrapper{srv}}
_, err := client.callWithRetry("/Plugin.Hello", nil, false, WithRequestTimeout(timeout))
assert.Assert(t, is.ErrorContains(err, ""), "expected error")

var tErr timeoutError
assert.Assert(t, errors.As(err, &tErr))
assert.Assert(t, tErr.Timeout())
errCh := make(chan error, 1)
go func() {
_, err := client.callWithRetry("/Plugin.Hello", nil, false, WithRequestTimeout(time.Millisecond))
errCh <- err
}()

timer := time.NewTimer(5 * time.Second)
defer timer.Stop()
select {
case err := <-errCh:
var tErr timeoutError
if assert.Check(t, errors.As(err, &tErr), "want timeout error, got %T", err) {
assert.Check(t, tErr.Timeout())
}
case <-timer.C:
t.Fatal("client request did not time out in time")
}
}

type testRequestWrapper struct {
Expand Down

0 comments on commit ecd494a

Please sign in to comment.