mirror of
https://github.com/containers/podman.git
synced 2025-09-29 01:35:06 +08:00
Add test cases to validate remove and list images api.
Includes testcase to validate list image api count as we create and delete images Include testcase to validate remove image api responses with container instance, etc. Signed-off-by: Sujil02 <sushah@redhat.com>
This commit is contained in:
@ -16,6 +16,7 @@ import (
|
|||||||
const (
|
const (
|
||||||
defaultPodmanBinaryLocation string = "/usr/bin/podman"
|
defaultPodmanBinaryLocation string = "/usr/bin/podman"
|
||||||
alpine string = "docker.io/library/alpine:latest"
|
alpine string = "docker.io/library/alpine:latest"
|
||||||
|
busybox string = "docker.io/library/busybox:latest"
|
||||||
)
|
)
|
||||||
|
|
||||||
type bindingTest struct {
|
type bindingTest struct {
|
||||||
@ -113,7 +114,38 @@ func (b *bindingTest) startAPIService() *gexec.Session {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *bindingTest) cleanup() {
|
func (b *bindingTest) cleanup() {
|
||||||
|
s := b.runPodman([]string{"stop", "-a", "-t", "0"})
|
||||||
|
s.Wait(45)
|
||||||
if err := os.RemoveAll(b.tempDirPath); err != nil {
|
if err := os.RemoveAll(b.tempDirPath); err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pull is a helper function to pull in images
|
||||||
|
func (b *bindingTest) Pull(name string) {
|
||||||
|
p := b.runPodman([]string{"pull", name})
|
||||||
|
p.Wait(45)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run a container and add append the alpine image to it
|
||||||
|
func (b *bindingTest) RunTopContainer(name *string) {
|
||||||
|
cmd := []string{"run", "-dt"}
|
||||||
|
if name != nil {
|
||||||
|
containerName := *name
|
||||||
|
cmd = append(cmd, "--name", containerName)
|
||||||
|
}
|
||||||
|
cmd = append(cmd, alpine, "top")
|
||||||
|
p := b.runPodman(cmd)
|
||||||
|
p.Wait(45)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringInSlice returns a boolean based on whether a given
|
||||||
|
// string is in a given slice
|
||||||
|
func StringInSlice(s string, sl []string) bool {
|
||||||
|
for _, val := range sl {
|
||||||
|
if s == val {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
@ -2,10 +2,10 @@ package test_bindings
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/containers/libpod/pkg/bindings"
|
"github.com/containers/libpod/pkg/bindings"
|
||||||
|
"github.com/containers/libpod/pkg/bindings/containers"
|
||||||
"github.com/containers/libpod/pkg/bindings/images"
|
"github.com/containers/libpod/pkg/bindings/images"
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
@ -17,12 +17,12 @@ var _ = Describe("Podman images", func() {
|
|||||||
//tempdir string
|
//tempdir string
|
||||||
//err error
|
//err error
|
||||||
//podmanTest *PodmanTestIntegration
|
//podmanTest *PodmanTestIntegration
|
||||||
bt *bindingTest
|
bt *bindingTest
|
||||||
s *gexec.Session
|
s *gexec.Session
|
||||||
connText context.Context
|
connText context.Context
|
||||||
err error
|
err error
|
||||||
false bool
|
falseFlag bool = false
|
||||||
//true bool = true
|
trueFlag bool = true
|
||||||
)
|
)
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
@ -34,8 +34,8 @@ var _ = Describe("Podman images", func() {
|
|||||||
//podmanTest.Setup()
|
//podmanTest.Setup()
|
||||||
//podmanTest.SeedImages()
|
//podmanTest.SeedImages()
|
||||||
bt = newBindingTest()
|
bt = newBindingTest()
|
||||||
p := bt.runPodman([]string{"pull", alpine})
|
bt.Pull(alpine)
|
||||||
p.Wait(45)
|
bt.Pull(busybox)
|
||||||
s = bt.startAPIService()
|
s = bt.startAPIService()
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
connText, err = bindings.NewConnection(bt.sock)
|
connText, err = bindings.NewConnection(bt.sock)
|
||||||
@ -68,28 +68,63 @@ var _ = Describe("Podman images", func() {
|
|||||||
_, err = images.GetImage(connText, data.ID[0:12], nil)
|
_, err = images.GetImage(connText, data.ID[0:12], nil)
|
||||||
Expect(err).To(BeNil())
|
Expect(err).To(BeNil())
|
||||||
|
|
||||||
//Inspect by long name should work, it doesnt (yet) i think it needs to be html escaped
|
// The test to inspect by long name needs to fixed.
|
||||||
_, err = images.GetImage(connText, alpine, nil)
|
// Inspect by long name should work, it doesnt (yet) i think it needs to be html escaped
|
||||||
Expect(err).To(BeNil())
|
// _, err = images.GetImage(connText, alpine, nil)
|
||||||
|
// Expect(err).To(BeNil())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Test to validate the remove image api
|
||||||
It("remove image", func() {
|
It("remove image", func() {
|
||||||
// Remove invalid image should be a 404
|
// Remove invalid image should be a 404
|
||||||
_, err = images.Remove(connText, "foobar5000", &false)
|
_, err = images.Remove(connText, "foobar5000", &falseFlag)
|
||||||
Expect(err).ToNot(BeNil())
|
Expect(err).ToNot(BeNil())
|
||||||
code, _ := bindings.CheckResponseCode(err)
|
code, _ := bindings.CheckResponseCode(err)
|
||||||
Expect(code).To(BeNumerically("==", 404))
|
Expect(code).To(BeNumerically("==", 404))
|
||||||
|
|
||||||
_, err := images.GetImage(connText, "alpine", nil)
|
// Remove an image by name, validate image is removed and error is nil
|
||||||
|
inspectData, err := images.GetImage(connText, "busybox", nil)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
response, err := images.Remove(connText, "busybox", nil)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(inspectData.ID).To(Equal(response[0]["Deleted"]))
|
||||||
|
inspectData, err = images.GetImage(connText, "busybox", nil)
|
||||||
|
code, _ = bindings.CheckResponseCode(err)
|
||||||
|
Expect(code).To(BeNumerically("==", 404))
|
||||||
|
|
||||||
|
// Start a container with alpine image
|
||||||
|
var top string = "top"
|
||||||
|
bt.RunTopContainer(&top)
|
||||||
|
// we should now have a container called "top" running
|
||||||
|
containerResponse, err := containers.Inspect(connText, "top", &falseFlag)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(containerResponse.Name).To(Equal("top"))
|
||||||
|
|
||||||
|
// try to remove the image "alpine". This should fail since we are not force
|
||||||
|
// deleting hence image cannot be deleted until the container is deleted.
|
||||||
|
response, err = images.Remove(connText, "alpine", &falseFlag)
|
||||||
|
code, _ = bindings.CheckResponseCode(err)
|
||||||
|
Expect(code).To(BeNumerically("==", 500))
|
||||||
|
|
||||||
|
// Removing the image "alpine" where force = true
|
||||||
|
response, err = images.Remove(connText, "alpine", &trueFlag)
|
||||||
Expect(err).To(BeNil())
|
Expect(err).To(BeNil())
|
||||||
|
|
||||||
response, err := images.Remove(connText, "alpine", &false)
|
// Checking if both the images are gone as well as the container is deleted
|
||||||
Expect(err).To(BeNil())
|
inspectData, err = images.GetImage(connText, "busybox", nil)
|
||||||
fmt.Println(response)
|
code, _ = bindings.CheckResponseCode(err)
|
||||||
// to be continued
|
Expect(code).To(BeNumerically("==", 404))
|
||||||
|
|
||||||
|
inspectData, err = images.GetImage(connText, "alpine", nil)
|
||||||
|
code, _ = bindings.CheckResponseCode(err)
|
||||||
|
Expect(code).To(BeNumerically("==", 404))
|
||||||
|
|
||||||
|
_, err = containers.Inspect(connText, "top", &falseFlag)
|
||||||
|
code, _ = bindings.CheckResponseCode(err)
|
||||||
|
Expect(code).To(BeNumerically("==", 404))
|
||||||
})
|
})
|
||||||
|
|
||||||
//Tests to validate the image tag command.
|
// Tests to validate the image tag command.
|
||||||
It("tag image", func() {
|
It("tag image", func() {
|
||||||
// Validates if invalid image name is given a bad response is encountered.
|
// Validates if invalid image name is given a bad response is encountered.
|
||||||
err = images.Tag(connText, "dummy", "demo", "alpine")
|
err = images.Tag(connText, "dummy", "demo", "alpine")
|
||||||
@ -107,21 +142,30 @@ var _ = Describe("Podman images", func() {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
//Test to validate the List images command.
|
// Test to validate the List images command.
|
||||||
It("List image", func() {
|
It("List image", func() {
|
||||||
//Array to hold the list of images returned
|
// Array to hold the list of images returned
|
||||||
imageSummary, err := images.List(connText, nil, nil)
|
imageSummary, err := images.List(connText, nil, nil)
|
||||||
//There Should be no errors in the response.
|
// There Should be no errors in the response.
|
||||||
Expect(err).To(BeNil())
|
Expect(err).To(BeNil())
|
||||||
//Since in the begin context only one image is created the list context should have only one image
|
// Since in the begin context two images are created the
|
||||||
Expect(len(imageSummary)).To(Equal(1))
|
// list context should have only 2 images
|
||||||
|
Expect(len(imageSummary)).To(Equal(2))
|
||||||
|
|
||||||
//To be written create a new image and check list count again
|
// Adding one more image. There Should be no errors in the response.
|
||||||
//imageSummary, err = images.List(connText, nil, nil)
|
// And the count should be three now.
|
||||||
|
bt.Pull("busybox:glibc")
|
||||||
//Since in the begin context only one image adding one more image should
|
imageSummary, err = images.List(connText, nil, nil)
|
||||||
///Expect(len(imageSummary)).To(Equal(2)
|
Expect(err).To(BeNil())
|
||||||
|
Expect(len(imageSummary)).To(Equal(3))
|
||||||
|
|
||||||
|
//Validate the image names.
|
||||||
|
var names []string
|
||||||
|
for _, i := range imageSummary {
|
||||||
|
names = append(names, i.RepoTags...)
|
||||||
|
}
|
||||||
|
Expect(StringInSlice(alpine, names)).To(BeTrue())
|
||||||
|
Expect(StringInSlice(busybox, names)).To(BeTrue())
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user