mirror of
https://github.com/containers/podman.git
synced 2025-08-06 03:19:52 +08:00

Because our tests are getting so long, we want to be able to audit which tests are taking the longest to complete. This may indicate a bad test, bad CI, bad code, etc and therefore should be auditable. Also, make speed improvements to tests by making sure we only unpack caches images that actually get used. Signed-off-by: baude <bbaude@redhat.com> Closes: #1178 Approved by: mheon
253 lines
7.8 KiB
Go
253 lines
7.8 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() {
|
|
// these images chosen because their size would be sorted differently alphabetically vs
|
|
// by the size of their virtual fs
|
|
session := podmanTest.Podman([]string{"run", "docker.io/mattdm/fedora-small", "ls"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session.ExitCode()).To(Equal(0))
|
|
|
|
podmanTest.RestoreArtifact(nginx)
|
|
session = podmanTest.Podman([]string{"run", "-dt", "-P", "docker.io/library/nginx:latest"})
|
|
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())
|
|
|
|
})
|
|
})
|