docker_cli_kill_test.go 3.3 KB

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