github.com/willmtemple/docker@v1.7.0-rc2/integration-cli/docker_cli_kill_test.go (about)

     1  package main
     2  
     3  import (
     4  	"os/exec"
     5  	"strings"
     6  
     7  	"github.com/go-check/check"
     8  )
     9  
    10  func (s *DockerSuite) TestKillContainer(c *check.C) {
    11  	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top")
    12  	out, _, err := runCommandWithOutput(runCmd)
    13  	if err != nil {
    14  		c.Fatal(out, err)
    15  	}
    16  
    17  	cleanedContainerID := strings.TrimSpace(out)
    18  	c.Assert(waitRun(cleanedContainerID), check.IsNil)
    19  
    20  	killCmd := exec.Command(dockerBinary, "kill", cleanedContainerID)
    21  	if out, _, err = runCommandWithOutput(killCmd); err != nil {
    22  		c.Fatalf("failed to kill container: %s, %v", out, err)
    23  	}
    24  
    25  	listRunningContainersCmd := exec.Command(dockerBinary, "ps", "-q")
    26  	out, _, err = runCommandWithOutput(listRunningContainersCmd)
    27  	if err != nil {
    28  		c.Fatalf("failed to list running containers: %s, %v", out, err)
    29  	}
    30  
    31  	if strings.Contains(out, cleanedContainerID) {
    32  		c.Fatal("killed container is still running")
    33  	}
    34  }
    35  
    36  func (s *DockerSuite) TestKillDifferentUserContainer(c *check.C) {
    37  	runCmd := exec.Command(dockerBinary, "run", "-u", "daemon", "-d", "busybox", "top")
    38  	out, _, err := runCommandWithOutput(runCmd)
    39  	if err != nil {
    40  		c.Fatal(out, err)
    41  	}
    42  
    43  	cleanedContainerID := strings.TrimSpace(out)
    44  	c.Assert(waitRun(cleanedContainerID), check.IsNil)
    45  
    46  	killCmd := exec.Command(dockerBinary, "kill", cleanedContainerID)
    47  	if out, _, err = runCommandWithOutput(killCmd); err != nil {
    48  		c.Fatalf("failed to kill container: %s, %v", out, err)
    49  	}
    50  
    51  	listRunningContainersCmd := exec.Command(dockerBinary, "ps", "-q")
    52  	out, _, err = runCommandWithOutput(listRunningContainersCmd)
    53  	if err != nil {
    54  		c.Fatalf("failed to list running containers: %s, %v", out, err)
    55  	}
    56  
    57  	if strings.Contains(out, cleanedContainerID) {
    58  		c.Fatal("killed container is still running")
    59  	}
    60  }
    61  
    62  // regression test about correct signal parsing see #13665
    63  func (s *DockerSuite) TestKillWithSignal(c *check.C) {
    64  	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top")
    65  	out, _, err := runCommandWithOutput(runCmd)
    66  	c.Assert(err, check.IsNil)
    67  
    68  	cid := strings.TrimSpace(out)
    69  	c.Assert(waitRun(cid), check.IsNil)
    70  
    71  	killCmd := exec.Command(dockerBinary, "kill", "-s", "SIGWINCH", cid)
    72  	_, err = runCommand(killCmd)
    73  	c.Assert(err, check.IsNil)
    74  
    75  	running, err := inspectField(cid, "State.Running")
    76  	if running != "true" {
    77  		c.Fatal("Container should be in running state after SIGWINCH")
    78  	}
    79  }
    80  
    81  func (s *DockerSuite) TestKillWithInvalidSignal(c *check.C) {
    82  	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top")
    83  	out, _, err := runCommandWithOutput(runCmd)
    84  	c.Assert(err, check.IsNil)
    85  
    86  	cid := strings.TrimSpace(out)
    87  	c.Assert(waitRun(cid), check.IsNil)
    88  
    89  	killCmd := exec.Command(dockerBinary, "kill", "-s", "0", cid)
    90  	out, _, err = runCommandWithOutput(killCmd)
    91  	c.Assert(err, check.NotNil)
    92  	if !strings.ContainsAny(out, "Invalid signal: 0") {
    93  		c.Fatal("Kill with an invalid signal didn't error out correctly")
    94  	}
    95  
    96  	running, err := inspectField(cid, "State.Running")
    97  	if running != "true" {
    98  		c.Fatal("Container should be in running state after an invalid signal")
    99  	}
   100  
   101  	runCmd = exec.Command(dockerBinary, "run", "-d", "busybox", "top")
   102  	out, _, err = runCommandWithOutput(runCmd)
   103  	c.Assert(err, check.IsNil)
   104  
   105  	cid = strings.TrimSpace(out)
   106  	c.Assert(waitRun(cid), check.IsNil)
   107  
   108  	killCmd = exec.Command(dockerBinary, "kill", "-s", "SIG42", cid)
   109  	out, _, err = runCommandWithOutput(killCmd)
   110  	c.Assert(err, check.NotNil)
   111  	if !strings.ContainsAny(out, "Invalid signal: SIG42") {
   112  		c.Fatal("Kill with an invalid signal error out correctly")
   113  	}
   114  
   115  	running, err = inspectField(cid, "State.Running")
   116  	if running != "true" {
   117  		c.Fatal("Container should be in running state after an invalid signal")
   118  	}
   119  }