github.com/AbhinandanKurakure/podman/v3@v3.4.10/test/e2e/pod_ps_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 6 "sort" 7 8 . "github.com/containers/podman/v3/test/utils" 9 "github.com/containers/storage/pkg/stringid" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 . "github.com/onsi/gomega/gexec" 13 ) 14 15 var _ = Describe("Podman ps", func() { 16 var ( 17 tempdir string 18 err error 19 podmanTest *PodmanTestIntegration 20 ) 21 22 BeforeEach(func() { 23 tempdir, err = CreateTempDirInTempDir() 24 if err != nil { 25 os.Exit(1) 26 } 27 podmanTest = PodmanTestCreate(tempdir) 28 podmanTest.Setup() 29 podmanTest.SeedImages() 30 }) 31 32 AfterEach(func() { 33 podmanTest.Cleanup() 34 f := CurrentGinkgoTestDescription() 35 processTestResult(f) 36 37 }) 38 39 It("podman pod ps no pods", func() { 40 session := podmanTest.Podman([]string{"pod", "ps"}) 41 session.WaitWithDefaultTimeout() 42 Expect(session).Should(Exit(0)) 43 }) 44 45 It("podman pod ps default", func() { 46 _, ec, podid := podmanTest.CreatePod(nil) 47 Expect(ec).To(Equal(0)) 48 49 session := podmanTest.RunTopContainerInPod("", podid) 50 session.WaitWithDefaultTimeout() 51 Expect(session).Should(Exit(0)) 52 53 result := podmanTest.Podman([]string{"pod", "ps"}) 54 result.WaitWithDefaultTimeout() 55 Expect(result).Should(Exit(0)) 56 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 57 }) 58 59 It("podman pod ps quiet flag", func() { 60 _, ec, podid := podmanTest.CreatePod(nil) 61 Expect(ec).To(Equal(0)) 62 63 _, ec, _ = podmanTest.RunLsContainerInPod("", podid) 64 Expect(ec).To(Equal(0)) 65 66 result := podmanTest.Podman([]string{"pod", "ps", "-q"}) 67 result.WaitWithDefaultTimeout() 68 Expect(result).To(Exit(0)) 69 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 70 Expect(podid).To(ContainSubstring(result.OutputToStringArray()[0])) 71 }) 72 73 It("podman pod ps no-trunc", func() { 74 _, ec, podid := podmanTest.CreatePod(nil) 75 Expect(ec).To(Equal(0)) 76 77 _, ec2, _ := podmanTest.RunLsContainerInPod("", podid) 78 Expect(ec2).To(Equal(0)) 79 80 result := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc"}) 81 result.WaitWithDefaultTimeout() 82 Expect(result).Should(Exit(0)) 83 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 84 Expect(podid).To(Equal(result.OutputToStringArray()[0])) 85 }) 86 87 It("podman pod ps latest", func() { 88 SkipIfRemote("--latest flag n/a") 89 _, ec, podid1 := podmanTest.CreatePod(nil) 90 Expect(ec).To(Equal(0)) 91 92 _, ec2, podid2 := podmanTest.CreatePod(nil) 93 Expect(ec2).To(Equal(0)) 94 95 result := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--latest"}) 96 result.WaitWithDefaultTimeout() 97 Expect(result).Should(Exit(0)) 98 Expect(result.OutputToString()).To(ContainSubstring(podid2)) 99 Expect(result.OutputToString()).To(Not(ContainSubstring(podid1))) 100 }) 101 102 It("podman pod ps id filter flag", func() { 103 _, ec, podid := podmanTest.CreatePod(nil) 104 Expect(ec).To(Equal(0)) 105 106 result := podmanTest.Podman([]string{"pod", "ps", "--filter", fmt.Sprintf("id=%s", podid)}) 107 result.WaitWithDefaultTimeout() 108 Expect(result).Should(Exit(0)) 109 }) 110 111 It("podman pod ps --filter until", func() { 112 name := "mypod" 113 _, ec, _ := podmanTest.CreatePod(map[string][]string{"--name": {name}}) 114 Expect(ec).To(Equal(0)) 115 116 result := podmanTest.Podman([]string{"pod", "ps", "--filter", "until=50"}) 117 result.WaitWithDefaultTimeout() 118 Expect(result).Should(Exit(0)) 119 Expect(result.OutputToString()).To(Not(ContainSubstring(name))) 120 121 result = podmanTest.Podman([]string{"pod", "ps", "--filter", "until=5000000000"}) 122 result.WaitWithDefaultTimeout() 123 Expect(result).Should(Exit(0)) 124 Expect(result.OutputToString()).To(ContainSubstring(name)) 125 }) 126 127 It("podman pod ps filter name regexp", func() { 128 _, ec, podid := podmanTest.CreatePod(map[string][]string{"--name": {"mypod"}}) 129 Expect(ec).To(Equal(0)) 130 _, ec2, _ := podmanTest.CreatePod(map[string][]string{"--name": {"mypod1"}}) 131 Expect(ec2).To(Equal(0)) 132 133 result := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "name=mypod"}) 134 result.WaitWithDefaultTimeout() 135 Expect(result).Should(Exit(0)) 136 137 output := result.OutputToStringArray() 138 Expect(len(output)).To(Equal(2)) 139 140 result = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "name=mypod$"}) 141 result.WaitWithDefaultTimeout() 142 Expect(result).Should(Exit(0)) 143 144 output = result.OutputToStringArray() 145 Expect(len(output)).To(Equal(1)) 146 Expect(output[0]).To(Equal(podid)) 147 }) 148 149 It("podman pod ps mutually exclusive flags", func() { 150 session := podmanTest.Podman([]string{"pod", "ps", "-q", "--format", "{{.ID}}"}) 151 session.WaitWithDefaultTimeout() 152 Expect(session).To(ExitWithError()) 153 154 }) 155 156 It("podman pod ps --sort by name", func() { 157 _, ec, _ := podmanTest.CreatePod(nil) 158 Expect(ec).To(Equal(0)) 159 160 _, ec2, _ := podmanTest.CreatePod(nil) 161 Expect(ec2).To(Equal(0)) 162 163 _, ec3, _ := podmanTest.CreatePod(nil) 164 Expect(ec3).To(Equal(0)) 165 166 session := podmanTest.Podman([]string{"pod", "ps", "--sort=name", "--format", "{{.Name}}"}) 167 168 session.WaitWithDefaultTimeout() 169 Expect(session).Should(Exit(0)) 170 171 sortedArr := session.OutputToStringArray() 172 173 Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { return sortedArr[i] < sortedArr[j] })).To(BeTrue()) 174 }) 175 176 It("podman pod ps --ctr-names", func() { 177 SkipIfRootlessCgroupsV1("Not supported for rootless + CGroupsV1") 178 _, ec, podid := podmanTest.CreatePod(nil) 179 Expect(ec).To(Equal(0)) 180 181 session := podmanTest.RunTopContainerInPod("test1", podid) 182 session.WaitWithDefaultTimeout() 183 Expect(session).Should(Exit(0)) 184 185 _, ec, _ = podmanTest.RunLsContainerInPod("test2", podid) 186 Expect(ec).To(Equal(0)) 187 188 session = podmanTest.Podman([]string{"pod", "ps", "--format={{.ContainerNames}}", "--ctr-names"}) 189 session.WaitWithDefaultTimeout() 190 Expect(session).Should(Exit(0)) 191 Expect(session.OutputToString()).To(ContainSubstring("test1")) 192 Expect(session.OutputToString()).To(ContainSubstring("test2")) 193 }) 194 195 It("podman pod ps filter ctr attributes", func() { 196 _, ec, podid1 := podmanTest.CreatePod(nil) 197 Expect(ec).To(Equal(0)) 198 199 session := podmanTest.RunTopContainerInPod("test1", podid1) 200 session.WaitWithDefaultTimeout() 201 Expect(session).Should(Exit(0)) 202 203 _, ec2, podid2 := podmanTest.CreatePod(nil) 204 Expect(ec2).To(Equal(0)) 205 206 _, ec3, cid := podmanTest.RunLsContainerInPod("test2", podid2) 207 Expect(ec3).To(Equal(0)) 208 209 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-names=test1"}) 210 session.WaitWithDefaultTimeout() 211 Expect(session).Should(Exit(0)) 212 Expect(session.OutputToString()).To(ContainSubstring(podid1)) 213 Expect(session.OutputToString()).To(Not(ContainSubstring(podid2))) 214 215 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-names=test", "--filter", "ctr-status=running"}) 216 session.WaitWithDefaultTimeout() 217 Expect(session).Should(Exit(0)) 218 Expect(session.OutputToString()).To(ContainSubstring(podid1)) 219 Expect(session.OutputToString()).To(Not(ContainSubstring(podid2))) 220 221 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", fmt.Sprintf("ctr-ids=%s", cid)}) 222 session.WaitWithDefaultTimeout() 223 Expect(session).Should(Exit(0)) 224 Expect(session.OutputToString()).To(ContainSubstring(podid2)) 225 Expect(session.OutputToString()).To(Not(ContainSubstring(podid1))) 226 227 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-ids=" + cid[:40], "--filter", "ctr-ids=" + cid + "$"}) 228 session.WaitWithDefaultTimeout() 229 Expect(session).Should(Exit(0)) 230 Expect(session.OutputToString()).To(ContainSubstring(podid2)) 231 Expect(session.OutputToString()).To(Not(ContainSubstring(podid1))) 232 233 _, ec3, podid3 := podmanTest.CreatePod(nil) 234 Expect(ec3).To(Equal(0)) 235 236 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-number=1"}) 237 session.WaitWithDefaultTimeout() 238 Expect(session).Should(Exit(0)) 239 Expect(session.OutputToString()).To(ContainSubstring(podid1)) 240 Expect(session.OutputToString()).To(ContainSubstring(podid2)) 241 Expect(session.OutputToString()).To(Not(ContainSubstring(podid3))) 242 243 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-number=1", "--filter", "ctr-number=0"}) 244 session.WaitWithDefaultTimeout() 245 Expect(session).Should(Exit(0)) 246 Expect(session.OutputToString()).To(ContainSubstring(podid1)) 247 Expect(session.OutputToString()).To(ContainSubstring(podid2)) 248 Expect(session.OutputToString()).To(ContainSubstring(podid3)) 249 250 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=running"}) 251 session.WaitWithDefaultTimeout() 252 Expect(session).Should(Exit(0)) 253 Expect(session.OutputToString()).To(ContainSubstring(podid1)) 254 Expect(session.OutputToString()).To(Not(ContainSubstring(podid2))) 255 Expect(session.OutputToString()).To(Not(ContainSubstring(podid3))) 256 257 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=exited"}) 258 session.WaitWithDefaultTimeout() 259 Expect(session).Should(Exit(0)) 260 Expect(session.OutputToString()).To(ContainSubstring(podid2)) 261 Expect(session.OutputToString()).To(Not(ContainSubstring(podid1))) 262 Expect(session.OutputToString()).To(Not(ContainSubstring(podid3))) 263 264 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=exited", "--filter", "ctr-status=running"}) 265 session.WaitWithDefaultTimeout() 266 Expect(session).Should(Exit(0)) 267 Expect(session.OutputToString()).To(ContainSubstring(podid1)) 268 Expect(session.OutputToString()).To(ContainSubstring(podid2)) 269 Expect(session.OutputToString()).To(Not(ContainSubstring(podid3))) 270 271 session = podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc", "--filter", "ctr-status=created"}) 272 session.WaitWithDefaultTimeout() 273 Expect(session).Should(Exit(0)) 274 Expect(session.OutputToString()).To(BeEmpty()) 275 }) 276 277 It("podman pod ps filter labels", func() { 278 s, _, podid1 := podmanTest.CreatePod(nil) 279 Expect(s).To(Exit(0)) 280 281 s, _, podid2 := podmanTest.CreatePod(map[string][]string{ 282 "--label": {"app=myapp", "io.podman.test.key=irrelevant-value"}, 283 }) 284 Expect(s).To(Exit(0)) 285 286 s, _, podid3 := podmanTest.CreatePod(map[string][]string{"--label": {"app=test"}}) 287 Expect(s).To(Exit(0)) 288 289 session := podmanTest.Podman([]string{"pod", "ps", "--no-trunc", "--filter", "label=app", "--filter", "label=app=myapp"}) 290 session.WaitWithDefaultTimeout() 291 Expect(session).To(Exit(0)) 292 Expect(session.OutputToString()).To(Not(ContainSubstring(podid1))) 293 Expect(session.OutputToString()).To(ContainSubstring(podid2)) 294 Expect(session.OutputToString()).To(Not(ContainSubstring(podid3))) 295 }) 296 297 It("podman pod ps filter network", func() { 298 net := stringid.GenerateNonCryptoID() 299 session := podmanTest.Podman([]string{"network", "create", net}) 300 session.WaitWithDefaultTimeout() 301 Expect(session).Should(Exit(0)) 302 defer podmanTest.removeCNINetwork(net) 303 304 session = podmanTest.Podman([]string{"pod", "create", "--network", net}) 305 session.WaitWithDefaultTimeout() 306 Expect(session).Should(Exit(0)) 307 podWithNet := session.OutputToString() 308 309 session = podmanTest.Podman([]string{"pod", "create"}) 310 session.WaitWithDefaultTimeout() 311 Expect(session).Should(Exit(0)) 312 podWithoutNet := session.OutputToString() 313 314 session = podmanTest.Podman([]string{"pod", "ps", "--no-trunc", "--filter", "network=" + net}) 315 session.WaitWithDefaultTimeout() 316 Expect(session).Should(Exit(0)) 317 Expect(session.OutputToString()).To(ContainSubstring(podWithNet)) 318 Expect(session.OutputToString()).To(Not(ContainSubstring(podWithoutNet))) 319 }) 320 321 It("podman pod ps --format networks", func() { 322 session := podmanTest.Podman([]string{"pod", "create"}) 323 session.WaitWithDefaultTimeout() 324 Expect(session).Should(Exit(0)) 325 326 session = podmanTest.Podman([]string{"pod", "ps", "--format", "{{ .Networks }}"}) 327 session.WaitWithDefaultTimeout() 328 Expect(session).Should(Exit(0)) 329 if isRootless() { 330 // rootless container don't have a network by default 331 Expect(session.OutputToString()).To(Equal("")) 332 } else { 333 // default network name is podman 334 Expect(session.OutputToString()).To(Equal("podman")) 335 } 336 337 net1 := stringid.GenerateNonCryptoID() 338 session = podmanTest.Podman([]string{"network", "create", net1}) 339 session.WaitWithDefaultTimeout() 340 Expect(session).Should(Exit(0)) 341 defer podmanTest.removeCNINetwork(net1) 342 net2 := stringid.GenerateNonCryptoID() 343 session = podmanTest.Podman([]string{"network", "create", net2}) 344 session.WaitWithDefaultTimeout() 345 Expect(session).Should(Exit(0)) 346 defer podmanTest.removeCNINetwork(net2) 347 348 session = podmanTest.Podman([]string{"pod", "create", "--network", net1 + "," + net2}) 349 session.WaitWithDefaultTimeout() 350 Expect(session).Should(Exit(0)) 351 pid := session.OutputToString() 352 353 session = podmanTest.Podman([]string{"pod", "ps", "--format", "{{ .Networks }}", "--filter", "id=" + pid}) 354 session.WaitWithDefaultTimeout() 355 Expect(session).Should(Exit(0)) 356 // the output is not deterministic so check both possible orders 357 Expect(session.OutputToString()).To(Or(Equal(net1+","+net2), Equal(net2+","+net1))) 358 }) 359 360 It("pod no infra should ps", func() { 361 session := podmanTest.Podman([]string{"pod", "create", "--infra=false"}) 362 session.WaitWithDefaultTimeout() 363 Expect(session).Should(Exit(0)) 364 365 ps := podmanTest.Podman([]string{"pod", "ps"}) 366 ps.WaitWithDefaultTimeout() 367 Expect(ps).Should(Exit(0)) 368 369 infra := podmanTest.Podman([]string{"pod", "ps", "--format", "{{.InfraId}}"}) 370 infra.WaitWithDefaultTimeout() 371 Expect(len(infra.OutputToString())).To(BeZero()) 372 }) 373 374 It("podman pod ps format with labels", func() { 375 _, ec, _ := podmanTest.CreatePod(nil) 376 Expect(ec).To(Equal(0)) 377 378 _, ec1, _ := podmanTest.CreatePod(map[string][]string{"--label": { 379 "io.podman.test.label=value1", 380 "io.podman.test.key=irrelevant-value", 381 }}) 382 Expect(ec1).To(Equal(0)) 383 384 session := podmanTest.Podman([]string{"pod", "ps", "--format", "{{.Labels}}"}) 385 session.WaitWithDefaultTimeout() 386 Expect(session).Should(Exit(0)) 387 Expect(session.OutputToString()).To(ContainSubstring("value1")) 388 }) 389 390 It("podman pod ps headers", func() { 391 session := podmanTest.Podman([]string{"pod", "ps", "--ctr-ids", "--ctr-names", "--ctr-status", "--ns"}) 392 session.WaitWithDefaultTimeout() 393 Expect(session).Should(Exit(0)) 394 Expect(session.OutputToString()).To(MatchRegexp(`^POD ID\s+NAME\s+STATUS\s+CREATED\s+INFRA ID\s+IDS\s+NAMES\s+STATUS\s+CGROUP\s+NAMESPACES$`)) 395 }) 396 397 })