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