mirror of
https://github.com/containers/podman.git
synced 2025-06-23 18:59:30 +08:00
Merge pull request #5132 from sujil02/test
Add test cases to validate remove and list images api.
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