Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d689a5e

Browse files
folieavieux
authored andcommitted
Add tests for rm with stop and kill options
Docker-DCO-1.1-Signed-off-by: Adrien Folie <[email protected]> (github: folieadrien)
1 parent 7810070 commit d689a5e

3 files changed

Lines changed: 90 additions & 38 deletions

File tree

api/server/server_unit_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,53 @@ func TestGetImagesByName(t *testing.T) {
451451
}
452452
}
453453

454+
func TestDeleteContainers(t *testing.T) {
455+
eng := engine.New()
456+
name := "foo"
457+
var called bool
458+
eng.Register("container_delete", func(job *engine.Job) engine.Status {
459+
called = true
460+
if len(job.Args) == 0 {
461+
t.Fatalf("Job arguments is empty")
462+
}
463+
if job.Args[0] != name {
464+
t.Fatalf("name != '%s': %#v", name, job.Args[0])
465+
}
466+
return engine.StatusOK
467+
})
468+
r := serveRequest("DELETE", "/containers/"+name, nil, eng, t)
469+
if !called {
470+
t.Fatalf("handler was not called")
471+
}
472+
if r.Code != http.StatusNoContent {
473+
t.Fatalf("Got status %d, expected %d", r.Code, http.StatusNoContent)
474+
}
475+
}
476+
477+
func TestDeleteContainersWithStopAndKill(t *testing.T) {
478+
if api.APIVERSION.LessThan("1.14") {
479+
return
480+
}
481+
eng := engine.New()
482+
var called bool
483+
eng.Register("container_delete", func(job *engine.Job) engine.Status {
484+
called = true
485+
return engine.StatusOK
486+
})
487+
r := serveRequest("DELETE", "/containers/foo?stop=1&kill=1", nil, eng, t)
488+
if r.Code != http.StatusBadRequest {
489+
t.Fatalf("Got status %d, expected %d", r.Code, http.StatusBadRequest)
490+
}
491+
if called {
492+
t.Fatalf("container_delete jobs was called, but it shouldn't")
493+
}
494+
res := strings.TrimSpace(r.Body.String())
495+
expected := "Bad parameters: can't use stop and kill simultaneously"
496+
if !strings.Contains(res, expected) {
497+
t.Fatalf("Output %s, expected %s in it", res, expected)
498+
}
499+
}
500+
454501
func serveRequest(method, target string, body io.Reader, eng *engine.Engine, t *testing.T) *httptest.ResponseRecorder {
455502
return serveRequestUsingVersion(method, target, api.APIVERSION, body, eng, t)
456503
}

integration-cli/docker_cli_rm_test.go

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,59 @@ func TestRemoveContainerWithVolume(t *testing.T) {
4242
logDone("rm - volume")
4343
}
4444

45-
func TestRemoveContainerRunning(t *testing.T) {
46-
cmd := exec.Command(dockerBinary, "run", "-dt", "--name", "foo", "busybox", "top")
47-
if _, err := runCommand(cmd); err != nil {
48-
t.Fatal(err)
49-
}
45+
func TestRemoveRunningContainer(t *testing.T) {
46+
createRunningContainer(t, "foo")
5047

5148
// Test cannot remove running container
52-
cmd = exec.Command(dockerBinary, "rm", "foo")
49+
cmd := exec.Command(dockerBinary, "rm", "foo")
5350
if _, err := runCommand(cmd); err == nil {
5451
t.Fatalf("Expected error, can't rm a running container")
5552
}
5653

57-
// Remove with -f
58-
cmd = exec.Command(dockerBinary, "rm", "-f", "foo")
54+
deleteAllContainers()
55+
56+
logDone("rm - running container")
57+
}
58+
59+
func TestStopAndRemoveRunningContainer(t *testing.T) {
60+
createRunningContainer(t, "foo")
61+
62+
// Stop then remove with -s
63+
cmd := exec.Command(dockerBinary, "rm", "-s", "foo")
5964
if _, err := runCommand(cmd); err != nil {
6065
t.Fatal(err)
6166
}
6267

6368
deleteAllContainers()
6469

65-
logDone("rm - running container")
70+
logDone("rm - running container with --stop=true")
71+
}
72+
73+
func TestKillAndRemoveRunningContainer(t *testing.T) {
74+
createRunningContainer(t, "foo")
75+
76+
// Kill then remove with -k
77+
cmd := exec.Command(dockerBinary, "rm", "-k", "foo")
78+
if _, err := runCommand(cmd); err != nil {
79+
t.Fatal(err)
80+
}
81+
82+
deleteAllContainers()
83+
84+
logDone("rm - running container with --kill=true")
85+
}
86+
87+
func TestRemoveContainerWithStopAndKill(t *testing.T) {
88+
cmd := exec.Command(dockerBinary, "rm", "-sk", "foo")
89+
if _, err := runCommand(cmd); err == nil {
90+
t.Fatalf("Expected error: can't use stop and kill simulteanously")
91+
}
92+
logDone("rm - with --stop=true and --kill=true")
93+
}
94+
95+
func createRunningContainer(t *testing.T, name string) {
96+
cmd := exec.Command(dockerBinary, "run", "-dt", "--name", name, "busybox", "top")
97+
if _, err := runCommand(cmd); err != nil {
98+
t.Fatal(err)
99+
}
66100
}

integration/api_test.go

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -768,35 +768,6 @@ func TestPostContainersAttachStderr(t *testing.T) {
768768
containerWait(eng, containerID, t)
769769
}
770770

771-
// FIXME: Test deleting running container
772-
// FIXME: Test deleting container with volume
773-
// FIXME: Test deleting volume in use by other container
774-
func TestDeleteContainers(t *testing.T) {
775-
eng := NewTestEngine(t)
776-
defer mkDaemonFromEngine(eng, t).Nuke()
777-
778-
containerID := createTestContainer(eng,
779-
&runconfig.Config{
780-
Image: unitTestImageID,
781-
Cmd: []string{"touch", "/test"},
782-
},
783-
t,
784-
)
785-
req, err := http.NewRequest("DELETE", "/containers/"+containerID, nil)
786-
if err != nil {
787-
t.Fatal(err)
788-
}
789-
r := httptest.NewRecorder()
790-
if err := server.ServeRequest(eng, api.APIVERSION, r, req); err != nil {
791-
t.Fatal(err)
792-
}
793-
assertHttpNotError(r, t)
794-
if r.Code != http.StatusNoContent {
795-
t.Fatalf("%d NO CONTENT expected, received %d\n", http.StatusNoContent, r.Code)
796-
}
797-
containerAssertNotExists(eng, containerID, t)
798-
}
799-
800771
func TestOptionsRoute(t *testing.T) {
801772
eng := NewTestEngine(t)
802773
defer mkDaemonFromEngine(eng, t).Nuke()

0 commit comments

Comments
 (0)