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:
Sujil02
2020-02-10 12:05:07 -05:00
parent c02b3b5e13
commit f7f7a8cbad
2 changed files with 105 additions and 29 deletions

View File

@ -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
}

View File

@ -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())
}) })
}) })