mirror of
https://github.com/containers/podman.git
synced 2025-06-06 15:00:40 +08:00
Add tests to make sure podman container and podman image commands work
We have little to no testing to make sure we don't break podman image and podman container commands that wrap traditional commands. This PR adds tests for each of the commands. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
@ -51,6 +51,16 @@ var _ = Describe("Podman attach", func() {
|
||||
Expect(results.ExitCode()).To(Equal(125))
|
||||
})
|
||||
|
||||
It("podman container attach to non-running container", func() {
|
||||
session := podmanTest.Podman([]string{"container", "create", "--name", "test1", "-d", "-i", ALPINE, "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
results := podmanTest.Podman([]string{"container", "attach", "test1"})
|
||||
results.WaitWithDefaultTimeout()
|
||||
Expect(results.ExitCode()).To(Equal(125))
|
||||
})
|
||||
|
||||
It("podman attach to multiple containers", func() {
|
||||
session := podmanTest.RunTopContainer("test1")
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -50,6 +50,21 @@ var _ = Describe("Podman commit", func() {
|
||||
Expect(StringInSlice("foobar.com/test1-image:latest", data[0].RepoTags)).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman container commit container", func() {
|
||||
_, ec, _ := podmanTest.RunLsContainer("test1")
|
||||
Expect(ec).To(Equal(0))
|
||||
Expect(podmanTest.NumberOfContainers()).To(Equal(1))
|
||||
|
||||
session := podmanTest.Podman([]string{"container", "commit", "test1", "foobar.com/test1-image:latest"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
check := podmanTest.Podman([]string{"container", "inspect", "foobar.com/test1-image:latest"})
|
||||
check.WaitWithDefaultTimeout()
|
||||
data := check.InspectImageJSON()
|
||||
Expect(StringInSlice("foobar.com/test1-image:latest", data[0].RepoTags)).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman commit container with message", func() {
|
||||
_, ec, _ := podmanTest.RunLsContainer("test1")
|
||||
Expect(ec).To(Equal(0))
|
||||
|
@ -56,6 +56,13 @@ var _ = Describe("Podman create", func() {
|
||||
Expect(podmanTest.NumberOfContainers()).To(Equal(1))
|
||||
})
|
||||
|
||||
It("podman container create container based on a remote image", func() {
|
||||
session := podmanTest.Podman([]string{"container", "create", BB_GLIBC, "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(podmanTest.NumberOfContainers()).To(Equal(1))
|
||||
})
|
||||
|
||||
It("podman create using short options", func() {
|
||||
session := podmanTest.Podman([]string{"create", ALPINE, "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -43,6 +43,13 @@ var _ = Describe("Podman diff", func() {
|
||||
Expect(len(session.OutputToStringArray())).To(BeNumerically(">", 0))
|
||||
})
|
||||
|
||||
It("podman container diff of image", func() {
|
||||
session := podmanTest.Podman([]string{"container", "diff", ALPINE})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(len(session.OutputToStringArray())).To(BeNumerically(">", 0))
|
||||
})
|
||||
|
||||
It("podman diff bogus image", func() {
|
||||
session := podmanTest.Podman([]string{"diff", "1234"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -57,6 +57,16 @@ var _ = Describe("Podman exec", func() {
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman container exec simple command", func() {
|
||||
setup := podmanTest.RunTopContainer("test1")
|
||||
setup.WaitWithDefaultTimeout()
|
||||
Expect(setup.ExitCode()).To(Equal(0))
|
||||
|
||||
session := podmanTest.Podman([]string{"container", "exec", "test1", "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman exec simple command using latest", func() {
|
||||
setup := podmanTest.RunTopContainer("test1")
|
||||
setup.WaitWithDefaultTimeout()
|
||||
|
@ -50,6 +50,22 @@ var _ = Describe("Podman export", func() {
|
||||
Expect(err).To(BeNil())
|
||||
})
|
||||
|
||||
It("podman container export output flag", func() {
|
||||
SkipIfRemote()
|
||||
_, ec, cid := podmanTest.RunLsContainer("")
|
||||
Expect(ec).To(Equal(0))
|
||||
|
||||
outfile := filepath.Join(podmanTest.TempDir, "container.tar")
|
||||
result := podmanTest.Podman([]string{"container", "export", "-o", outfile, cid})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
_, err := os.Stat(outfile)
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
err = os.Remove(outfile)
|
||||
Expect(err).To(BeNil())
|
||||
})
|
||||
|
||||
It("podman export bad filename", func() {
|
||||
_, ec, cid := podmanTest.RunLsContainer("")
|
||||
Expect(ec).To(Equal(0))
|
||||
|
@ -43,6 +43,15 @@ var _ = Describe("Podman images", func() {
|
||||
Expect(session.LineInOuputStartsWith("docker.io/library/busybox")).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman image List", func() {
|
||||
session := podmanTest.Podman([]string{"image", "list"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(len(session.OutputToStringArray())).To(BeNumerically(">", 2))
|
||||
Expect(session.LineInOuputStartsWith("docker.io/library/alpine")).To(BeTrue())
|
||||
Expect(session.LineInOuputStartsWith("docker.io/library/busybox")).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman images with multiple tags", func() {
|
||||
// tag "docker.io/library/alpine:latest" to "foo:{a,b,c}"
|
||||
session := podmanTest.Podman([]string{"tag", ALPINE, "foo:a", "foo:b", "foo:c"})
|
||||
@ -135,6 +144,23 @@ var _ = Describe("Podman images", func() {
|
||||
Expect(len(result.OutputToStringArray())).To(Equal(1))
|
||||
})
|
||||
|
||||
It("podman image list filter after image", func() {
|
||||
if podmanTest.RemoteTest {
|
||||
Skip("Does not work on remote client")
|
||||
}
|
||||
rmi := podmanTest.Podman([]string{"image", "rm", "busybox"})
|
||||
rmi.WaitWithDefaultTimeout()
|
||||
Expect(rmi.ExitCode()).To(Equal(0))
|
||||
|
||||
dockerfile := `FROM docker.io/library/alpine:latest
|
||||
`
|
||||
podmanTest.BuildImage(dockerfile, "foobar.com/before:latest", "false")
|
||||
result := podmanTest.Podman([]string{"image", "list", "-q", "-f", "after=docker.io/library/alpine:latest"})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
Expect(len(result.OutputToStringArray())).To(Equal(1))
|
||||
})
|
||||
|
||||
It("podman images filter dangling", func() {
|
||||
if podmanTest.RemoteTest {
|
||||
Skip("Does not work on remote client")
|
||||
@ -164,6 +190,21 @@ var _ = Describe("Podman images", func() {
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman check for image with sha256: prefix", func() {
|
||||
if podmanTest.RemoteTest {
|
||||
Skip("Does not work on remote client")
|
||||
}
|
||||
session := podmanTest.Podman([]string{"image", "inspect", "--format=json", ALPINE})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(session.IsJSONOutputValid()).To(BeTrue())
|
||||
imageData := session.InspectImageJSON()
|
||||
|
||||
result := podmanTest.Podman([]string{"image", "ls", fmt.Sprintf("sha256:%s", imageData[0].ID)})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman images sort by tag", func() {
|
||||
session := podmanTest.Podman([]string{"images", "--sort", "tag", "--format={{.Tag}}"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -41,6 +41,19 @@ var _ = Describe("Podman kill", func() {
|
||||
Expect(session.ExitCode()).To(Not(Equal(0)))
|
||||
})
|
||||
|
||||
It("podman container kill a running container by id", func() {
|
||||
session := podmanTest.RunTopContainer("")
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
cid := session.OutputToString()
|
||||
|
||||
result := podmanTest.Podman([]string{"container", "kill", cid})
|
||||
result.WaitWithDefaultTimeout()
|
||||
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman kill a running container by id", func() {
|
||||
session := podmanTest.RunTopContainer("")
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -49,6 +49,21 @@ var _ = Describe("Podman mount", func() {
|
||||
Expect(umount.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman container mount", func() {
|
||||
setup := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"})
|
||||
setup.WaitWithDefaultTimeout()
|
||||
Expect(setup.ExitCode()).To(Equal(0))
|
||||
cid := setup.OutputToString()
|
||||
|
||||
mount := podmanTest.Podman([]string{"container", "mount", cid})
|
||||
mount.WaitWithDefaultTimeout()
|
||||
Expect(mount.ExitCode()).To(Equal(0))
|
||||
|
||||
umount := podmanTest.Podman([]string{"container", "umount", cid})
|
||||
umount.WaitWithDefaultTimeout()
|
||||
Expect(umount.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman mount with json format", func() {
|
||||
setup := podmanTest.Podman([]string{"create", ALPINE, "ls"})
|
||||
setup.WaitWithDefaultTimeout()
|
||||
|
@ -80,6 +80,23 @@ var _ = Describe("Podman pause", func() {
|
||||
result.WaitWithDefaultTimeout()
|
||||
})
|
||||
|
||||
It("podman container pause a running container by id", func() {
|
||||
session := podmanTest.RunTopContainer("")
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
cid := session.OutputToString()
|
||||
|
||||
result := podmanTest.Podman([]string{"container", "pause", cid})
|
||||
result.WaitWithDefaultTimeout()
|
||||
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
|
||||
Expect(podmanTest.GetContainerStatus()).To(ContainSubstring(pausedState))
|
||||
|
||||
result = podmanTest.Podman([]string{"container", "unpause", cid})
|
||||
result.WaitWithDefaultTimeout()
|
||||
})
|
||||
|
||||
It("podman unpause a running container by id", func() {
|
||||
session := podmanTest.RunTopContainer("")
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -60,6 +60,19 @@ var _ = Describe("Podman port", func() {
|
||||
Expect(result.LineInOuputStartsWith(fmt.Sprintf("80/tcp -> 0.0.0.0:%s", port))).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman container port -l nginx", func() {
|
||||
podmanTest.RestoreArtifact(nginx)
|
||||
session := podmanTest.Podman([]string{"container", "run", "-dt", "-P", nginx})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
result := podmanTest.Podman([]string{"container", "port", "-l"})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
port := strings.Split(result.OutputToStringArray()[0], ":")[1]
|
||||
Expect(result.LineInOuputStartsWith(fmt.Sprintf("80/tcp -> 0.0.0.0:%s", port))).To(BeTrue())
|
||||
})
|
||||
|
||||
It("podman port -l port nginx", func() {
|
||||
podmanTest.RestoreArtifact(nginx)
|
||||
session := podmanTest.Podman([]string{"run", "-dt", "-P", nginx})
|
||||
|
@ -88,6 +88,17 @@ var _ = Describe("Podman rm", func() {
|
||||
Expect(len(images.OutputToStringArray())).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman container image prune unused images", func() {
|
||||
prune := podmanTest.Podman([]string{"container", "image", "prune", "-a"})
|
||||
prune.WaitWithDefaultTimeout()
|
||||
Expect(prune.ExitCode()).To(Equal(0))
|
||||
|
||||
images := podmanTest.Podman([]string{"image", "list", "-a"})
|
||||
images.WaitWithDefaultTimeout()
|
||||
// all images are unused, so they all should be deleted!
|
||||
Expect(len(images.OutputToStringArray())).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman system image prune unused images", func() {
|
||||
SkipIfRemote()
|
||||
podmanTest.BuildImage(pruneImage, "alpine_bash:latest", "true")
|
||||
|
@ -65,6 +65,21 @@ var _ = Describe("Podman ps", func() {
|
||||
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
||||
})
|
||||
|
||||
It("podman container list all", func() {
|
||||
_, ec, _ := podmanTest.RunLsContainer("")
|
||||
Expect(ec).To(Equal(0))
|
||||
|
||||
result := podmanTest.Podman([]string{"container", "list", "-a"})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0))
|
||||
|
||||
result = podmanTest.Podman([]string{"container", "ls", "-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))
|
||||
|
@ -90,6 +90,21 @@ var _ = Describe("Podman restart", func() {
|
||||
Expect(restartTime.OutputToString()).To(Not(Equal(startTime.OutputToString())))
|
||||
})
|
||||
|
||||
It("Podman container restart running container", func() {
|
||||
_ = podmanTest.RunTopContainer("test1")
|
||||
ok := WaitForContainer(podmanTest)
|
||||
Expect(ok).To(BeTrue())
|
||||
startTime := podmanTest.Podman([]string{"container", "inspect", "--format='{{.State.StartedAt}}'", "test1"})
|
||||
startTime.WaitWithDefaultTimeout()
|
||||
|
||||
session := podmanTest.Podman([]string{"container", "restart", "test1"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
restartTime := podmanTest.Podman([]string{"container", "inspect", "--format='{{.State.StartedAt}}'", "test1"})
|
||||
restartTime.WaitWithDefaultTimeout()
|
||||
Expect(restartTime.OutputToString()).To(Not(Equal(startTime.OutputToString())))
|
||||
})
|
||||
|
||||
It("Podman restart multiple containers", func() {
|
||||
_, exitCode, _ := podmanTest.RunLsContainer("test1")
|
||||
Expect(exitCode).To(Equal(0))
|
||||
|
@ -65,6 +65,17 @@ var _ = Describe("Podman rm", func() {
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman container rm created container", func() {
|
||||
session := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
cid := session.OutputToString()
|
||||
|
||||
result := podmanTest.Podman([]string{"container", "rm", cid})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman rm running container with -f", func() {
|
||||
session := podmanTest.RunTopContainer("")
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -68,6 +68,20 @@ var _ = Describe("Podman run", func() {
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman container run a container based on on a short name with localhost", func() {
|
||||
podmanTest.RestoreArtifact(nginx)
|
||||
tag := podmanTest.Podman([]string{"container", "tag", nginx, "localhost/libpod/alpine_nginx:latest"})
|
||||
tag.WaitWithDefaultTimeout()
|
||||
|
||||
rmi := podmanTest.Podman([]string{"image", "rm", nginx})
|
||||
rmi.WaitWithDefaultTimeout()
|
||||
|
||||
session := podmanTest.Podman([]string{"container", "run", "libpod/alpine_nginx:latest", "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ErrorToString()).ToNot(ContainSubstring("Trying to pull"))
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman run a container based on local image with short options", func() {
|
||||
session := podmanTest.Podman([]string{"run", "-dt", ALPINE, "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -50,6 +50,16 @@ var _ = Describe("Podman start", func() {
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman container start single container by id", func() {
|
||||
session := podmanTest.Podman([]string{"container", "create", "-d", ALPINE, "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
cid := session.OutputToString()
|
||||
session = podmanTest.Podman([]string{"container", "start", cid})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman start single container by name", func() {
|
||||
session := podmanTest.Podman([]string{"create", "-d", "--name", "foobar99", ALPINE, "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -59,6 +59,15 @@ var _ = Describe("Podman stop", func() {
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman stop container by name", func() {
|
||||
session := podmanTest.RunTopContainer("test1")
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
session = podmanTest.Podman([]string{"container", "stop", "test1"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
It("podman stop stopped container", func() {
|
||||
session := podmanTest.RunTopContainer("test1")
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -65,6 +65,17 @@ var _ = Describe("Podman top", func() {
|
||||
Expect(len(result.OutputToStringArray())).To(BeNumerically(">", 1))
|
||||
})
|
||||
|
||||
It("podman container top on container", func() {
|
||||
session := podmanTest.Podman([]string{"container", "run", "-d", ALPINE, "top", "-d", "2"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
result := podmanTest.Podman([]string{"container", "top", "-l"})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
Expect(len(result.OutputToStringArray())).To(BeNumerically(">", 1))
|
||||
})
|
||||
|
||||
It("podman top with options", func() {
|
||||
session := podmanTest.Podman([]string{"run", "-d", ALPINE, "top", "-d", "2"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -66,4 +66,11 @@ var _ = Describe("Podman wait", func() {
|
||||
session = podmanTest.Podman([]string{"wait", "-l"})
|
||||
session.Wait(20)
|
||||
})
|
||||
It("podman container wait on latest container", func() {
|
||||
session := podmanTest.Podman([]string{"container", "run", "-d", ALPINE, "sleep", "1"})
|
||||
session.Wait(20)
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
session = podmanTest.Podman([]string{"container", "wait", "-l"})
|
||||
session.Wait(20)
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user