integration-cli/docker_cli_kill_test.go
6db32fde
 package main
 
 import (
 	"os/exec"
 	"strings"
dc944ea7
 
 	"github.com/go-check/check"
6db32fde
 )
 
dc944ea7
 func (s *DockerSuite) TestKillContainer(c *check.C) {
42d47c31
 	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top")
6db32fde
 	out, _, err := runCommandWithOutput(runCmd)
0faf8759
 	if err != nil {
dc944ea7
 		c.Fatal(out, err)
0faf8759
 	}
6db32fde
 
475c6531
 	cleanedContainerID := strings.TrimSpace(out)
a268e367
 	c.Assert(waitRun(cleanedContainerID), check.IsNil)
6db32fde
 
 	killCmd := exec.Command(dockerBinary, "kill", cleanedContainerID)
0faf8759
 	if out, _, err = runCommandWithOutput(killCmd); err != nil {
dc944ea7
 		c.Fatalf("failed to kill container: %s, %v", out, err)
0faf8759
 	}
6db32fde
 
 	listRunningContainersCmd := exec.Command(dockerBinary, "ps", "-q")
 	out, _, err = runCommandWithOutput(listRunningContainersCmd)
0faf8759
 	if err != nil {
dc944ea7
 		c.Fatalf("failed to list running containers: %s, %v", out, err)
0faf8759
 	}
6db32fde
 
 	if strings.Contains(out, cleanedContainerID) {
dc944ea7
 		c.Fatal("killed container is still running")
6db32fde
 	}
 }
eb9379c5
 
dc944ea7
 func (s *DockerSuite) TestKillDifferentUserContainer(c *check.C) {
42d47c31
 	runCmd := exec.Command(dockerBinary, "run", "-u", "daemon", "-d", "busybox", "top")
eb9379c5
 	out, _, err := runCommandWithOutput(runCmd)
0faf8759
 	if err != nil {
dc944ea7
 		c.Fatal(out, err)
0faf8759
 	}
eb9379c5
 
475c6531
 	cleanedContainerID := strings.TrimSpace(out)
a268e367
 	c.Assert(waitRun(cleanedContainerID), check.IsNil)
eb9379c5
 
 	killCmd := exec.Command(dockerBinary, "kill", cleanedContainerID)
0faf8759
 	if out, _, err = runCommandWithOutput(killCmd); err != nil {
dc944ea7
 		c.Fatalf("failed to kill container: %s, %v", out, err)
0faf8759
 	}
eb9379c5
 
 	listRunningContainersCmd := exec.Command(dockerBinary, "ps", "-q")
 	out, _, err = runCommandWithOutput(listRunningContainersCmd)
0faf8759
 	if err != nil {
dc944ea7
 		c.Fatalf("failed to list running containers: %s, %v", out, err)
0faf8759
 	}
eb9379c5
 
 	if strings.Contains(out, cleanedContainerID) {
dc944ea7
 		c.Fatal("killed container is still running")
eb9379c5
 	}
 }
db3daa7b
 
 // regression test about correct signal parsing see #13665
 func (s *DockerSuite) TestKillWithSignal(c *check.C) {
 	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top")
 	out, _, err := runCommandWithOutput(runCmd)
 	c.Assert(err, check.IsNil)
 
 	cid := strings.TrimSpace(out)
 	c.Assert(waitRun(cid), check.IsNil)
 
 	killCmd := exec.Command(dockerBinary, "kill", "-s", "SIGWINCH", cid)
 	_, err = runCommand(killCmd)
 	c.Assert(err, check.IsNil)
 
 	running, err := inspectField(cid, "State.Running")
 	if running != "true" {
 		c.Fatal("Container should be in running state after SIGWINCH")
 	}
 }
 
 func (s *DockerSuite) TestKillWithInvalidSignal(c *check.C) {
 	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top")
 	out, _, err := runCommandWithOutput(runCmd)
 	c.Assert(err, check.IsNil)
 
 	cid := strings.TrimSpace(out)
 	c.Assert(waitRun(cid), check.IsNil)
 
 	killCmd := exec.Command(dockerBinary, "kill", "-s", "0", cid)
 	out, _, err = runCommandWithOutput(killCmd)
 	c.Assert(err, check.NotNil)
 	if !strings.ContainsAny(out, "Invalid signal: 0") {
 		c.Fatal("Kill with an invalid signal didn't error out correctly")
 	}
 
 	running, err := inspectField(cid, "State.Running")
 	if running != "true" {
 		c.Fatal("Container should be in running state after an invalid signal")
 	}
 
 	runCmd = exec.Command(dockerBinary, "run", "-d", "busybox", "top")
 	out, _, err = runCommandWithOutput(runCmd)
 	c.Assert(err, check.IsNil)
 
 	cid = strings.TrimSpace(out)
 	c.Assert(waitRun(cid), check.IsNil)
 
 	killCmd = exec.Command(dockerBinary, "kill", "-s", "SIG42", cid)
 	out, _, err = runCommandWithOutput(killCmd)
 	c.Assert(err, check.NotNil)
 	if !strings.ContainsAny(out, "Invalid signal: SIG42") {
 		c.Fatal("Kill with an invalid signal error out correctly")
 	}
 
 	running, err = inspectField(cid, "State.Running")
 	if running != "true" {
 		c.Fatal("Container should be in running state after an invalid signal")
 	}
 }