github.com/ncdc/docker@v0.10.1-0.20160129113957-6c6729ef5b74/integration-cli/docker_cli_kill_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net/http" 6 "strings" 7 8 "github.com/docker/docker/pkg/integration/checker" 9 "github.com/go-check/check" 10 ) 11 12 func (s *DockerSuite) TestKillContainer(c *check.C) { 13 testRequires(c, DaemonIsLinux) 14 out, _ := dockerCmd(c, "run", "-d", "busybox", "top") 15 cleanedContainerID := strings.TrimSpace(out) 16 c.Assert(waitRun(cleanedContainerID), check.IsNil) 17 18 dockerCmd(c, "kill", cleanedContainerID) 19 20 out, _ = dockerCmd(c, "ps", "-q") 21 c.Assert(out, checker.Not(checker.Contains), cleanedContainerID, check.Commentf("killed container is still running")) 22 23 } 24 25 func (s *DockerSuite) TestKillofStoppedContainer(c *check.C) { 26 testRequires(c, DaemonIsLinux) 27 out, _ := dockerCmd(c, "run", "-d", "busybox", "top") 28 cleanedContainerID := strings.TrimSpace(out) 29 30 dockerCmd(c, "stop", cleanedContainerID) 31 32 _, _, err := dockerCmdWithError("kill", "-s", "30", cleanedContainerID) 33 c.Assert(err, check.Not(check.IsNil), check.Commentf("Container %s is not running", cleanedContainerID)) 34 } 35 36 func (s *DockerSuite) TestKillDifferentUserContainer(c *check.C) { 37 testRequires(c, DaemonIsLinux) 38 out, _ := dockerCmd(c, "run", "-u", "daemon", "-d", "busybox", "top") 39 cleanedContainerID := strings.TrimSpace(out) 40 c.Assert(waitRun(cleanedContainerID), check.IsNil) 41 42 dockerCmd(c, "kill", cleanedContainerID) 43 44 out, _ = dockerCmd(c, "ps", "-q") 45 c.Assert(out, checker.Not(checker.Contains), cleanedContainerID, check.Commentf("killed container is still running")) 46 47 } 48 49 // regression test about correct signal parsing see #13665 50 func (s *DockerSuite) TestKillWithSignal(c *check.C) { 51 testRequires(c, DaemonIsLinux) 52 out, _ := dockerCmd(c, "run", "-d", "busybox", "top") 53 cid := strings.TrimSpace(out) 54 c.Assert(waitRun(cid), check.IsNil) 55 56 dockerCmd(c, "kill", "-s", "SIGWINCH", cid) 57 58 running, _ := inspectField(cid, "State.Running") 59 60 c.Assert(running, checker.Equals, "true", check.Commentf("Container should be in running state after SIGWINCH")) 61 } 62 63 func (s *DockerSuite) TestKillWithInvalidSignal(c *check.C) { 64 testRequires(c, DaemonIsLinux) 65 out, _ := dockerCmd(c, "run", "-d", "busybox", "top") 66 cid := strings.TrimSpace(out) 67 c.Assert(waitRun(cid), check.IsNil) 68 69 out, _, err := dockerCmdWithError("kill", "-s", "0", cid) 70 c.Assert(err, check.NotNil) 71 c.Assert(out, checker.Contains, "Invalid signal: 0", check.Commentf("Kill with an invalid signal didn't error out correctly")) 72 73 running, _ := inspectField(cid, "State.Running") 74 c.Assert(running, checker.Equals, "true", check.Commentf("Container should be in running state after an invalid signal")) 75 76 out, _ = dockerCmd(c, "run", "-d", "busybox", "top") 77 cid = strings.TrimSpace(out) 78 c.Assert(waitRun(cid), check.IsNil) 79 80 out, _, err = dockerCmdWithError("kill", "-s", "SIG42", cid) 81 c.Assert(err, check.NotNil) 82 c.Assert(out, checker.Contains, "Invalid signal: SIG42", check.Commentf("Kill with an invalid signal error out correctly")) 83 84 running, _ = inspectField(cid, "State.Running") 85 c.Assert(running, checker.Equals, "true", check.Commentf("Container should be in running state after an invalid signal")) 86 87 } 88 89 func (s *DockerSuite) TestKillStoppedContainerAPIPre120(c *check.C) { 90 testRequires(c, DaemonIsLinux) 91 dockerCmd(c, "run", "--name", "docker-kill-test-api", "-d", "busybox", "top") 92 dockerCmd(c, "stop", "docker-kill-test-api") 93 94 status, _, err := sockRequest("POST", fmt.Sprintf("/v1.19/containers/%s/kill", "docker-kill-test-api"), nil) 95 c.Assert(err, check.IsNil) 96 c.Assert(status, check.Equals, http.StatusNoContent) 97 }