github.com/containers/podman/v5@v5.1.0-rc1/test/e2e/pod_top_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "time" 6 7 . "github.com/containers/podman/v5/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 top", func() { 14 15 It("podman pod top without pod name or id", func() { 16 result := podmanTest.Podman([]string{"pod", "top"}) 17 result.WaitWithDefaultTimeout() 18 Expect(result).Should(Exit(125)) 19 }) 20 21 It("podman pod top on bogus pod", func() { 22 result := podmanTest.Podman([]string{"pod", "top", "1234"}) 23 result.WaitWithDefaultTimeout() 24 Expect(result).Should(Exit(125)) 25 }) 26 27 It("podman pod top on non-running pod", func() { 28 _, ec, podid := podmanTest.CreatePod(nil) 29 Expect(ec).To(Equal(0)) 30 31 result := podmanTest.Podman([]string{"top", podid}) 32 result.WaitWithDefaultTimeout() 33 Expect(result).Should(Exit(125)) 34 }) 35 36 It("podman pod top on pod", func() { 37 _, ec, podid := podmanTest.CreatePod(nil) 38 Expect(ec).To(Equal(0)) 39 40 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 41 session.WaitWithDefaultTimeout() 42 Expect(session).Should(ExitCleanly()) 43 44 if !IsRemote() { 45 podid = "-l" 46 } 47 result := podmanTest.Podman([]string{"pod", "top", podid}) 48 result.WaitWithDefaultTimeout() 49 Expect(result).Should(ExitCleanly()) 50 Expect(len(result.OutputToStringArray())).To(BeNumerically(">", 1)) 51 }) 52 53 It("podman pod top with options", func() { 54 _, ec, podid := podmanTest.CreatePod(nil) 55 Expect(ec).To(Equal(0)) 56 57 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 58 session.WaitWithDefaultTimeout() 59 Expect(session).Should(ExitCleanly()) 60 61 result := podmanTest.Podman([]string{"pod", "top", podid, "pid", "%C", "args"}) 62 result.WaitWithDefaultTimeout() 63 Expect(result).Should(ExitCleanly()) 64 Expect(len(result.OutputToStringArray())).To(BeNumerically(">", 1)) 65 }) 66 67 It("podman pod top on pod invalid options", func() { 68 _, ec, podid := podmanTest.CreatePod(nil) 69 Expect(ec).To(Equal(0)) 70 71 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 72 session.WaitWithDefaultTimeout() 73 Expect(session).Should(ExitCleanly()) 74 75 // We need to pass -eo to force executing ps in the Alpine container. 76 // Alpines stripped down ps(1) is accepting any kind of weird input in 77 // contrast to others, such that a `ps invalid` will silently ignore 78 // the wrong input and still print the -ef output instead. 79 result := podmanTest.Podman([]string{"pod", "top", podid, "-eo", "invalid"}) 80 result.WaitWithDefaultTimeout() 81 Expect(result).Should(Exit(125)) 82 }) 83 84 It("podman pod top on pod with containers in same pid namespace", func() { 85 _, ec, podid := podmanTest.CreatePod(nil) 86 Expect(ec).To(Equal(0)) 87 88 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 89 session.WaitWithDefaultTimeout() 90 Expect(session).Should(ExitCleanly()) 91 cid := session.OutputToString() 92 93 session = podmanTest.Podman([]string{"run", "-d", "--pod", podid, "--pid", fmt.Sprintf("container:%s", cid), ALPINE, "top", "-d", "2"}) 94 session.WaitWithDefaultTimeout() 95 Expect(session).Should(ExitCleanly()) 96 97 result := podmanTest.Podman([]string{"pod", "top", podid}) 98 result.WaitWithDefaultTimeout() 99 Expect(result).Should(ExitCleanly()) 100 Expect(result.OutputToStringArray()).To(HaveLen(3)) 101 }) 102 103 It("podman pod top on pod with containers in different namespace", func() { 104 _, ec, podid := podmanTest.CreatePod(nil) 105 Expect(ec).To(Equal(0)) 106 107 session := podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 108 session.WaitWithDefaultTimeout() 109 Expect(session).Should(ExitCleanly()) 110 111 session = podmanTest.Podman([]string{"run", "-d", "--pod", podid, ALPINE, "top", "-d", "2"}) 112 session.WaitWithDefaultTimeout() 113 Expect(session).Should(ExitCleanly()) 114 115 for i := 0; i < 10; i++ { 116 GinkgoWriter.Println("Waiting for containers to be running .... ") 117 if podmanTest.NumberOfContainersRunning() == 2 { 118 break 119 } 120 time.Sleep(1 * time.Second) 121 } 122 result := podmanTest.Podman([]string{"pod", "top", podid}) 123 result.WaitWithDefaultTimeout() 124 Expect(result).Should(ExitCleanly()) 125 Expect(result.OutputToStringArray()).To(HaveLen(3)) 126 }) 127 })