aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--integration/container/wait_test.go66
1 files changed, 43 insertions, 23 deletions
diff --git a/integration/container/wait_test.go b/integration/container/wait_test.go
index 12a9313caa..f8e64f0458 100644
--- a/integration/container/wait_test.go
+++ b/integration/container/wait_test.go
@@ -108,28 +108,25 @@ func TestWaitConditions(t *testing.T) {
cli := request.NewAPIClient(t)
testCases := []struct {
- doc string
- waitCond containertypes.WaitCondition
- expectedCode int64
+ doc string
+ waitCond containertypes.WaitCondition
+ runOpts []func(*container.TestContainerConfig)
}{
{
- doc: "default",
- expectedCode: 99,
+ doc: "default",
},
{
- doc: "not-running",
- expectedCode: 99,
- waitCond: containertypes.WaitConditionNotRunning,
+ doc: "not-running",
+ waitCond: containertypes.WaitConditionNotRunning,
},
{
- doc: "next-exit",
- expectedCode: 99,
- waitCond: containertypes.WaitConditionNextExit,
+ doc: "next-exit",
+ waitCond: containertypes.WaitConditionNextExit,
},
{
- doc: "removed",
- expectedCode: 99,
- waitCond: containertypes.WaitConditionRemoved,
+ doc: "removed",
+ waitCond: containertypes.WaitConditionRemoved,
+ runOpts: []func(*container.TestContainerConfig){container.WithAutoRemove},
},
}
@@ -138,21 +135,44 @@ func TestWaitConditions(t *testing.T) {
t.Run(tc.doc, func(t *testing.T) {
t.Parallel()
ctx := context.Background()
- opts := []func(*container.TestContainerConfig){
- container.WithCmd("sh", "-c", "sleep 1; exit 99"),
- }
- if tc.waitCond == containertypes.WaitConditionRemoved {
- opts = append(opts, container.WithAutoRemove)
- }
- containerID := container.Run(ctx, t, cli, opts...)
- poll.WaitOn(t, container.IsInState(ctx, cli, containerID, "running"), poll.WithTimeout(30*time.Second), poll.WithDelay(100*time.Millisecond))
+ opts := append([]func(*container.TestContainerConfig){
+ container.WithCmd("sh", "-c", "read -r; exit 99"),
+ func(tcc *container.TestContainerConfig) {
+ tcc.Config.AttachStdin = true
+ tcc.Config.OpenStdin = true
+ },
+ }, tc.runOpts...)
+ containerID := container.Create(ctx, t, cli, opts...)
+ t.Logf("ContainerID = %v", containerID)
+
+ streams, err := cli.ContainerAttach(ctx, containerID, types.ContainerAttachOptions{Stream: true, Stdin: true})
+ assert.NilError(t, err)
+ defer streams.Close()
+ assert.NilError(t, cli.ContainerStart(ctx, containerID, types.ContainerStartOptions{}))
waitResC, errC := cli.ContainerWait(ctx, containerID, tc.waitCond)
select {
case err := <-errC:
+ t.Fatalf("ContainerWait() err = %v", err)
+ case res := <-waitResC:
+ t.Fatalf("ContainerWait() sent exit code (%v) before ContainerStart()", res)
+ default:
+ }
+
+ info, _ := cli.ContainerInspect(ctx, containerID)
+ assert.Equal(t, "running", info.State.Status)
+
+ _, err = streams.Conn.Write([]byte("\n"))
+ assert.NilError(t, err)
+
+ select {
+ case err := <-errC:
assert.NilError(t, err)
case waitRes := <-waitResC:
- assert.Check(t, is.Equal(tc.expectedCode, waitRes.StatusCode))
+ assert.Check(t, is.Equal(int64(99), waitRes.StatusCode))
+ case <-time.After(15 * time.Second):
+ info, _ := cli.ContainerInspect(ctx, containerID)
+ t.Fatalf("Timed out waiting for container exit code (status = %q)", info.State.Status)
}
})
}