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 })