4
. "github.com/containers/podman/v5/test/utils"
5
. "github.com/onsi/ginkgo/v2"
6
. "github.com/onsi/gomega"
7
. "github.com/onsi/gomega/gexec"
10
var _ = Describe("Podman pod stats", func() {
13
SkipIfRootlessCgroupsV1("Tests fail with both CGv1 + required --cgroup-manager=cgroupfs")
14
if isContainerized() {
15
SkipIfCgroupV1("All tests fail Error: unable to load cgroup at ...: cgroup deleted")
19
It("podman pod stats should run with no pods", func() {
20
session := podmanTest.Podman([]string{"pod", "stats", "--no-stream"})
21
session.WaitWithDefaultTimeout()
22
Expect(session).Should(ExitCleanly())
25
It("podman pod stats with a bogus pod", func() {
26
session := podmanTest.Podman([]string{"pod", "stats", "foobar"})
27
session.WaitWithDefaultTimeout()
28
Expect(session).Should(Exit(125))
31
It("podman pod stats on a specific running pod", func() {
32
_, ec, podid := podmanTest.CreatePod(nil)
33
Expect(ec).To(Equal(0))
35
session := podmanTest.RunTopContainerInPod("", podid)
36
session.WaitWithDefaultTimeout()
37
Expect(session).Should(ExitCleanly())
39
session = podmanTest.RunTopContainerInPod("", podid)
40
session.WaitWithDefaultTimeout()
41
Expect(session).Should(ExitCleanly())
43
stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", podid})
44
stats.WaitWithDefaultTimeout()
45
Expect(stats).Should(ExitCleanly())
48
It("podman pod stats on a specific running pod with shortID", func() {
49
_, ec, podid := podmanTest.CreatePod(nil)
50
Expect(ec).To(Equal(0))
52
session := podmanTest.RunTopContainerInPod("", podid)
53
session.WaitWithDefaultTimeout()
54
Expect(session).Should(ExitCleanly())
56
session = podmanTest.RunTopContainerInPod("", podid)
57
session.WaitWithDefaultTimeout()
58
Expect(session).Should(ExitCleanly())
60
stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", podid[:5]})
61
stats.WaitWithDefaultTimeout()
62
Expect(stats).Should(ExitCleanly())
65
It("podman pod stats on a specific running pod with name", func() {
66
_, ec, podid := podmanTest.CreatePod(map[string][]string{"--name": {"test"}})
67
Expect(ec).To(Equal(0))
69
session := podmanTest.RunTopContainerInPod("", podid)
70
session.WaitWithDefaultTimeout()
71
Expect(session).Should(ExitCleanly())
73
session = podmanTest.RunTopContainerInPod("", podid)
74
session.WaitWithDefaultTimeout()
75
Expect(session).Should(ExitCleanly())
77
stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", "test"})
78
stats.WaitWithDefaultTimeout()
79
Expect(stats).Should(ExitCleanly())
82
It("podman pod stats on running pods", func() {
83
_, ec, podid := podmanTest.CreatePod(nil)
84
Expect(ec).To(Equal(0))
86
session := podmanTest.RunTopContainerInPod("", podid)
87
session.WaitWithDefaultTimeout()
88
Expect(session).Should(ExitCleanly())
90
session = podmanTest.RunTopContainerInPod("", podid)
91
session.WaitWithDefaultTimeout()
92
Expect(session).Should(ExitCleanly())
94
stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream"})
95
stats.WaitWithDefaultTimeout()
96
Expect(stats).Should(ExitCleanly())
99
It("podman pod stats on all pods", func() {
100
_, ec, podid := podmanTest.CreatePod(nil)
101
Expect(ec).To(Equal(0))
103
session := podmanTest.RunTopContainerInPod("", podid)
104
session.WaitWithDefaultTimeout()
105
Expect(session).Should(ExitCleanly())
107
session = podmanTest.RunTopContainerInPod("", podid)
108
session.WaitWithDefaultTimeout()
109
Expect(session).Should(ExitCleanly())
111
stats := podmanTest.Podman([]string{"pod", "stats", "--no-stream", "-a"})
112
stats.WaitWithDefaultTimeout()
113
Expect(stats).Should(ExitCleanly())
116
It("podman pod stats with json output", func() {
117
_, ec, podid := podmanTest.CreatePod(nil)
118
Expect(ec).To(Equal(0))
120
session := podmanTest.RunTopContainerInPod("", podid)
121
session.WaitWithDefaultTimeout()
122
Expect(session).Should(ExitCleanly())
124
session = podmanTest.RunTopContainerInPod("", podid)
125
session.WaitWithDefaultTimeout()
126
Expect(session).Should(ExitCleanly())
128
stats := podmanTest.Podman([]string{"pod", "stats", "--format", "json", "--no-stream", "-a"})
129
stats.WaitWithDefaultTimeout()
130
Expect(stats).Should(ExitCleanly())
131
Expect(stats.OutputToString()).To(BeValidJSON())
133
It("podman pod stats with GO template", func() {
134
_, ec, podid := podmanTest.CreatePod(nil)
135
Expect(ec).To(Equal(0))
137
session := podmanTest.RunTopContainerInPod("", podid)
138
session.WaitWithDefaultTimeout()
139
Expect(session).Should(ExitCleanly())
140
stats := podmanTest.Podman([]string{"pod", "stats", "-a", "--no-reset", "--no-stream", "--format", "table {{.CID}} {{.Pod}} {{.Mem}} {{.MemUsage}} {{.CPU}} {{.NetIO}} {{.BlockIO}} {{.PIDS}} {{.Pod}}"})
141
stats.WaitWithDefaultTimeout()
142
Expect(stats).To(ExitCleanly())
145
It("podman pod stats with invalid GO template", func() {
146
_, ec, podid := podmanTest.CreatePod(nil)
147
Expect(ec).To(Equal(0))
149
session := podmanTest.RunTopContainerInPod("", podid)
150
session.WaitWithDefaultTimeout()
151
Expect(session).Should(ExitCleanly())
152
stats := podmanTest.Podman([]string{"pod", "stats", "-a", "--no-reset", "--no-stream", "--format", "\"table {{.ID}} \""})
153
stats.WaitWithDefaultTimeout()
154
Expect(stats).To(ExitWithError())
157
It("podman pod stats on net=host post", func() {
158
SkipIfRootless("--net=host not supported for rootless pods at present")
160
podCreate := podmanTest.Podman([]string{"pod", "create", "--net=host", "--name", podName})
161
podCreate.WaitWithDefaultTimeout()
162
Expect(podCreate).Should(ExitCleanly())
164
ctrRun := podmanTest.Podman([]string{"run", "-d", "--pod", podName, ALPINE, "top"})
165
ctrRun.WaitWithDefaultTimeout()
166
Expect(ctrRun).Should(ExitCleanly())
168
stats := podmanTest.Podman([]string{"pod", "stats", "--format", "json", "--no-stream", podName})
169
stats.WaitWithDefaultTimeout()
170
Expect(stats).Should(ExitCleanly())
171
Expect(stats.OutputToString()).To(BeValidJSON())