Merge pull request #13666 from runcom/13665-kill-signal-wrong-handled

Fix wrong kill signal parsing
This commit is contained in:
Arnaud Porterie
2015-06-02 09:40:55 -07:00
2 changed files with 68 additions and 3 deletions
+59
View File
@@ -58,3 +58,62 @@ func (s *DockerSuite) TestKillDifferentUserContainer(c *check.C) {
c.Fatal("killed container is still running")
}
}
// 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")
}
}