github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/ps_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 6 "regexp" 7 "sort" 8 "strings" 9 10 . "github.com/containers/podman/v2/test/utils" 11 "github.com/docker/go-units" 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 . "github.com/onsi/gomega/gexec" 15 ) 16 17 var _ = Describe("Podman ps", func() { 18 var ( 19 tempdir string 20 err error 21 podmanTest *PodmanTestIntegration 22 ) 23 24 BeforeEach(func() { 25 tempdir, err = CreateTempDirInTempDir() 26 if err != nil { 27 os.Exit(1) 28 } 29 podmanTest = PodmanTestCreate(tempdir) 30 podmanTest.Setup() 31 podmanTest.SeedImages() 32 }) 33 34 AfterEach(func() { 35 podmanTest.Cleanup() 36 f := CurrentGinkgoTestDescription() 37 processTestResult(f) 38 39 }) 40 41 It("podman ps no containers", func() { 42 session := podmanTest.Podman([]string{"ps"}) 43 session.WaitWithDefaultTimeout() 44 Expect(session.ExitCode()).To(Equal(0)) 45 }) 46 47 It("podman container ps no containers", func() { 48 session := podmanTest.Podman([]string{"container", "ps"}) 49 session.WaitWithDefaultTimeout() 50 Expect(session.ExitCode()).To(Equal(0)) 51 }) 52 53 It("podman ps default", func() { 54 session := podmanTest.RunTopContainer("") 55 session.WaitWithDefaultTimeout() 56 Expect(session.ExitCode()).To(Equal(0)) 57 58 result := podmanTest.Podman([]string{"ps"}) 59 result.WaitWithDefaultTimeout() 60 Expect(result.ExitCode()).To(Equal(0)) 61 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 62 }) 63 64 It("podman ps all", func() { 65 _, ec, _ := podmanTest.RunLsContainer("") 66 Expect(ec).To(Equal(0)) 67 68 result := podmanTest.Podman([]string{"ps", "-a"}) 69 result.WaitWithDefaultTimeout() 70 Expect(result.ExitCode()).To(Equal(0)) 71 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 72 }) 73 74 It("podman container list all", func() { 75 _, ec, _ := podmanTest.RunLsContainer("") 76 Expect(ec).To(Equal(0)) 77 78 result := podmanTest.Podman([]string{"container", "list", "-a"}) 79 result.WaitWithDefaultTimeout() 80 Expect(result.ExitCode()).To(Equal(0)) 81 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 82 83 result = podmanTest.Podman([]string{"container", "ls", "-a"}) 84 result.WaitWithDefaultTimeout() 85 Expect(result.ExitCode()).To(Equal(0)) 86 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 87 }) 88 89 It("podman ps size flag", func() { 90 _, ec, _ := podmanTest.RunLsContainer("") 91 Expect(ec).To(Equal(0)) 92 93 result := podmanTest.Podman([]string{"ps", "-a", "--size"}) 94 result.WaitWithDefaultTimeout() 95 Expect(result.ExitCode()).To(Equal(0)) 96 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 97 }) 98 99 It("podman ps quiet flag", func() { 100 _, ec, fullCid := podmanTest.RunLsContainer("") 101 Expect(ec).To(Equal(0)) 102 103 result := podmanTest.Podman([]string{"ps", "-a", "-q"}) 104 result.WaitWithDefaultTimeout() 105 Expect(result.ExitCode()).To(Equal(0)) 106 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 107 Expect(fullCid).To(ContainSubstring(result.OutputToStringArray()[0])) 108 }) 109 110 It("podman ps latest flag", func() { 111 SkipIfRemote("--latest is not supported on podman-remote") 112 _, ec, _ := podmanTest.RunLsContainer("") 113 Expect(ec).To(Equal(0)) 114 _, ec, _ = podmanTest.RunLsContainer("") 115 Expect(ec).To(Equal(0)) 116 117 result := podmanTest.Podman([]string{"ps", "-q", "--latest"}) 118 result.WaitWithDefaultTimeout() 119 Expect(result.ExitCode()).To(Equal(0)) 120 Expect(len(result.OutputToStringArray())).Should(Equal(1)) 121 }) 122 123 It("podman ps last flag", func() { 124 Skip("--last flag nonfunctional and disabled") 125 126 // Make sure that non-running containers are being counted as 127 // well. 128 session := podmanTest.Podman([]string{"create", "alpine", "top"}) 129 session.WaitWithDefaultTimeout() 130 Expect(session.ExitCode()).To(Equal(0)) 131 132 result := podmanTest.Podman([]string{"ps", "--last", "2"}) 133 result.WaitWithDefaultTimeout() 134 Expect(result.ExitCode()).To(Equal(0)) 135 Expect(len(result.OutputToStringArray())).Should(Equal(2)) // 1 container 136 137 _, ec, _ := podmanTest.RunLsContainer("test1") 138 Expect(ec).To(Equal(0)) 139 140 _, ec, _ = podmanTest.RunLsContainer("test2") 141 Expect(ec).To(Equal(0)) 142 143 _, ec, _ = podmanTest.RunLsContainer("test3") 144 Expect(ec).To(Equal(0)) 145 146 result = podmanTest.Podman([]string{"ps", "--last", "2"}) 147 result.WaitWithDefaultTimeout() 148 Expect(result.ExitCode()).To(Equal(0)) 149 Expect(len(result.OutputToStringArray())).Should(Equal(3)) // 2 containers 150 151 result = podmanTest.Podman([]string{"ps", "--last", "3"}) 152 result.WaitWithDefaultTimeout() 153 Expect(result.ExitCode()).To(Equal(0)) 154 Expect(len(result.OutputToStringArray())).Should(Equal(4)) // 3 containers 155 156 result = podmanTest.Podman([]string{"ps", "--last", "100"}) 157 result.WaitWithDefaultTimeout() 158 Expect(result.ExitCode()).To(Equal(0)) 159 Expect(len(result.OutputToStringArray())).Should(Equal(5)) // 4 containers (3 running + 1 created) 160 }) 161 162 It("podman ps no-trunc", func() { 163 _, ec, fullCid := podmanTest.RunLsContainer("") 164 Expect(ec).To(Equal(0)) 165 166 result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc"}) 167 result.WaitWithDefaultTimeout() 168 Expect(result.ExitCode()).To(Equal(0)) 169 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 170 Expect(fullCid).To(Equal(result.OutputToStringArray()[0])) 171 }) 172 173 It("podman ps namespace flag", func() { 174 _, ec, _ := podmanTest.RunLsContainer("") 175 Expect(ec).To(Equal(0)) 176 177 result := podmanTest.Podman([]string{"ps", "-a", "--namespace"}) 178 result.WaitWithDefaultTimeout() 179 Expect(result.ExitCode()).To(Equal(0)) 180 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 181 }) 182 183 It("podman ps namespace flag even for remote", func() { 184 session := podmanTest.RunTopContainer("test1") 185 session.WaitWithDefaultTimeout() 186 187 result := podmanTest.Podman([]string{"ps", "-a", "--namespace", "--format", 188 "{{with .Namespaces}}{{.Cgroup}}:{{.IPC}}:{{.MNT}}:{{.NET}}:{{.PIDNS}}:{{.User}}:{{.UTS}}{{end}}"}) 189 result.WaitWithDefaultTimeout() 190 Expect(result.ExitCode()).To(Equal(0)) 191 // it must contains `::` when some ns is null. If it works normally, it should be "$num1:$num2:$num3" 192 Expect(result.OutputToString()).To(Not(ContainSubstring(`::`))) 193 }) 194 195 It("podman ps with no containers is valid json format", func() { 196 result := podmanTest.Podman([]string{"ps", "--format", "json"}) 197 result.WaitWithDefaultTimeout() 198 Expect(result.ExitCode()).To(Equal(0)) 199 Expect(result.IsJSONOutputValid()).To(BeTrue()) 200 }) 201 202 It("podman ps namespace flag with json format", func() { 203 _, ec, _ := podmanTest.RunLsContainer("test1") 204 Expect(ec).To(Equal(0)) 205 206 result := podmanTest.Podman([]string{"ps", "-a", "--ns", "--format", "json"}) 207 result.WaitWithDefaultTimeout() 208 Expect(result.ExitCode()).To(Equal(0)) 209 Expect(result.IsJSONOutputValid()).To(BeTrue()) 210 }) 211 212 It("podman ps print a human-readable `Status` with json format", func() { 213 _, ec, _ := podmanTest.RunLsContainer("test1") 214 Expect(ec).To(Equal(0)) 215 216 result := podmanTest.Podman([]string{"ps", "-a", "--format", "json"}) 217 result.WaitWithDefaultTimeout() 218 Expect(result.ExitCode()).To(Equal(0)) 219 Expect(result.IsJSONOutputValid()).To(BeTrue()) 220 // must contain "Status" 221 match, StatusLine := result.GrepString(`Status`) 222 Expect(match).To(BeTrue()) 223 // container is running or exit, so it must contain `ago` 224 Expect(StatusLine[0]).To(ContainSubstring("ago")) 225 }) 226 227 It("podman ps namespace flag with go template format", func() { 228 _, ec, _ := podmanTest.RunLsContainer("test1") 229 Expect(ec).To(Equal(0)) 230 231 result := podmanTest.Podman([]string{"ps", "-a", "--format", "table {{.ID}} {{.Image}} {{.ImageID}} {{.Labels}}"}) 232 result.WaitWithDefaultTimeout() 233 234 Expect(result.OutputToStringArray()[0]).ToNot(ContainSubstring("table")) 235 Expect(result.OutputToStringArray()[0]).ToNot(ContainSubstring("ImageID")) 236 Expect(result.OutputToStringArray()[0]).To(ContainSubstring("alpine:latest")) 237 Expect(result).Should(Exit(0)) 238 }) 239 240 It("podman ps ancestor filter flag", func() { 241 _, ec, cid := podmanTest.RunLsContainer("test1") 242 Expect(ec).To(Equal(0)) 243 244 result := podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=quay.io/libpod/alpine:latest"}) 245 result.WaitWithDefaultTimeout() 246 Expect(result.ExitCode()).To(Equal(0)) 247 Expect(result.OutputToString()).To(Equal(cid)) 248 249 // Query just by image name, without :latest tag 250 result = podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "-a", "--filter", "ancestor=quay.io/libpod/alpine"}) 251 result.WaitWithDefaultTimeout() 252 Expect(result.ExitCode()).To(Equal(0)) 253 Expect(result.OutputToString()).To(Equal(cid)) 254 }) 255 256 It("podman ps id filter flag", func() { 257 _, ec, fullCid := podmanTest.RunLsContainer("") 258 Expect(ec).To(Equal(0)) 259 260 result := podmanTest.Podman([]string{"ps", "-a", "--filter", fmt.Sprintf("id=%s", fullCid)}) 261 result.WaitWithDefaultTimeout() 262 Expect(result.ExitCode()).To(Equal(0)) 263 }) 264 265 It("podman ps id filter flag", func() { 266 session := podmanTest.RunTopContainer("") 267 session.WaitWithDefaultTimeout() 268 Expect(session.ExitCode()).To(Equal(0)) 269 fullCid := session.OutputToString() 270 271 result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "status=running"}) 272 result.WaitWithDefaultTimeout() 273 Expect(result.ExitCode()).To(Equal(0)) 274 Expect(result.OutputToStringArray()[0]).To(Equal(fullCid)) 275 }) 276 277 It("podman ps multiple filters", func() { 278 session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", "--label", "key1=value1", ALPINE, "top"}) 279 session.WaitWithDefaultTimeout() 280 Expect(session.ExitCode()).To(Equal(0)) 281 fullCid := session.OutputToString() 282 283 session2 := podmanTest.Podman([]string{"run", "-d", "--name", "test2", "--label", "key1=value1", ALPINE, "top"}) 284 session2.WaitWithDefaultTimeout() 285 Expect(session2.ExitCode()).To(Equal(0)) 286 287 result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "name=test1", "--filter", "label=key1=value1"}) 288 result.WaitWithDefaultTimeout() 289 Expect(result.ExitCode()).To(Equal(0)) 290 291 output := result.OutputToStringArray() 292 Expect(len(output)).To(Equal(1)) 293 Expect(output[0]).To(Equal(fullCid)) 294 }) 295 296 It("podman ps filter by exited does not need all", func() { 297 ctr := podmanTest.Podman([]string{"run", "-t", "-i", ALPINE, "ls", "/"}) 298 ctr.WaitWithDefaultTimeout() 299 Expect(ctr.ExitCode()).To(Equal(0)) 300 301 psAll := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc"}) 302 psAll.WaitWithDefaultTimeout() 303 Expect(psAll.ExitCode()).To(Equal(0)) 304 305 psFilter := podmanTest.Podman([]string{"ps", "--no-trunc", "--quiet", "--filter", "status=exited"}) 306 psFilter.WaitWithDefaultTimeout() 307 Expect(psFilter.ExitCode()).To(Equal(0)) 308 309 Expect(psAll.OutputToString()).To(Equal(psFilter.OutputToString())) 310 }) 311 312 It("podman filter without status does not find non-running", func() { 313 ctrName := "aContainerName" 314 ctr := podmanTest.Podman([]string{"create", "--name", ctrName, "-t", "-i", ALPINE, "ls", "/"}) 315 ctr.WaitWithDefaultTimeout() 316 Expect(ctr.ExitCode()).To(Equal(0)) 317 318 psFilter := podmanTest.Podman([]string{"ps", "--no-trunc", "--quiet", "--format", "{{.Names}}", "--filter", fmt.Sprintf("name=%s", ctrName)}) 319 psFilter.WaitWithDefaultTimeout() 320 Expect(psFilter.ExitCode()).To(Equal(0)) 321 322 Expect(strings.Contains(psFilter.OutputToString(), ctrName)).To(BeFalse()) 323 }) 324 325 It("podman ps mutually exclusive flags", func() { 326 session := podmanTest.Podman([]string{"ps", "-aqs"}) 327 session.WaitWithDefaultTimeout() 328 Expect(session).To(ExitWithError()) 329 330 session = podmanTest.Podman([]string{"ps", "-a", "--ns", "-s"}) 331 session.WaitWithDefaultTimeout() 332 Expect(session).To(ExitWithError()) 333 }) 334 335 It("podman --sort by size", func() { 336 session := podmanTest.Podman([]string{"create", "busybox", "ls"}) 337 session.WaitWithDefaultTimeout() 338 Expect(session.ExitCode()).To(Equal(0)) 339 340 session = podmanTest.Podman([]string{"create", "-t", ALPINE, "top"}) 341 session.WaitWithDefaultTimeout() 342 Expect(session.ExitCode()).To(Equal(0)) 343 344 session = podmanTest.Podman([]string{"ps", "-a", "-s", "--sort=size", "--format", "{{.Size}}"}) 345 session.WaitWithDefaultTimeout() 346 Expect(session.ExitCode()).To(Equal(0)) 347 348 sortedArr := session.OutputToStringArray() 349 350 // TODO: This may be broken - the test was running without the 351 // ability to perform any sorting for months and succeeded 352 // without error. 353 Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { 354 r := regexp.MustCompile(`^\S+\s+\(virtual (\S+)\)`) 355 matches1 := r.FindStringSubmatch(sortedArr[i]) 356 matches2 := r.FindStringSubmatch(sortedArr[j]) 357 358 // sanity check in case an oddly formatted size appears 359 if len(matches1) < 2 || len(matches2) < 2 { 360 return sortedArr[i] < sortedArr[j] 361 } else { 362 size1, _ := units.FromHumanSize(matches1[1]) 363 size2, _ := units.FromHumanSize(matches2[1]) 364 return size1 < size2 365 } 366 })).To(BeTrue()) 367 368 }) 369 370 It("podman --sort by command", func() { 371 session := podmanTest.RunTopContainer("") 372 session.WaitWithDefaultTimeout() 373 Expect(session.ExitCode()).To(Equal(0)) 374 375 session = podmanTest.Podman([]string{"run", "-d", ALPINE, "pwd"}) 376 session.WaitWithDefaultTimeout() 377 Expect(session.ExitCode()).To(Equal(0)) 378 379 session = podmanTest.Podman([]string{"ps", "-a", "--sort=command", "--format", "{{.Command}}"}) 380 381 session.WaitWithDefaultTimeout() 382 Expect(session.ExitCode()).To(Equal(0)) 383 384 sortedArr := session.OutputToStringArray() 385 386 Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { return sortedArr[i] < sortedArr[j] })).To(BeTrue()) 387 388 }) 389 390 It("podman --pod", func() { 391 _, ec, podid := podmanTest.CreatePod("") 392 Expect(ec).To(Equal(0)) 393 394 session := podmanTest.RunTopContainerInPod("", podid) 395 session.WaitWithDefaultTimeout() 396 Expect(session.ExitCode()).To(Equal(0)) 397 398 session = podmanTest.Podman([]string{"ps", "--pod", "--no-trunc"}) 399 400 session.WaitWithDefaultTimeout() 401 Expect(session.ExitCode()).To(Equal(0)) 402 403 Expect(session.OutputToString()).To(ContainSubstring(podid)) 404 }) 405 406 It("podman --pod with a non-empty pod name", func() { 407 podName := "testPodName" 408 _, ec, podid := podmanTest.CreatePod(podName) 409 Expect(ec).To(Equal(0)) 410 411 session := podmanTest.RunTopContainerInPod("", podName) 412 session.WaitWithDefaultTimeout() 413 Expect(session.ExitCode()).To(Equal(0)) 414 415 // "--no-trunc" must be given. If not it will trunc the pod ID 416 // in the output and you will have to trunc it in the test too. 417 session = podmanTest.Podman([]string{"ps", "--pod", "--no-trunc"}) 418 419 session.WaitWithDefaultTimeout() 420 Expect(session.ExitCode()).To(Equal(0)) 421 422 output := session.OutputToString() 423 Expect(output).To(ContainSubstring(podid)) 424 Expect(output).To(ContainSubstring(podName)) 425 }) 426 427 It("podman ps test with single port range", func() { 428 session := podmanTest.Podman([]string{"run", "-dt", "-p", "2000-2006:2000-2006", ALPINE, "top"}) 429 session.WaitWithDefaultTimeout() 430 Expect(session.ExitCode()).To(Equal(0)) 431 432 session = podmanTest.Podman([]string{"ps", "--format", "{{.Ports}}"}) 433 session.WaitWithDefaultTimeout() 434 Expect(session.OutputToString()).To(ContainSubstring("0.0.0.0:2000-2006")) 435 }) 436 437 It("podman ps test with invalid port range", func() { 438 session := podmanTest.Podman([]string{ 439 "run", "-p", "1000-2000:2000-3000", "-p", "1999-2999:3001-4001", ALPINE, 440 }) 441 session.WaitWithDefaultTimeout() 442 Expect(session.ExitCode()).To(Equal(125)) 443 Expect(session.ErrorToString()).To(ContainSubstring("conflicting port mappings for host port 1999")) 444 }) 445 446 It("podman ps test with multiple port range", func() { 447 session := podmanTest.Podman([]string{ 448 "run", "-dt", 449 "-p", "3000-3001:3000-3001", 450 "-p", "3100-3102:4000-4002", 451 "-p", "30080:30080", 452 "-p", "30443:30443", 453 "-p", "8000:8080", 454 ALPINE, "top"}, 455 ) 456 session.WaitWithDefaultTimeout() 457 Expect(session.ExitCode()).To(Equal(0)) 458 459 session = podmanTest.Podman([]string{"ps", "--format", "{{.Ports}}"}) 460 session.WaitWithDefaultTimeout() 461 Expect(session.OutputToString()).To(ContainSubstring( 462 "0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:3100-3102->4000-4002/tcp, 0.0.0.0:8000->8080/tcp, 0.0.0.0:30080->30080/tcp, 0.0.0.0:30443->30443/tcp", 463 )) 464 }) 465 466 It("podman ps sync flag", func() { 467 session := podmanTest.RunTopContainer("") 468 session.WaitWithDefaultTimeout() 469 Expect(session.ExitCode()).To(Equal(0)) 470 fullCid := session.OutputToString() 471 472 result := podmanTest.Podman([]string{"ps", "-q", "--no-trunc", "--sync"}) 473 result.WaitWithDefaultTimeout() 474 Expect(result.ExitCode()).To(Equal(0)) 475 Expect(result.OutputToStringArray()[0]).To(Equal(fullCid)) 476 }) 477 478 It("podman ps filter name regexp", func() { 479 session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", ALPINE, "top"}) 480 session.WaitWithDefaultTimeout() 481 Expect(session.ExitCode()).To(Equal(0)) 482 fullCid := session.OutputToString() 483 484 session2 := podmanTest.Podman([]string{"run", "-d", "--name", "test11", ALPINE, "top"}) 485 session2.WaitWithDefaultTimeout() 486 Expect(session2.ExitCode()).To(Equal(0)) 487 488 result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "name=test1"}) 489 result.WaitWithDefaultTimeout() 490 Expect(result.ExitCode()).To(Equal(0)) 491 492 output := result.OutputToStringArray() 493 Expect(len(output)).To(Equal(2)) 494 495 result = podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "name=test1$"}) 496 result.WaitWithDefaultTimeout() 497 Expect(result.ExitCode()).To(Equal(0)) 498 499 output = result.OutputToStringArray() 500 Expect(len(output)).To(Equal(1)) 501 Expect(output[0]).To(Equal(fullCid)) 502 }) 503 504 It("podman ps quiet template", func() { 505 ctrName := "testCtr" 506 session := podmanTest.Podman([]string{"run", "-d", "--name", ctrName, ALPINE, "top"}) 507 session.WaitWithDefaultTimeout() 508 Expect(session.ExitCode()).To(Equal(0)) 509 510 result := podmanTest.Podman([]string{"ps", "-q", "-a", "--format", "{{ .Names }}"}) 511 result.WaitWithDefaultTimeout() 512 Expect(result.ExitCode()).To(Equal(0)) 513 514 output := result.OutputToStringArray() 515 Expect(len(output)).To(Equal(1)) 516 Expect(output[0]).To(Equal(ctrName)) 517 }) 518 519 It("podman ps test with port shared with pod", func() { 520 podName := "testPod" 521 pod := podmanTest.Podman([]string{"pod", "create", "-p", "8080:80", "--name", podName}) 522 pod.WaitWithDefaultTimeout() 523 Expect(pod.ExitCode()).To(Equal(0)) 524 525 ctrName := "testCtr" 526 session := podmanTest.Podman([]string{"run", "--name", ctrName, "-dt", "--pod", podName, ALPINE, "top"}) 527 session.WaitWithDefaultTimeout() 528 Expect(session.ExitCode()).To(Equal(0)) 529 530 ps := podmanTest.Podman([]string{"ps", "--filter", fmt.Sprintf("name=%s", ctrName), "--format", "{{.Ports}}"}) 531 ps.WaitWithDefaultTimeout() 532 Expect(ps.ExitCode()).To(Equal(0)) 533 Expect(ps.OutputToString()).To(ContainSubstring("0.0.0.0:8080->80/tcp")) 534 }) 535 536 It("podman ps truncate long create command", func() { 537 session := podmanTest.Podman([]string{"run", ALPINE, "echo", "very", "long", "create", "command"}) 538 session.WaitWithDefaultTimeout() 539 Expect(session.ExitCode()).To(Equal(0)) 540 541 session = podmanTest.Podman([]string{"ps", "-a"}) 542 session.WaitWithDefaultTimeout() 543 Expect(session.OutputToString()).To(ContainSubstring("echo very long cr...")) 544 }) 545 It("podman ps --format {{RunningFor}}", func() { 546 _, ec, _ := podmanTest.RunLsContainer("") 547 Expect(ec).To(Equal(0)) 548 549 result := podmanTest.Podman([]string{"ps", "-a", "--format", "{{.RunningFor}}"}) 550 result.WaitWithDefaultTimeout() 551 Expect(result.ExitCode()).To(Equal(0)) 552 Expect(result.OutputToString()).To(ContainSubstring("ago")) 553 }) 554 555 It("podman ps filter test", func() { 556 session := podmanTest.Podman([]string{"run", "-d", "--name", "test1", "--label", "foo=1", 557 "--label", "bar=2", "--volume", "volume1:/test", ALPINE, "top"}) 558 session.WaitWithDefaultTimeout() 559 Expect(session.ExitCode()).To(Equal(0)) 560 cid1 := session.OutputToString() 561 562 session = podmanTest.Podman([]string{"run", "--name", "test2", "--label", "foo=1", 563 ALPINE, "ls", "/fail"}) 564 session.WaitWithDefaultTimeout() 565 Expect(session.ExitCode()).To(Equal(1)) 566 567 session = podmanTest.Podman([]string{"create", "--name", "test3", ALPINE, cid1}) 568 session.WaitWithDefaultTimeout() 569 Expect(session.ExitCode()).To(Equal(0)) 570 571 session = podmanTest.Podman([]string{"run", "--name", "test4", "--volume", "volume1:/test1", 572 "--volume", "/:/test2", ALPINE, "ls"}) 573 session.WaitWithDefaultTimeout() 574 Expect(session.ExitCode()).To(Equal(0)) 575 576 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "name=test"}) 577 session.WaitWithDefaultTimeout() 578 Expect(session.ExitCode()).To(Equal(0)) 579 Expect(len(session.OutputToStringArray())).To(Equal(5)) 580 Expect(session.LineInOutputContains("test1")).To(BeTrue()) 581 Expect(session.LineInOutputContains("test2")).To(BeTrue()) 582 Expect(session.LineInOutputContains("test3")).To(BeTrue()) 583 Expect(session.LineInOutputContains("test4")).To(BeTrue()) 584 585 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "name=test1", "--filter", "name=test2"}) 586 session.WaitWithDefaultTimeout() 587 Expect(session.ExitCode()).To(Equal(0)) 588 Expect(len(session.OutputToStringArray())).To(Equal(3)) 589 Expect(session.LineInOutputContains("test1")).To(BeTrue()) 590 Expect(session.LineInOutputContains("test2")).To(BeTrue()) 591 592 // check container id matches with regex 593 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "id=" + cid1[:40], "--filter", "id=" + cid1 + "$"}) 594 session.WaitWithDefaultTimeout() 595 Expect(session.ExitCode()).To(Equal(0)) 596 Expect(len(session.OutputToStringArray())).To(Equal(2)) 597 Expect(session.LineInOutputContains("test1")).To(BeTrue()) 598 599 session = podmanTest.Podman([]string{"ps", "--filter", "status=created"}) 600 session.WaitWithDefaultTimeout() 601 Expect(session.ExitCode()).To(Equal(0)) 602 Expect(len(session.OutputToStringArray())).To(Equal(2)) 603 Expect(session.LineInOutputContains("test3")).To(BeTrue()) 604 605 session = podmanTest.Podman([]string{"ps", "--filter", "status=created", "--filter", "status=exited"}) 606 session.WaitWithDefaultTimeout() 607 Expect(session.ExitCode()).To(Equal(0)) 608 Expect(len(session.OutputToStringArray())).To(Equal(4)) 609 Expect(session.LineInOutputContains("test2")).To(BeTrue()) 610 Expect(session.LineInOutputContains("test3")).To(BeTrue()) 611 Expect(session.LineInOutputContains("test4")).To(BeTrue()) 612 613 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "label=foo=1"}) 614 session.WaitWithDefaultTimeout() 615 Expect(session.ExitCode()).To(Equal(0)) 616 Expect(len(session.OutputToStringArray())).To(Equal(3)) 617 Expect(session.LineInOutputContains("test1")).To(BeTrue()) 618 Expect(session.LineInOutputContains("test2")).To(BeTrue()) 619 620 session = podmanTest.Podman([]string{"ps", "--filter", "label=foo=1", "--filter", "status=exited"}) 621 session.WaitWithDefaultTimeout() 622 Expect(session.ExitCode()).To(Equal(0)) 623 Expect(len(session.OutputToStringArray())).To(Equal(2)) 624 Expect(session.LineInOutputContains("test2")).To(BeTrue()) 625 626 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "label=foo=1", "--filter", "label=non=1"}) 627 session.WaitWithDefaultTimeout() 628 Expect(session.ExitCode()).To(Equal(0)) 629 Expect(len(session.OutputToStringArray())).To(Equal(1)) 630 631 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "label=foo=1", "--filter", "label=bar=2"}) 632 session.WaitWithDefaultTimeout() 633 Expect(session.ExitCode()).To(Equal(0)) 634 Expect(len(session.OutputToStringArray())).To(Equal(2)) 635 Expect(session.LineInOutputContains("test1")).To(BeTrue()) 636 637 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "exited=1"}) 638 session.WaitWithDefaultTimeout() 639 Expect(session.ExitCode()).To(Equal(0)) 640 Expect(len(session.OutputToStringArray())).To(Equal(2)) 641 Expect(session.LineInOutputContains("test2")).To(BeTrue()) 642 643 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "exited=1", "--filter", "exited=0"}) 644 session.WaitWithDefaultTimeout() 645 Expect(session.ExitCode()).To(Equal(0)) 646 Expect(len(session.OutputToStringArray())).To(Equal(3)) 647 Expect(session.LineInOutputContains("test2")).To(BeTrue()) 648 Expect(session.LineInOutputContains("test4")).To(BeTrue()) 649 650 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "volume=volume1"}) 651 session.WaitWithDefaultTimeout() 652 Expect(session.ExitCode()).To(Equal(0)) 653 Expect(len(session.OutputToStringArray())).To(Equal(3)) 654 Expect(session.LineInOutputContains("test1")).To(BeTrue()) 655 Expect(session.LineInOutputContains("test4")).To(BeTrue()) 656 657 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "volume=/:/test2"}) 658 session.WaitWithDefaultTimeout() 659 Expect(session.ExitCode()).To(Equal(0)) 660 Expect(len(session.OutputToStringArray())).To(Equal(2)) 661 Expect(session.LineInOutputContains("test4")).To(BeTrue()) 662 663 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "before=test2"}) 664 session.WaitWithDefaultTimeout() 665 Expect(session.ExitCode()).To(Equal(0)) 666 Expect(len(session.OutputToStringArray())).To(Equal(2)) 667 Expect(session.LineInOutputContains("test1")).To(BeTrue()) 668 669 session = podmanTest.Podman([]string{"ps", "--all", "--filter", "since=test2"}) 670 session.WaitWithDefaultTimeout() 671 Expect(session.ExitCode()).To(Equal(0)) 672 Expect(len(session.OutputToStringArray())).To(Equal(3)) 673 Expect(session.LineInOutputContains("test3")).To(BeTrue()) 674 Expect(session.LineInOutputContains("test4")).To(BeTrue()) 675 }) 676 })