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