integration: don't poll for containers to be running
container.Run() should be a synchronous operation in normal circumstances; the container is created and started, so polling after that for the container to be in the "running" state should not be needed. This should also prevent issues when a container (for whatever reason) exited immediately after starting; in that case we would continue polling for it to be running (which likely would never happen). Let's skip the polling; if the container is not in the expected state (i.e. exited), tests should fail as well. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
97e782ee2b
commit
5e7eade1f7
14 changed files with 4 additions and 65 deletions
|
@ -47,10 +47,6 @@ func TestCheckpoint(t *testing.T) {
|
|||
Type: mounttypes.TypeTmpfs,
|
||||
Target: "/tmp",
|
||||
}))
|
||||
poll.WaitOn(t,
|
||||
container.IsInState(ctx, apiClient, cID, "running"),
|
||||
poll.WithDelay(100*time.Millisecond),
|
||||
)
|
||||
|
||||
// FIXME: ipv6 iptables modules are not uploaded in the test environment
|
||||
stdoutStderr, err = exec.Command("bash", "-c", "set -x; "+
|
||||
|
|
|
@ -3,14 +3,12 @@ package container // import "github.com/docker/docker/integration/container"
|
|||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
containertypes "github.com/docker/docker/api/types/container"
|
||||
"github.com/docker/docker/integration/internal/container"
|
||||
"github.com/docker/docker/testutil"
|
||||
"gotest.tools/v3/assert"
|
||||
"gotest.tools/v3/poll"
|
||||
"gotest.tools/v3/skip"
|
||||
)
|
||||
|
||||
|
@ -107,11 +105,8 @@ func TestWindowsDevices(t *testing.T) {
|
|||
assert.ErrorContains(t, err, d.expectedStartFailureMessage)
|
||||
return
|
||||
}
|
||||
|
||||
assert.NilError(t, err)
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
// /Windows/System32/HostDriverStore is mounted from the host when class GUID 5B45201D-F2F2-4F3B-85BB-30FF1F953599
|
||||
// is mounted. See `C:\windows\System32\containers\devices.def` on a Windows host for (slightly more) details.
|
||||
res, err := container.Exec(ctx, apiClient, id, []string{
|
||||
|
|
|
@ -152,7 +152,6 @@ func TestKillDifferentUserContainer(t *testing.T) {
|
|||
id := container.Run(ctx, t, apiClient, func(c *container.TestContainerConfig) {
|
||||
c.Config.User = "daemon"
|
||||
})
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
err := apiClient.ContainerKill(ctx, id, "SIGKILL")
|
||||
assert.NilError(t, err)
|
||||
|
|
|
@ -94,7 +94,7 @@ func startServerContainer(ctx context.Context, t *testing.T, msg string, port in
|
|||
t.Helper()
|
||||
apiClient := testEnv.APIClient()
|
||||
|
||||
cID := container.Run(ctx, t, apiClient,
|
||||
return container.Run(ctx, t, apiClient,
|
||||
container.WithName("server-"+t.Name()),
|
||||
container.WithCmd("sh", "-c", fmt.Sprintf("echo %q | nc -lp %d", msg, port)),
|
||||
container.WithExposedPorts(fmt.Sprintf("%d/tcp", port)),
|
||||
|
@ -106,11 +106,8 @@ func startServerContainer(ctx context.Context, t *testing.T, msg string, port in
|
|||
},
|
||||
},
|
||||
}
|
||||
})
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
return cID
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// getExternalAddress() returns the external IP-address from eth0. If eth0 has
|
||||
|
|
|
@ -27,7 +27,6 @@ func TestPause(t *testing.T) {
|
|||
apiClient := testEnv.APIClient()
|
||||
|
||||
cID := container.Run(ctx, t, apiClient)
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
since := request.DaemonUnixTime(ctx, t, apiClient, testEnv)
|
||||
|
||||
|
@ -58,8 +57,6 @@ func TestPauseFailsOnWindowsServerContainers(t *testing.T) {
|
|||
apiClient := testEnv.APIClient()
|
||||
|
||||
cID := container.Run(ctx, t, apiClient)
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
err := apiClient.ContainerPause(ctx, cID)
|
||||
assert.Check(t, is.ErrorContains(err, cerrdefs.ErrNotImplemented.Error()))
|
||||
}
|
||||
|
@ -72,8 +69,6 @@ func TestPauseStopPausedContainer(t *testing.T) {
|
|||
apiClient := testEnv.APIClient()
|
||||
|
||||
cID := container.Run(ctx, t, apiClient)
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
err := apiClient.ContainerPause(ctx, cID)
|
||||
assert.NilError(t, err)
|
||||
|
||||
|
|
|
@ -3,14 +3,12 @@ package container // import "github.com/docker/docker/integration/container"
|
|||
import (
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/errdefs"
|
||||
"github.com/docker/docker/integration/internal/container"
|
||||
"gotest.tools/v3/assert"
|
||||
is "gotest.tools/v3/assert/cmp"
|
||||
"gotest.tools/v3/poll"
|
||||
"gotest.tools/v3/skip"
|
||||
)
|
||||
|
||||
|
@ -25,12 +23,10 @@ func TestPIDModeHost(t *testing.T) {
|
|||
apiClient := testEnv.APIClient()
|
||||
|
||||
cID := container.Run(ctx, t, apiClient, container.WithPIDMode("host"))
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
cPid := container.GetContainerNS(ctx, t, apiClient, cID, "pid")
|
||||
assert.Assert(t, hostPid == cPid)
|
||||
|
||||
cID = container.Run(ctx, t, apiClient)
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
cPid = container.GetContainerNS(ctx, t, apiClient, cID, "pid")
|
||||
assert.Assert(t, hostPid != cPid)
|
||||
}
|
||||
|
|
|
@ -52,7 +52,6 @@ func TestRenameStoppedContainer(t *testing.T) {
|
|||
|
||||
oldName := "first_name" + t.Name()
|
||||
cID := container.Run(ctx, t, apiClient, container.WithName(oldName), container.WithCmd("sh"))
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
inspect, err := apiClient.ContainerInspect(ctx, cID)
|
||||
assert.NilError(t, err)
|
||||
|
@ -73,7 +72,6 @@ func TestRenameRunningContainerAndReuse(t *testing.T) {
|
|||
|
||||
oldName := "first_name" + t.Name()
|
||||
cID := container.Run(ctx, t, apiClient, container.WithName(oldName))
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
newName := "new_name" + stringid.GenerateRandomID()
|
||||
err := apiClient.ContainerRename(ctx, oldName, newName)
|
||||
|
@ -87,7 +85,6 @@ func TestRenameRunningContainerAndReuse(t *testing.T) {
|
|||
assert.Check(t, is.ErrorContains(err, "No such container: "+oldName))
|
||||
|
||||
cID = container.Run(ctx, t, apiClient, container.WithName(oldName))
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
inspect, err = apiClient.ContainerInspect(ctx, cID)
|
||||
assert.NilError(t, err)
|
||||
|
@ -100,7 +97,6 @@ func TestRenameInvalidName(t *testing.T) {
|
|||
|
||||
oldName := "first_name" + t.Name()
|
||||
cID := container.Run(ctx, t, apiClient, container.WithName(oldName))
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
err := apiClient.ContainerRename(ctx, oldName, "new:invalid")
|
||||
assert.Check(t, is.ErrorContains(err, "Invalid container name"))
|
||||
|
@ -142,8 +138,6 @@ func TestRenameAnonymousContainer(t *testing.T) {
|
|||
err = apiClient.ContainerStart(ctx, container1Name, types.ContainerStartOptions{})
|
||||
assert.NilError(t, err)
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
count := "-c"
|
||||
if testEnv.DaemonInfo.OSType == "windows" {
|
||||
count = "-n"
|
||||
|
@ -168,8 +162,6 @@ func TestRenameContainerWithSameName(t *testing.T) {
|
|||
|
||||
oldName := "old" + t.Name()
|
||||
cID := container.Run(ctx, t, apiClient, container.WithName(oldName))
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
err := apiClient.ContainerRename(ctx, oldName, oldName)
|
||||
assert.Check(t, is.ErrorContains(err, "Renaming a container with the same name"))
|
||||
err = apiClient.ContainerRename(ctx, cID, oldName)
|
||||
|
@ -190,12 +182,10 @@ func TestRenameContainerWithLinkedContainer(t *testing.T) {
|
|||
|
||||
db1Name := "db1" + t.Name()
|
||||
db1ID := container.Run(ctx, t, apiClient, container.WithName(db1Name))
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, db1ID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
app1Name := "app1" + t.Name()
|
||||
app2Name := "app2" + t.Name()
|
||||
app1ID := container.Run(ctx, t, apiClient, container.WithName(app1Name), container.WithLinks(db1Name+":/mysql"))
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, app1ID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
container.Run(ctx, t, apiClient, container.WithName(app1Name), container.WithLinks(db1Name+":/mysql"))
|
||||
|
||||
err := apiClient.ContainerRename(ctx, app1Name, app2Name)
|
||||
assert.NilError(t, err)
|
||||
|
|
|
@ -3,7 +3,6 @@ package container // import "github.com/docker/docker/integration/container"
|
|||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/docker/docker/client"
|
||||
"github.com/docker/docker/integration/internal/container"
|
||||
|
@ -11,7 +10,6 @@ import (
|
|||
"github.com/docker/docker/testutil"
|
||||
"github.com/docker/docker/testutil/daemon"
|
||||
"gotest.tools/v3/assert"
|
||||
"gotest.tools/v3/poll"
|
||||
"gotest.tools/v3/skip"
|
||||
)
|
||||
|
||||
|
@ -24,7 +22,6 @@ func testRunWithCgroupNs(ctx context.Context, t *testing.T, daemonNsMode string,
|
|||
defer d.Stop(t)
|
||||
|
||||
cID := container.Run(ctx, t, apiClient, containerOpts...)
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
daemonCgroup := d.CgroupNamespace(t)
|
||||
containerCgroup := container.GetContainerNS(ctx, t, apiClient, cID, "cgroup")
|
||||
|
@ -148,7 +145,6 @@ func TestCgroupNamespacesRunOlderClient(t *testing.T) {
|
|||
defer d.Stop(t)
|
||||
|
||||
cID := container.Run(ctx, t, apiClient)
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
daemonCgroup := d.CgroupNamespace(t)
|
||||
containerCgroup := container.GetContainerNS(ctx, t, apiClient, cID, "cgroup")
|
||||
|
|
|
@ -49,9 +49,6 @@ func TestNISDomainname(t *testing.T) {
|
|||
c.Config.Hostname = hostname
|
||||
c.Config.Domainname = domainname
|
||||
})
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
inspect, err := apiClient.ContainerInspect(ctx, cID)
|
||||
assert.NilError(t, err)
|
||||
assert.Check(t, is.Equal(hostname, inspect.Config.Hostname))
|
||||
|
@ -92,9 +89,6 @@ func TestHostnameDnsResolution(t *testing.T) {
|
|||
c.Config.Hostname = hostname
|
||||
c.HostConfig.NetworkMode = containertypes.NetworkMode(netName)
|
||||
})
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
inspect, err := apiClient.ContainerInspect(ctx, cID)
|
||||
assert.NilError(t, err)
|
||||
assert.Check(t, is.Equal(hostname, inspect.Config.Hostname))
|
||||
|
@ -118,8 +112,6 @@ func TestUnprivilegedPortsAndPing(t *testing.T) {
|
|||
c.Config.User = "1000:1000"
|
||||
})
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
// Check net.ipv4.ping_group_range.
|
||||
res, err := container.Exec(ctx, apiClient, cID, []string{"cat", "/proc/sys/net/ipv4/ping_group_range"})
|
||||
assert.NilError(t, err)
|
||||
|
@ -165,8 +157,6 @@ func TestPrivilegedHostDevices(t *testing.T) {
|
|||
|
||||
cID := container.Run(ctx, t, apiClient, container.WithPrivileged(true))
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
// Check test device.
|
||||
res, err := container.Exec(ctx, apiClient, cID, []string{"ls", devTest})
|
||||
assert.NilError(t, err)
|
||||
|
|
|
@ -5,13 +5,11 @@ import (
|
|||
"io"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/integration/internal/container"
|
||||
"gotest.tools/v3/assert"
|
||||
is "gotest.tools/v3/assert/cmp"
|
||||
"gotest.tools/v3/poll"
|
||||
"gotest.tools/v3/skip"
|
||||
)
|
||||
|
||||
|
@ -26,9 +24,6 @@ func TestStats(t *testing.T) {
|
|||
assert.NilError(t, err)
|
||||
|
||||
cID := container.Run(ctx, t, apiClient)
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
resp, err := apiClient.ContainerStats(ctx, cID, false)
|
||||
assert.NilError(t, err)
|
||||
defer resp.Body.Close()
|
||||
|
|
|
@ -88,7 +88,6 @@ func TestStopContainerWithTimeoutCancel(t *testing.T) {
|
|||
id := container.Run(ctx, t, apiClient,
|
||||
container.WithCmd("sh", "-c", "trap 'echo received TERM' TERM; while true; do usleep 10; done"),
|
||||
)
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, "running"))
|
||||
|
||||
ctxCancel, cancel := context.WithCancel(ctx)
|
||||
t.Cleanup(cancel)
|
||||
|
|
|
@ -14,7 +14,6 @@ import (
|
|||
"github.com/docker/docker/testutil/request"
|
||||
"gotest.tools/v3/assert"
|
||||
is "gotest.tools/v3/assert/cmp"
|
||||
"gotest.tools/v3/poll"
|
||||
"gotest.tools/v3/skip"
|
||||
)
|
||||
|
||||
|
@ -33,8 +32,6 @@ func TestUpdateMemory(t *testing.T) {
|
|||
}
|
||||
})
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "running"), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
const (
|
||||
setMemory int64 = 314572800
|
||||
setMemorySwap int64 = 524288000
|
||||
|
|
|
@ -86,8 +86,6 @@ func TestWaitBlocked(t *testing.T) {
|
|||
t.Parallel()
|
||||
ctx := testutil.StartSpan(ctx, t)
|
||||
containerID := container.Run(ctx, t, cli, container.WithCmd("sh", "-c", tc.cmd))
|
||||
poll.WaitOn(t, container.IsInState(ctx, cli, containerID, "running"), poll.WithTimeout(30*time.Second), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
waitResC, errC := cli.ContainerWait(ctx, containerID, "")
|
||||
|
||||
err := cli.ContainerStop(ctx, containerID, containertypes.StopOptions{})
|
||||
|
@ -214,8 +212,6 @@ func TestWaitRestartedContainer(t *testing.T) {
|
|||
)
|
||||
defer cli.ContainerRemove(ctx, containerID, types.ContainerRemoveOptions{Force: true})
|
||||
|
||||
poll.WaitOn(t, container.IsInState(ctx, cli, containerID, "running"), poll.WithTimeout(30*time.Second), poll.WithDelay(100*time.Millisecond))
|
||||
|
||||
// Container is running now, wait for exit
|
||||
waitResC, errC := cli.ContainerWait(ctx, containerID, tc.waitCond)
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@ import (
|
|||
"github.com/docker/docker/pkg/authorization"
|
||||
"github.com/docker/docker/testutil/environment"
|
||||
"gotest.tools/v3/assert"
|
||||
"gotest.tools/v3/poll"
|
||||
"gotest.tools/v3/skip"
|
||||
)
|
||||
|
||||
|
@ -227,7 +226,6 @@ func TestAuthZPluginAllowEventStream(t *testing.T) {
|
|||
|
||||
// Create a container and wait for the creation events
|
||||
cID := container.Run(ctx, t, c)
|
||||
poll.WaitOn(t, container.IsInState(ctx, c, cID, "running"))
|
||||
|
||||
created := false
|
||||
started := false
|
||||
|
|
Loading…
Add table
Reference in a new issue