mirror of
https://github.com/containers/podman
synced 2024-10-20 17:23:30 +00:00
d5e690914d
A pause container is added to the pod if the user opts in. The default pause image and command can be overridden. Pause containers are ignored in ps unless the -a option is present. Pod inspect and pod ps show shared namespaces and pause container. A pause container can't be removed with podman rm, and a pod can be removed if it only has a pause container. Signed-off-by: haircommander <pehunt@redhat.com> Closes: #1187 Approved by: mheon
267 lines
8.1 KiB
Go
267 lines
8.1 KiB
Go
package integration
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
"sort"
|
|
|
|
"github.com/docker/go-units"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Podman ps", func() {
|
|
var (
|
|
tempdir string
|
|
err error
|
|
podmanTest PodmanTest
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
tempdir, err = CreateTempDirInTempDir()
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
podmanTest = PodmanCreate(tempdir)
|
|
podmanTest.RestoreAllArtifacts()
|
|
})
|
|
|
|
AfterEach(func() {
|
|
podmanTest.Cleanup()
|
|
f := CurrentGinkgoTestDescription()
|
|
timedResult := fmt.Sprintf("Test: %s completed in %f seconds", f.TestText, f.Duration.Seconds())
|
|
GinkgoWriter.Write([]byte(timedResult))
|
|
})
|
|
|
|
It("podman ps no containers", func() {
|
|
session := podmanTest.Podman([]string{"ps"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
})
|
|
|
|
It("podman ps default", func() {
|
|
session := podmanTest.RunTopContainer("")
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
|
})
|
|
|
|
It("podman ps all", func() {
|
|
_, ec, _ := podmanTest.RunLsContainer("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
|
})
|
|
|
|
It("podman ps size flag", func() {
|
|
_, ec, _ := podmanTest.RunLsContainer("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a", "--size"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
|
})
|
|
|
|
It("podman ps quiet flag", func() {
|
|
_, ec, fullCid := podmanTest.RunLsContainer("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a", "-q"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
|
Expect(fullCid).To(ContainSubstring(result.OutputToStringArray()[0]))
|
|
})
|
|
|
|
It("podman ps latest flag", func() {
|
|
_, ec, _ := podmanTest.RunLsContainer("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "--latest"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
|
})
|
|
|
|
It("podman ps last flag", func() {
|
|
Skip("--last flag nonfunctional and disabled")
|
|
|
|
_, ec, _ := podmanTest.RunLsContainer("test1")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
_, ec, _ = podmanTest.RunLsContainer("test2")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
_, ec, _ = podmanTest.RunLsContainer("test3")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "--last", "2"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(Equal(3))
|
|
})
|
|
|
|
It("podman ps no-trunc", func() {
|
|
_, ec, fullCid := podmanTest.RunLsContainer("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
|
Expect(fullCid).To(Equal(result.OutputToStringArray()[0]))
|
|
})
|
|
|
|
It("podman ps namespace flag", func() {
|
|
_, ec, _ := podmanTest.RunLsContainer("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a", "--namespace"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
|
})
|
|
|
|
It("podman ps namespace flag with json format", func() {
|
|
_, ec, _ := podmanTest.RunLsContainer("test1")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a", "--ns", "--format", "json"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(result.IsJSONOutputValid()).To(BeTrue())
|
|
})
|
|
|
|
It("podman ps namespace flag with go template format", func() {
|
|
_, ec, _ := podmanTest.RunLsContainer("test1")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a", "--format", "\"table {{.ID}} {{.Image}} {{.Labels}}\""})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(result.IsJSONOutputValid()).To(BeTrue())
|
|
})
|
|
|
|
It("podman ps ancestor filter flag", func() {
|
|
_, ec, _ := podmanTest.RunLsContainer("test1")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a", "--filter", "ancestor=docker.io/library/alpine:latest"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
})
|
|
|
|
It("podman ps id filter flag", func() {
|
|
_, ec, fullCid := podmanTest.RunLsContainer("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-a", "--filter", fmt.Sprintf("id=%s", fullCid)})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
})
|
|
|
|
It("podman ps id filter flag", func() {
|
|
session := podmanTest.RunTopContainer("")
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
fullCid := session.OutputToString()
|
|
|
|
result := podmanTest.Podman([]string{"ps", "-aq", "--no-trunc", "--filter", "status=running"})
|
|
result.WaitWithDefaultTimeout()
|
|
Expect(result.ExitCode()).To(Equal(0))
|
|
Expect(result.OutputToStringArray()[0]).To(Equal(fullCid))
|
|
})
|
|
|
|
It("podman ps mutually exclusive flags", func() {
|
|
session := podmanTest.Podman([]string{"ps", "-aqs"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Not(Equal(0)))
|
|
|
|
session = podmanTest.Podman([]string{"ps", "-a", "--ns", "-s"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Not(Equal(0)))
|
|
})
|
|
|
|
It("podman --sort by size", func() {
|
|
session := podmanTest.Podman([]string{"create", "busybox", "ls"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
session = podmanTest.Podman([]string{"create", "-dt", ALPINE, "top"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
session = podmanTest.Podman([]string{"ps", "-a", "-s", "--sort=size", "--format", "{{.Size}}"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
sortedArr := session.OutputToStringArray()
|
|
|
|
// TODO: This may be broken - the test was running without the
|
|
// ability to perform any sorting for months and succeeded
|
|
// without error.
|
|
Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool {
|
|
r := regexp.MustCompile(`^\S+\s+\(virtual (\S+)\)`)
|
|
matches1 := r.FindStringSubmatch(sortedArr[i])
|
|
matches2 := r.FindStringSubmatch(sortedArr[j])
|
|
|
|
// sanity check in case an oddly formatted size appears
|
|
if len(matches1) < 2 || len(matches2) < 2 {
|
|
return sortedArr[i] < sortedArr[j]
|
|
} else {
|
|
size1, _ := units.FromHumanSize(matches1[1])
|
|
size2, _ := units.FromHumanSize(matches2[1])
|
|
return size1 < size2
|
|
}
|
|
})).To(BeTrue())
|
|
|
|
})
|
|
|
|
It("podman --sort by command", func() {
|
|
session := podmanTest.RunTopContainer("")
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
podmanTest.RestoreArtifact(fedoraMinimal)
|
|
session = podmanTest.Podman([]string{"run", "-d", fedoraMinimal, "pwd"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
session = podmanTest.Podman([]string{"ps", "-a", "--sort=command", "--format", "{{.Command}}"})
|
|
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
sortedArr := session.OutputToStringArray()
|
|
|
|
Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { return sortedArr[i] < sortedArr[j] })).To(BeTrue())
|
|
|
|
})
|
|
|
|
It("podman --pod", func() {
|
|
_, ec, podid := podmanTest.CreatePod("")
|
|
Expect(ec).To(Equal(0))
|
|
|
|
session := podmanTest.RunTopContainerInPod("", podid)
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
session = podmanTest.Podman([]string{"ps", "--pod", "--no-trunc"})
|
|
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
Expect(session.OutputToString()).To(ContainSubstring(podid))
|
|
|
|
})
|
|
})
|