github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/pod_top_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 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 top", 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 37 It("podman pod top without pod name or id", func() { 38 result := podmanTest.Podman([]string{"pod", "top"}) 39 result.WaitWithDefaultTimeout() 40 Expect(result.ExitCode()).To(Equal(125)) 41 }) 42 43 It("podman pod top on bogus pod", func() { 44 result := podmanTest.Podman([]string{"pod", "top", "1234"}) 45 result.WaitWithDefaultTimeout() 46 Expect(result.ExitCode()).To(Equal(125)) 47 }) 48 49 It("podman pod top on non-running pod", func() { 50 _, ec, podid := podmanTest.CreatePod("") 51 Expect(ec).To(Equal(0)) 52 53 result := podmanTest.Podman([]string{"top", podid}) 54 result.WaitWithDefaultTimeout() 55 Expect(result.ExitCode()).To(Equal(125)) 56 }) 57 58 It("podman pod top on pod", func() { 59 _, ec, podid := podmanTest.CreatePod("") 60 Expect(ec).To(Equal(0)) 61 62 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 63 session.WaitWithDefaultTimeout() 64 Expect(session.ExitCode()).To(Equal(0)) 65 66 if !IsRemote() { 67 podid = "-l" 68 } 69 result := podmanTest.Podman([]string{"pod", "top", podid}) 70 result.WaitWithDefaultTimeout() 71 Expect(result.ExitCode()).To(Equal(0)) 72 Expect(len(result.OutputToStringArray())).To(BeNumerically(">", 1)) 73 }) 74 75 It("podman pod top with options", func() { 76 _, ec, podid := podmanTest.CreatePod("") 77 Expect(ec).To(Equal(0)) 78 79 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 80 session.WaitWithDefaultTimeout() 81 Expect(session.ExitCode()).To(Equal(0)) 82 83 result := podmanTest.Podman([]string{"pod", "top", podid, "pid", "%C", "args"}) 84 result.WaitWithDefaultTimeout() 85 Expect(result.ExitCode()).To(Equal(0)) 86 Expect(len(result.OutputToStringArray())).To(BeNumerically(">", 1)) 87 }) 88 89 It("podman pod top on pod invalid options", func() { 90 _, ec, podid := podmanTest.CreatePod("") 91 Expect(ec).To(Equal(0)) 92 93 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 94 session.WaitWithDefaultTimeout() 95 Expect(session.ExitCode()).To(Equal(0)) 96 97 // We need to pass -eo to force executing ps in the Alpine container. 98 // Alpines stripped down ps(1) is accepting any kind of weird input in 99 // contrast to others, such that a `ps invalid` will silently ignore 100 // the wrong input and still print the -ef output instead. 101 result := podmanTest.Podman([]string{"pod", "top", podid, "-eo", "invalid"}) 102 result.WaitWithDefaultTimeout() 103 Expect(result.ExitCode()).To(Equal(125)) 104 }) 105 106 It("podman pod top on pod with containers in same pid namespace", func() { 107 _, ec, podid := podmanTest.CreatePod("") 108 Expect(ec).To(Equal(0)) 109 110 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 111 session.WaitWithDefaultTimeout() 112 Expect(session.ExitCode()).To(Equal(0)) 113 cid := session.OutputToString() 114 115 session = podmanTest.Podman([]string{"run", "-d", "--pod", podid, "--pid", fmt.Sprintf("container:%s", cid), ALPINE, "top", "-d", "2"}) 116 session.WaitWithDefaultTimeout() 117 Expect(session.ExitCode()).To(Equal(0)) 118 119 result := podmanTest.Podman([]string{"pod", "top", podid}) 120 result.WaitWithDefaultTimeout() 121 Expect(result.ExitCode()).To(Equal(0)) 122 Expect(len(result.OutputToStringArray())).To(Equal(3)) 123 }) 124 125 It("podman pod top on pod with containers in different namespace", func() { 126 _, ec, podid := podmanTest.CreatePod("") 127 Expect(ec).To(Equal(0)) 128 129 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 130 session.WaitWithDefaultTimeout() 131 Expect(session.ExitCode()).To(Equal(0)) 132 133 session = podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 134 session.WaitWithDefaultTimeout() 135 Expect(session.ExitCode()).To(Equal(0)) 136 137 for i := 0; i < 10; i++ { 138 fmt.Println("Waiting for containers to be running .... ") 139 if podmanTest.NumberOfContainersRunning() == 2 { 140 break 141 } 142 time.Sleep(1 * time.Second) 143 } 144 result := podmanTest.Podman([]string{"pod", "top", podid}) 145 result.WaitWithDefaultTimeout() 146 Expect(result.ExitCode()).To(Equal(0)) 147 Expect(len(result.OutputToStringArray())).To(Equal(3)) 148 }) 149 })