github.com/containers/podman/v5@v5.1.0-rc1/test/e2e/kill_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"path/filepath"
     5  
     6  	. "github.com/containers/podman/v5/test/utils"
     7  	. "github.com/onsi/ginkgo/v2"
     8  	. "github.com/onsi/gomega"
     9  )
    10  
    11  var _ = Describe("Podman kill", func() {
    12  
    13  	It("podman kill bogus container", func() {
    14  		session := podmanTest.Podman([]string{"kill", "foobar"})
    15  		session.WaitWithDefaultTimeout()
    16  		Expect(session).To(ExitWithError(125, `no container with name or ID "foobar" found: no such container`))
    17  	})
    18  
    19  	It("podman container kill a running container by id", func() {
    20  		session := podmanTest.RunTopContainer("")
    21  		session.WaitWithDefaultTimeout()
    22  		Expect(session).Should(ExitCleanly())
    23  		cid := session.OutputToString()
    24  
    25  		result := podmanTest.Podman([]string{"container", "kill", cid})
    26  		result.WaitWithDefaultTimeout()
    27  
    28  		Expect(result).Should(ExitCleanly())
    29  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
    30  	})
    31  
    32  	It("podman container kill a running container by short id", func() {
    33  		session := podmanTest.RunTopContainer("")
    34  		session.WaitWithDefaultTimeout()
    35  		Expect(session).Should(ExitCleanly())
    36  		cid := session.OutputToString()
    37  
    38  		result := podmanTest.Podman([]string{"container", "kill", cid[:5]})
    39  		result.WaitWithDefaultTimeout()
    40  		Expect(result).Should(ExitCleanly())
    41  		Expect(result.OutputToString()).To(Equal(cid[:5]))
    42  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
    43  	})
    44  
    45  	It("podman kill a running container by id", func() {
    46  		session := podmanTest.RunTopContainer("")
    47  		session.WaitWithDefaultTimeout()
    48  		Expect(session).Should(ExitCleanly())
    49  		cid := session.OutputToString()
    50  
    51  		result := podmanTest.Podman([]string{"kill", cid})
    52  		result.WaitWithDefaultTimeout()
    53  
    54  		Expect(result).Should(ExitCleanly())
    55  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
    56  	})
    57  
    58  	It("podman kill a running container by id with TERM", func() {
    59  		session := podmanTest.RunTopContainer("")
    60  		session.WaitWithDefaultTimeout()
    61  		Expect(session).Should(ExitCleanly())
    62  		cid := session.OutputToString()
    63  
    64  		result := podmanTest.Podman([]string{"kill", "-s", "9", cid})
    65  		result.WaitWithDefaultTimeout()
    66  		Expect(result).Should(ExitCleanly())
    67  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
    68  	})
    69  
    70  	It("podman kill a running container by name", func() {
    71  		session := podmanTest.RunTopContainer("test1")
    72  		session.WaitWithDefaultTimeout()
    73  		Expect(session).Should(ExitCleanly())
    74  
    75  		result := podmanTest.Podman([]string{"kill", "-s", "9", "test1"})
    76  		result.WaitWithDefaultTimeout()
    77  		Expect(result).Should(ExitCleanly())
    78  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
    79  	})
    80  
    81  	It("podman kill a running container by id with a bogus signal", func() {
    82  		session := podmanTest.RunTopContainer("")
    83  		session.WaitWithDefaultTimeout()
    84  		Expect(session).Should(ExitCleanly())
    85  		cid := session.OutputToString()
    86  
    87  		result := podmanTest.Podman([]string{"kill", "-s", "foobar", cid})
    88  		result.WaitWithDefaultTimeout()
    89  		Expect(result).Should(ExitWithError(125, "invalid signal: foobar"))
    90  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
    91  	})
    92  
    93  	It("podman kill latest container", func() {
    94  		session := podmanTest.RunTopContainer("test1")
    95  		session.WaitWithDefaultTimeout()
    96  		Expect(session).Should(ExitCleanly())
    97  
    98  		cid := "-l"
    99  		if IsRemote() {
   100  			cid = "test1"
   101  		}
   102  		result := podmanTest.Podman([]string{"kill", cid})
   103  		result.WaitWithDefaultTimeout()
   104  		Expect(result).Should(ExitCleanly())
   105  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   106  	})
   107  
   108  	It("podman kill paused container", func() {
   109  		SkipIfRootlessCgroupsV1("pause is not supported for cgroupv1 rootless")
   110  		ctrName := "testctr"
   111  		session := podmanTest.RunTopContainer(ctrName)
   112  		session.WaitWithDefaultTimeout()
   113  		Expect(session).Should(ExitCleanly())
   114  
   115  		pause := podmanTest.Podman([]string{"pause", ctrName})
   116  		pause.WaitWithDefaultTimeout()
   117  		Expect(pause).Should(ExitCleanly())
   118  
   119  		kill := podmanTest.Podman([]string{"kill", ctrName})
   120  		kill.WaitWithDefaultTimeout()
   121  		Expect(kill).Should(ExitCleanly())
   122  
   123  		inspect := podmanTest.Podman([]string{"inspect", "-f", "{{.State.Status}}", ctrName})
   124  		inspect.WaitWithDefaultTimeout()
   125  		Expect(inspect).Should(ExitCleanly())
   126  		Expect(inspect.OutputToString()).To(Or(Equal("stopped"), Equal("exited")))
   127  	})
   128  
   129  	It("podman kill --cidfile", func() {
   130  		cidFile := filepath.Join(tempdir, "cid")
   131  
   132  		session := podmanTest.Podman([]string{"run", "-dt", "--cidfile", cidFile, ALPINE, "top"})
   133  		session.WaitWithDefaultTimeout()
   134  		Expect(session).Should(ExitCleanly())
   135  		cid := session.OutputToStringArray()[0]
   136  
   137  		kill := podmanTest.Podman([]string{"kill", "--cidfile", cidFile})
   138  		kill.WaitWithDefaultTimeout()
   139  		Expect(kill).Should(ExitCleanly())
   140  
   141  		wait := podmanTest.Podman([]string{"wait", "--condition", "exited", cid})
   142  		wait.WaitWithDefaultTimeout()
   143  		Expect(wait).Should(ExitCleanly())
   144  	})
   145  
   146  	It("podman kill multiple --cidfile", func() {
   147  		cidFile1 := filepath.Join(tempdir, "cid1")
   148  		cidFile2 := filepath.Join(tempdir, "cid2")
   149  
   150  		session := podmanTest.Podman([]string{"run", "-dt", "--cidfile", cidFile1, ALPINE, "top"})
   151  		session.WaitWithDefaultTimeout()
   152  		Expect(session).Should(ExitCleanly())
   153  		cid1 := session.OutputToStringArray()[0]
   154  
   155  		session2 := podmanTest.Podman([]string{"run", "-dt", "--cidfile", cidFile2, ALPINE, "top"})
   156  		session2.WaitWithDefaultTimeout()
   157  		Expect(session2).Should(ExitCleanly())
   158  		cid2 := session2.OutputToStringArray()[0]
   159  
   160  		kill := podmanTest.Podman([]string{"kill", "--cidfile", cidFile1, "--cidfile", cidFile2})
   161  		kill.WaitWithDefaultTimeout()
   162  		Expect(kill).Should(ExitCleanly())
   163  
   164  		wait := podmanTest.Podman([]string{"wait", "--condition", "exited", cid1})
   165  		wait.WaitWithDefaultTimeout()
   166  		Expect(wait).Should(ExitCleanly())
   167  		wait = podmanTest.Podman([]string{"wait", "--condition", "exited", cid2})
   168  		wait.WaitWithDefaultTimeout()
   169  		Expect(wait).Should(ExitCleanly())
   170  	})
   171  
   172  	It("podman kill --all", func() {
   173  		session := podmanTest.RunTopContainer("")
   174  		session.WaitWithDefaultTimeout()
   175  		Expect(session).Should(ExitCleanly())
   176  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
   177  
   178  		session = podmanTest.RunTopContainer("")
   179  		session.WaitWithDefaultTimeout()
   180  		Expect(session).Should(ExitCleanly())
   181  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
   182  
   183  		session = podmanTest.Podman([]string{"kill", "--all"})
   184  		session.WaitWithDefaultTimeout()
   185  		Expect(session).Should(ExitCleanly())
   186  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
   187  	})
   188  })