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

     1  package integration
     2  
     3  import (
     4  	"syscall"
     5  	"time"
     6  
     7  	. "github.com/containers/podman/v5/test/utils"
     8  	. "github.com/onsi/ginkgo/v2"
     9  	. "github.com/onsi/gomega"
    10  )
    11  
    12  var _ = Describe("Podman attach", func() {
    13  
    14  	It("podman attach to bogus container", func() {
    15  		session := podmanTest.Podman([]string{"attach", "foobar"})
    16  		session.WaitWithDefaultTimeout()
    17  		Expect(session).Should(ExitWithError(125, `no container with name or ID "foobar" found: no such container`))
    18  	})
    19  
    20  	It("podman attach to non-running container", func() {
    21  		session := podmanTest.Podman([]string{"create", "--name", "test1", "-i", CITEST_IMAGE, "ls"})
    22  		session.WaitWithDefaultTimeout()
    23  		Expect(session).Should(ExitCleanly())
    24  
    25  		results := podmanTest.Podman([]string{"attach", "test1"})
    26  		results.WaitWithDefaultTimeout()
    27  		Expect(results).Should(ExitWithError(125, "you can only attach to running containers"))
    28  	})
    29  
    30  	It("podman container attach to non-running container", func() {
    31  		session := podmanTest.Podman([]string{"container", "create", "--name", "test1", "-i", CITEST_IMAGE, "ls"})
    32  
    33  		session.WaitWithDefaultTimeout()
    34  		Expect(session).Should(ExitCleanly())
    35  
    36  		results := podmanTest.Podman([]string{"container", "attach", "test1"})
    37  		results.WaitWithDefaultTimeout()
    38  		Expect(results).Should(ExitWithError(125, "you can only attach to running containers"))
    39  	})
    40  
    41  	It("podman attach to multiple containers", func() {
    42  		session := podmanTest.RunTopContainer("test1")
    43  		session.WaitWithDefaultTimeout()
    44  		Expect(session).Should(ExitCleanly())
    45  
    46  		session = podmanTest.RunTopContainer("test2")
    47  		session.WaitWithDefaultTimeout()
    48  		Expect(session).Should(ExitCleanly())
    49  
    50  		results := podmanTest.Podman([]string{"attach", "test1", "test2"})
    51  		results.WaitWithDefaultTimeout()
    52  		Expect(results).Should(ExitWithError(125, " attach` accepts at most one argument"))
    53  	})
    54  
    55  	It("podman attach to a running container", func() {
    56  		session := podmanTest.Podman([]string{"run", "-d", "--name", "test", CITEST_IMAGE, "/bin/sh", "-c", "while true; do echo test; sleep 1; done"})
    57  		session.WaitWithDefaultTimeout()
    58  		Expect(session).Should(ExitCleanly())
    59  
    60  		results := podmanTest.Podman([]string{"attach", "test"})
    61  		time.Sleep(2 * time.Second)
    62  		results.Signal(syscall.SIGTSTP)
    63  		Expect(results.OutputToString()).To(ContainSubstring("test"))
    64  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
    65  	})
    66  
    67  	It("podman attach to the latest container", func() {
    68  		session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", CITEST_IMAGE, "/bin/sh", "-c", "while true; do echo test1; sleep 1; done"})
    69  		session.WaitWithDefaultTimeout()
    70  		Expect(session).Should(ExitCleanly())
    71  
    72  		session = podmanTest.Podman([]string{"run", "-d", "--name", "test2", CITEST_IMAGE, "/bin/sh", "-c", "while true; do echo test2; sleep 1; done"})
    73  		session.WaitWithDefaultTimeout()
    74  		Expect(session).Should(ExitCleanly())
    75  
    76  		cid := "-l"
    77  		if IsRemote() {
    78  			cid = "test2"
    79  		}
    80  		results := podmanTest.Podman([]string{"attach", cid})
    81  		time.Sleep(2 * time.Second)
    82  		results.Signal(syscall.SIGTSTP)
    83  		Expect(results.OutputToString()).To(ContainSubstring("test2"))
    84  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
    85  	})
    86  
    87  	It("podman attach to a container with --sig-proxy set to false", func() {
    88  		session := podmanTest.Podman([]string{"run", "-d", "--name", "test", CITEST_IMAGE, "/bin/sh", "-c", "while true; do echo test; sleep 1; done"})
    89  		session.WaitWithDefaultTimeout()
    90  		Expect(session).Should(ExitCleanly())
    91  
    92  		results := podmanTest.Podman([]string{"attach", "--sig-proxy=false", "test"})
    93  		time.Sleep(2 * time.Second)
    94  		results.Signal(syscall.SIGTERM)
    95  		results.WaitWithDefaultTimeout()
    96  		Expect(results.OutputToString()).To(ContainSubstring("test"))
    97  		Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
    98  	})
    99  })