mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
api: POST /containers/{id}/wait: fix validation for "condition" parameter
commit 737e8c6ab8
added validation for the wait
condition parameter, however, the default ("not-running") option was not part
of the list of valid options, resulting in a regression if the default value
was explicitly passed;
docker scan --accept-license --version
Error response from daemon: invalid condition: "not-running"
This patch adds the missing option, and adds a test to verify.
With this patch;
make BIND_DIR=. DOCKER_GRAPHDRIVER=vfs TEST_FILTER=TestWaitConditions test-integration
...
--- PASS: TestWaitConditions (0.04s)
--- PASS: TestWaitConditions/removed (1.79s)
--- PASS: TestWaitConditions/default (1.91s)
--- PASS: TestWaitConditions/next-exit (1.97s)
--- PASS: TestWaitConditions/not-running (1.99s)
PASS
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
4eb1c5bd52
commit
0bce64f08d
2 changed files with 57 additions and 0 deletions
|
@ -346,6 +346,8 @@ func (s *containerRouter) postContainersWait(ctx context.Context, w http.Respons
|
|||
}
|
||||
if v := r.Form.Get("condition"); v != "" {
|
||||
switch container.WaitCondition(v) {
|
||||
case container.WaitConditionNotRunning:
|
||||
waitCondition = containerpkg.WaitConditionNotRunning
|
||||
case container.WaitConditionNextExit:
|
||||
waitCondition = containerpkg.WaitConditionNextExit
|
||||
case container.WaitConditionRemoved:
|
||||
|
|
|
@ -101,3 +101,58 @@ func TestWaitBlocked(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestWaitConditions(t *testing.T) {
|
||||
defer setupTest(t)()
|
||||
cli := request.NewAPIClient(t)
|
||||
|
||||
testCases := []struct {
|
||||
doc string
|
||||
waitCond containertypes.WaitCondition
|
||||
expectedCode int64
|
||||
}{
|
||||
{
|
||||
doc: "default",
|
||||
expectedCode: 99,
|
||||
},
|
||||
{
|
||||
doc: "not-running",
|
||||
expectedCode: 99,
|
||||
waitCond: containertypes.WaitConditionNotRunning,
|
||||
},
|
||||
{
|
||||
doc: "next-exit",
|
||||
expectedCode: 99,
|
||||
waitCond: containertypes.WaitConditionNextExit,
|
||||
},
|
||||
{
|
||||
doc: "removed",
|
||||
expectedCode: 99,
|
||||
waitCond: containertypes.WaitConditionRemoved,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
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))
|
||||
|
||||
waitResC, errC := cli.ContainerWait(ctx, containerID, tc.waitCond)
|
||||
select {
|
||||
case err := <-errC:
|
||||
assert.NilError(t, err)
|
||||
case waitRes := <-waitResC:
|
||||
assert.Check(t, is.Equal(tc.expectedCode, waitRes.StatusCode))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue