mirror of
https://github.com/containers/podman.git
synced 2025-12-04 04:09:40 +08:00
With the advent of Podman 2.0.0 we crossed the magical barrier of go modules. While we were able to continue importing all packages inside of the project, the project could not be vendored anymore from the outside. Move the go module to new major version and change all imports to `github.com/containers/libpod/v2`. The renaming of the imports was done via `gomove` [1]. [1] https://github.com/KSubedi/gomove Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
153 lines
5.0 KiB
Go
153 lines
5.0 KiB
Go
package test_bindings
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/containers/libpod/v2/pkg/bindings"
|
|
"github.com/containers/libpod/v2/pkg/bindings/containers"
|
|
"github.com/containers/libpod/v2/pkg/bindings/pods"
|
|
"github.com/containers/libpod/v2/pkg/bindings/system"
|
|
"github.com/containers/libpod/v2/pkg/bindings/volumes"
|
|
"github.com/containers/libpod/v2/pkg/domain/entities"
|
|
. "github.com/onsi/ginkgo"
|
|
. "github.com/onsi/gomega"
|
|
"github.com/onsi/gomega/gexec"
|
|
)
|
|
|
|
var _ = Describe("Podman system", func() {
|
|
var (
|
|
bt *bindingTest
|
|
s *gexec.Session
|
|
newpod string
|
|
)
|
|
|
|
BeforeEach(func() {
|
|
bt = newBindingTest()
|
|
bt.RestoreImagesFromCache()
|
|
newpod = "newpod"
|
|
bt.Podcreate(&newpod)
|
|
s = bt.startAPIService()
|
|
time.Sleep(1 * time.Second)
|
|
err := bt.NewConnection()
|
|
Expect(err).To(BeNil())
|
|
})
|
|
|
|
AfterEach(func() {
|
|
s.Kill()
|
|
bt.cleanup()
|
|
})
|
|
|
|
It("podman events", func() {
|
|
eChan := make(chan entities.Event, 1)
|
|
var messages []entities.Event
|
|
cancelChan := make(chan bool, 1)
|
|
go func() {
|
|
for e := range eChan {
|
|
messages = append(messages, e)
|
|
}
|
|
}()
|
|
go func() {
|
|
system.Events(bt.conn, eChan, cancelChan, nil, nil, nil, bindings.PFalse)
|
|
}()
|
|
|
|
_, err := bt.RunTopContainer(nil, nil, nil)
|
|
Expect(err).To(BeNil())
|
|
cancelChan <- true
|
|
Expect(len(messages)).To(BeNumerically("==", 5))
|
|
})
|
|
|
|
It("podman system prune - pod,container stopped", func() {
|
|
// Start and stop a pod to enter in exited state.
|
|
_, err := pods.Start(bt.conn, newpod)
|
|
Expect(err).To(BeNil())
|
|
_, err = pods.Stop(bt.conn, newpod, nil)
|
|
Expect(err).To(BeNil())
|
|
// Start and stop a container to enter in exited state.
|
|
var name = "top"
|
|
_, err = bt.RunTopContainer(&name, bindings.PFalse, nil)
|
|
Expect(err).To(BeNil())
|
|
err = containers.Stop(bt.conn, name, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
systemPruneResponse, err := system.Prune(bt.conn, bindings.PTrue, bindings.PFalse)
|
|
Expect(err).To(BeNil())
|
|
Expect(len(systemPruneResponse.PodPruneReport)).To(Equal(1))
|
|
Expect(len(systemPruneResponse.ContainerPruneReport.ID)).To(Equal(1))
|
|
Expect(len(systemPruneResponse.ImagePruneReport.Report.Id)).
|
|
To(BeNumerically(">", 0))
|
|
Expect(systemPruneResponse.ImagePruneReport.Report.Id).
|
|
To(ContainElement("docker.io/library/alpine:latest"))
|
|
Expect(len(systemPruneResponse.VolumePruneReport)).To(Equal(0))
|
|
})
|
|
|
|
It("podman system prune running alpine container", func() {
|
|
// Start and stop a pod to enter in exited state.
|
|
_, err := pods.Start(bt.conn, newpod)
|
|
Expect(err).To(BeNil())
|
|
_, err = pods.Stop(bt.conn, newpod, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Start and stop a container to enter in exited state.
|
|
var name = "top"
|
|
_, err = bt.RunTopContainer(&name, bindings.PFalse, nil)
|
|
Expect(err).To(BeNil())
|
|
err = containers.Stop(bt.conn, name, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Start container and leave in running
|
|
var name2 = "top2"
|
|
_, err = bt.RunTopContainer(&name2, bindings.PFalse, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Adding an unused volume
|
|
_, err = volumes.Create(bt.conn, entities.VolumeCreateOptions{})
|
|
Expect(err).To(BeNil())
|
|
|
|
systemPruneResponse, err := system.Prune(bt.conn, bindings.PTrue, bindings.PFalse)
|
|
Expect(err).To(BeNil())
|
|
Expect(len(systemPruneResponse.PodPruneReport)).To(Equal(1))
|
|
Expect(len(systemPruneResponse.ContainerPruneReport.ID)).To(Equal(1))
|
|
Expect(len(systemPruneResponse.ImagePruneReport.Report.Id)).
|
|
To(BeNumerically(">", 0))
|
|
// Alpine image should not be pruned as used by running container
|
|
Expect(systemPruneResponse.ImagePruneReport.Report.Id).
|
|
ToNot(ContainElement("docker.io/library/alpine:latest"))
|
|
// Though unsed volume is available it should not be pruned as flag set to false.
|
|
Expect(len(systemPruneResponse.VolumePruneReport)).To(Equal(0))
|
|
})
|
|
|
|
It("podman system prune running alpine container volume prune", func() {
|
|
// Start a pod and leave it running
|
|
_, err := pods.Start(bt.conn, newpod)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Start and stop a container to enter in exited state.
|
|
var name = "top"
|
|
_, err = bt.RunTopContainer(&name, bindings.PFalse, nil)
|
|
Expect(err).To(BeNil())
|
|
err = containers.Stop(bt.conn, name, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Start second container and leave in running
|
|
var name2 = "top2"
|
|
_, err = bt.RunTopContainer(&name2, bindings.PFalse, nil)
|
|
Expect(err).To(BeNil())
|
|
|
|
// Adding an unused volume should work
|
|
_, err = volumes.Create(bt.conn, entities.VolumeCreateOptions{})
|
|
Expect(err).To(BeNil())
|
|
|
|
systemPruneResponse, err := system.Prune(bt.conn, bindings.PTrue, bindings.PTrue)
|
|
Expect(err).To(BeNil())
|
|
Expect(len(systemPruneResponse.PodPruneReport)).To(Equal(0))
|
|
Expect(len(systemPruneResponse.ContainerPruneReport.ID)).To(Equal(1))
|
|
Expect(len(systemPruneResponse.ImagePruneReport.Report.Id)).
|
|
To(BeNumerically(">", 0))
|
|
// Alpine image should not be pruned as used by running container
|
|
Expect(systemPruneResponse.ImagePruneReport.Report.Id).
|
|
ToNot(ContainElement("docker.io/library/alpine:latest"))
|
|
// Volume should be pruned now as flag set true
|
|
Expect(len(systemPruneResponse.VolumePruneReport)).To(Equal(1))
|
|
})
|
|
})
|