use container.ContainerState consts in tests

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn
2025-05-13 13:46:55 +02:00
parent b811829595
commit 3bbdda696d
15 changed files with 36 additions and 33 deletions

View File

@@ -1981,8 +1981,10 @@ func containerExit(ctx context.Context, apiclient client.APIClient, name string)
return poll.Error(err)
}
switch ctr.State.Status {
case "created", "running":
case container.StateCreated, container.StateRunning:
return poll.Continue("container %s is %s, waiting for exit", name, ctr.State.Status)
case container.StatePaused, container.StateRestarting, container.StateRemoving, container.StateExited, container.StateDead:
// done
}
return poll.Success()
}

View File

@@ -79,7 +79,7 @@ func TestNoNewPrivileges(t *testing.T) {
container.WithSecurityOpt("no-new-privileges=true"),
)
cid := container.Run(ctx, t, client, opts...)
poll.WaitOn(t, container.IsInState(ctx, client, cid, "exited"))
poll.WaitOn(t, container.IsInState(ctx, client, cid, containertypes.StateExited))
// Assert on outputs
logReader, err := client.ContainerLogs(ctx, cid, containertypes.LogsOptions{

View File

@@ -104,7 +104,7 @@ func TestCheckpoint(t *testing.T) {
})
assert.NilError(t, err)
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited))
inspect, err = apiClient.ContainerInspect(ctx, cID)
assert.NilError(t, err)

View File

@@ -339,7 +339,7 @@ func TestCreateWithCustomMaskedPaths(t *testing.T) {
err = apiClient.ContainerStart(ctx, c.ID, container.StartOptions{})
assert.NilError(t, err)
poll.WaitOn(t, testContainer.IsInState(ctx, apiClient, c.ID, "exited"))
poll.WaitOn(t, testContainer.IsInState(ctx, apiClient, c.ID, container.StateExited))
checkInspect(t, ctx, name, tc.expected)
}
@@ -417,7 +417,7 @@ func TestCreateWithCustomReadonlyPaths(t *testing.T) {
err = apiClient.ContainerStart(ctx, c.ID, container.StartOptions{})
assert.NilError(t, err)
poll.WaitOn(t, testContainer.IsInState(ctx, apiClient, c.ID, "exited"))
poll.WaitOn(t, testContainer.IsInState(ctx, apiClient, c.ID, container.StateExited))
checkInspect(t, ctx, name, tc.expected)
}

View File

@@ -269,7 +269,7 @@ func TestHardRestartWhenContainerIsRunning(t *testing.T) {
defer cancel()
inspect, err := apiClient.ContainerInspect(ctx, noPolicy)
assert.NilError(t, err)
assert.Check(t, is.Equal(inspect.State.Status, "exited"))
assert.Check(t, is.Equal(inspect.State.Status, containertypes.StateExited))
assert.Check(t, is.Equal(inspect.State.ExitCode, 255))
finishedAt, err := time.Parse(time.RFC3339Nano, inspect.State.FinishedAt)
if assert.Check(t, err) {
@@ -283,7 +283,7 @@ func TestHardRestartWhenContainerIsRunning(t *testing.T) {
defer cancel()
inspect, err := apiClient.ContainerInspect(ctx, onFailure)
assert.NilError(t, err)
assert.Check(t, is.Equal(inspect.State.Status, "running"))
assert.Check(t, is.Equal(inspect.State.Status, containertypes.StateRunning))
assert.Check(t, is.Equal(inspect.State.ExitCode, 0))
finishedAt, err := time.Parse(time.RFC3339Nano, inspect.State.FinishedAt)
if assert.Check(t, err) {

View File

@@ -38,7 +38,7 @@ func TestDiffStoppedContainer(t *testing.T) {
cID := container.Run(ctx, t, apiClient, container.WithCmd("sh", "-c", `mkdir /foo; echo xyzzy > /foo/bar`))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"), poll.WithTimeout(60*time.Second))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited), poll.WithTimeout(60*time.Second))
expected := []containertypes.FilesystemChange{
{Kind: containertypes.ChangeAdd, Path: "/foo"},

View File

@@ -22,12 +22,12 @@ func TestKillContainerInvalidSignal(t *testing.T) {
err := apiClient.ContainerKill(ctx, id, "0")
assert.ErrorContains(t, err, "Error response from daemon:")
assert.ErrorContains(t, err, "nvalid signal: 0") // match "(I|i)nvalid" case-insensitive to allow testing against older daemons.
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, "running"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, containertypes.StateRunning))
err = apiClient.ContainerKill(ctx, id, "SIG42")
assert.ErrorContains(t, err, "Error response from daemon:")
assert.ErrorContains(t, err, "nvalid signal: SIG42") // match "(I|i)nvalid" case-insensitive to allow testing against older daemons.
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, "running"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, containertypes.StateRunning))
}
func TestKillContainer(t *testing.T) {
@@ -37,25 +37,25 @@ func TestKillContainer(t *testing.T) {
testCases := []struct {
doc string
signal string
status string
status containertypes.ContainerState
skipOs string
}{
{
doc: "no signal",
signal: "",
status: "exited",
status: containertypes.StateExited,
skipOs: "",
},
{
doc: "non killing signal",
signal: "SIGWINCH",
status: "running",
status: containertypes.StateRunning,
skipOs: "windows",
},
{
doc: "killing signal",
signal: "SIGTERM",
status: "exited",
status: containertypes.StateExited,
skipOs: "",
},
}
@@ -142,7 +142,7 @@ func TestKillDifferentUserContainer(t *testing.T) {
err := apiClient.ContainerKill(ctx, id, "SIGKILL")
assert.NilError(t, err)
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, "exited"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, id, containertypes.StateExited))
}
func TestInspectOomKilledTrue(t *testing.T) {
@@ -158,7 +158,7 @@ func TestInspectOomKilledTrue(t *testing.T) {
c.HostConfig.Resources.Memory = 32 * 1024 * 1024
})
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited))
inspect, err := apiClient.ContainerInspect(ctx, cID)
assert.NilError(t, err)
@@ -173,7 +173,7 @@ func TestInspectOomKilledFalse(t *testing.T) {
cID := container.Run(ctx, t, apiClient, container.WithCmd("sh", "-c", "echo hello world"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited))
inspect, err := apiClient.ContainerInspect(ctx, cID)
assert.NilError(t, err)

View File

@@ -35,7 +35,7 @@ func TestRemoveContainerWithRemovedVolume(t *testing.T) {
tempDir := fs.NewDir(t, "test-rm-container-with-removed-volume", fs.WithMode(0o755))
cID := container.Run(ctx, t, apiClient, container.WithCmd("true"), container.WithBind(tempDir.Path(), prefix+slash+"test"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited))
err := os.RemoveAll(tempDir.Path())
assert.NilError(t, err)
@@ -58,7 +58,7 @@ func TestRemoveContainerWithVolume(t *testing.T) {
prefix, slash := getPrefixAndSlashFromDaemonPlatform()
cID := container.Run(ctx, t, apiClient, container.WithCmd("true"), container.WithVolume(prefix+slash+"srv"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited))
insp, _, err := apiClient.ContainerInspectWithRaw(ctx, cID, true)
assert.NilError(t, err)

View File

@@ -144,7 +144,7 @@ func TestRenameAnonymousContainer(t *testing.T) {
}
c.HostConfig.NetworkMode = containertypes.NetworkMode(networkName)
}, container.WithCmd("ping", count, "1", container1Name))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited))
inspect, err := apiClient.ContainerInspect(ctx, cID)
assert.NilError(t, err)

View File

@@ -202,9 +202,9 @@ func TestContainerWithAutoRemoveCanBeRestarted(t *testing.T) {
inspect, err := apiClient.ContainerInspect(ctx, cID)
assert.NilError(t, err)
assert.Assert(t, inspect.State.Status != "removing", "Container should not be removing yet")
assert.Assert(t, inspect.State.Status != container.StateRemoving, "Container should not be removing yet")
poll.WaitOn(t, testContainer.IsInState(ctx, apiClient, cID, "running"))
poll.WaitOn(t, testContainer.IsInState(ctx, apiClient, cID, container.StateRunning))
err = tc.doSth(ctx, cID)
assert.NilError(t, err)
@@ -281,5 +281,5 @@ func TestContainerRestartWithCancelledRequest(t *testing.T) {
// Container should be restarted (running).
inspect, err := apiClient.ContainerInspect(ctx, cID)
assert.NilError(t, err)
assert.Check(t, is.Equal(inspect.State.Status, "running"))
assert.Check(t, is.Equal(inspect.State.Status, container.StateRunning))
}

View File

@@ -29,7 +29,7 @@ func TestStopContainerWithRestartPolicyAlways(t *testing.T) {
}
for _, name := range names {
poll.WaitOn(t, container.IsInState(ctx, apiClient, name, "running", "restarting"))
poll.WaitOn(t, container.IsInState(ctx, apiClient, name, containertypes.StateRunning, containertypes.StateRestarting))
}
for _, name := range names {

View File

@@ -36,7 +36,7 @@ func TestUpdateRestartPolicy(t *testing.T) {
timeout = 180 * time.Second
}
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"), poll.WithTimeout(timeout))
poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, containertypes.StateExited), poll.WithTimeout(timeout))
inspect, err := apiClient.ContainerInspect(ctx, cID)
assert.NilError(t, err)

View File

@@ -42,7 +42,7 @@ func TestWaitNonBlocked(t *testing.T) {
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, "exited"), poll.WithTimeout(30*time.Second))
poll.WaitOn(t, container.IsInState(ctx, cli, containerID, containertypes.StateExited), poll.WithTimeout(30*time.Second))
waitResC, errC := cli.ContainerWait(ctx, containerID, "")
select {
@@ -158,7 +158,7 @@ func TestWaitConditions(t *testing.T) {
}
info, _ := cli.ContainerInspect(ctx, containerID)
assert.Equal(t, "running", info.State.Status)
assert.Equal(t, info.State.Status, containertypes.StateRunning)
_, err = streams.Conn.Write([]byte("\n"))
assert.NilError(t, err)
@@ -169,8 +169,8 @@ func TestWaitConditions(t *testing.T) {
case waitRes := <-waitResC:
assert.Check(t, is.Equal(int64(99), waitRes.StatusCode))
case <-time.After(StopContainerWindowsPollTimeout):
info, _ := cli.ContainerInspect(ctx, containerID)
t.Fatalf("Timed out waiting for container exit code (status = %q)", info.State.Status)
ctr, _ := cli.ContainerInspect(ctx, containerID)
t.Fatalf("Timed out waiting for container exit code (status = %q)", ctr.State.Status)
}
})
}

View File

@@ -4,6 +4,7 @@ import (
"context"
"strings"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
"github.com/docker/docker/errdefs"
"github.com/pkg/errors"
@@ -32,7 +33,7 @@ func IsStopped(ctx context.Context, apiClient client.APIClient, containerID stri
}
// IsInState verifies the container is in one of the specified state, e.g., "running", "exited", etc.
func IsInState(ctx context.Context, apiClient client.APIClient, containerID string, state ...string) func(log poll.LogT) poll.Result {
func IsInState(ctx context.Context, apiClient client.APIClient, containerID string, state ...container.ContainerState) func(log poll.LogT) poll.Result {
return func(log poll.LogT) poll.Result {
inspect, err := apiClient.ContainerInspect(ctx, containerID)
if err != nil {
@@ -58,13 +59,13 @@ func IsSuccessful(ctx context.Context, apiClient client.APIClient, containerID s
if err != nil {
return poll.Error(err)
}
if inspect.State.Status == "exited" {
if inspect.State.Status == container.StateExited {
if inspect.State.ExitCode == 0 {
return poll.Success()
}
return poll.Error(errors.Errorf("expected exit code 0, got %d", inspect.State.ExitCode))
}
return poll.Continue("waiting for container to be \"exited\", currently %s", inspect.State.Status)
return poll.Continue("waiting for container to be %q, currently %s", container.StateExited, inspect.State.Status)
}
}

View File

@@ -520,7 +520,7 @@ func TestPublishedPortAlreadyInUse(t *testing.T) {
inspect, err := apiClient.ContainerInspect(ctx, ctr2)
assert.NilError(t, err)
assert.Check(t, is.Equal(inspect.State.Status, "created"))
assert.Check(t, is.Equal(inspect.State.Status, containertypes.StateCreated))
}
// TestAllPortMappingsAreReturned check that dual-stack ports mapped through