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