summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/e2e/info_test.go35
-rw-r--r--test/e2e/libpod_suite_test.go308
-rw-r--r--test/e2e/rmi_test.go70
-rw-r--r--test/e2e/run_test.go187
-rw-r--r--test/e2e/wait_test.go63
-rw-r--r--test/podman_rmi.bats52
-rw-r--r--test/podman_run.bats162
-rw-r--r--test/podman_wait.bats43
8 files changed, 663 insertions, 257 deletions
diff --git a/test/e2e/info_test.go b/test/e2e/info_test.go
new file mode 100644
index 000000000..965dffaae
--- /dev/null
+++ b/test/e2e/info_test.go
@@ -0,0 +1,35 @@
+package integration
+
+import (
+ "os"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman Info", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest PodmanTest
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanCreate(tempdir)
+ })
+
+ AfterEach(func() {
+ podmanTest.Cleanup()
+ })
+
+ It("podman info json output", func() {
+ session := podmanTest.Podman([]string{"info", "--format=json"})
+ session.Wait()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ })
+})
diff --git a/test/e2e/libpod_suite_test.go b/test/e2e/libpod_suite_test.go
new file mode 100644
index 000000000..2f541244c
--- /dev/null
+++ b/test/e2e/libpod_suite_test.go
@@ -0,0 +1,308 @@
+package integration
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "testing"
+
+ "github.com/containers/image/copy"
+ "github.com/containers/image/signature"
+ "github.com/containers/image/storage"
+ "github.com/containers/image/transports/alltransports"
+ "github.com/containers/image/types"
+ sstorage "github.com/containers/storage"
+ "github.com/containers/storage/pkg/reexec"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+ "github.com/onsi/gomega/gexec"
+ "github.com/pkg/errors"
+)
+
+// - CRIO_ROOT=/var/tmp/checkout PODMAN_BINARY=/usr/bin/podman CONMON_BINARY=/usr/libexec/crio/conmon PAPR=1 sh .papr.sh
+// PODMAN_OPTIONS="--root $TESTDIR/crio $STORAGE_OPTIONS --runroot $TESTDIR/crio-run --runtime ${RUNTIME_BINARY} --conmon ${CONMON_BINARY} --cni-config-dir ${LIBPOD_CNI_CONFIG}"
+
+//TODO do the image caching
+// "$COPYIMG_BINARY" --root "$TESTDIR/crio" $STORAGE_OPTIONS --runroot "$TESTDIR/crio-run" --image-name=${IMAGES[${key}]} --import-from=dir:"$ARTIFACTS_PATH"/${key} --add-name=${IMAGES[${key}]}
+//TODO whats the best way to clean up after a test
+
+var (
+ PODMAN_BINARY string
+ CONMON_BINARY string
+ CNI_CONFIG_DIR string
+ RUNC_BINARY string
+ INTEGRATION_ROOT string
+ STORAGE_OPTIONS = "--storage-driver vfs"
+ ARTIFACT_DIR = "/tmp/.artifacts"
+ IMAGES = []string{"alpine", "busybox"}
+ ALPINE = "docker.io/library/alpine:latest"
+ BB_GLIBC = "docker.io/library/busybox:glibc"
+ fedoraMinimal = "registry.fedoraproject.org/fedora-minimal:latest"
+)
+
+// PodmanSession wrapps the gexec.session so we can extend it
+type PodmanSession struct {
+ *gexec.Session
+}
+
+// PodmanTest struct for command line options
+type PodmanTest struct {
+ PodmanBinary string
+ ConmonBinary string
+ CrioRoot string
+ CNIConfigDir string
+ RunCBinary string
+ RunRoot string
+ StorageOptions string
+ SignaturePolicyPath string
+ ArtifactPath string
+ TempDir string
+}
+
+// TestLibpod ginkgo master function
+func TestLibpod(t *testing.T) {
+ if reexec.Init() {
+ os.Exit(1)
+ }
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "Libpod Suite")
+}
+
+var _ = BeforeSuite(func() {
+ //Cache images
+ cwd, _ := os.Getwd()
+ INTEGRATION_ROOT = filepath.Join(cwd, "../../")
+ podman := PodmanCreate("/tmp")
+ podman.ArtifactPath = ARTIFACT_DIR
+ if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) {
+ if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil {
+ fmt.Printf("%q\n", err)
+ os.Exit(1)
+ }
+ }
+ for _, image := range IMAGES {
+ fmt.Printf("Caching %s...\n", image)
+ if err := podman.CreateArtifact(image); err != nil {
+ fmt.Printf("%q\n", err)
+ os.Exit(1)
+ }
+ }
+
+})
+
+// CreateTempDirin
+func CreateTempDirInTempDir() (string, error) {
+ return ioutil.TempDir("", "podman_test")
+}
+
+// PodmanCreate creates a PodmanTest instance for the tests
+func PodmanCreate(tempDir string) PodmanTest {
+ cwd, _ := os.Getwd()
+
+ podmanBinary := filepath.Join(cwd, "../../bin/podman")
+ if os.Getenv("PODMAN_BINARY") != "" {
+ podmanBinary = os.Getenv("PODMAN_BINARY")
+ }
+ conmonBinary := filepath.Join("/usr/libexec/crio/conmon")
+ if os.Getenv("CONMON_BINARY") != "" {
+ conmonBinary = os.Getenv("CONMON_BINARY")
+ }
+ storageOptions := STORAGE_OPTIONS
+ if os.Getenv("STORAGE_OPTIONS") != "" {
+ storageOptions = os.Getenv("STORAGE_OPTIONS")
+ }
+
+ runCBinary := "/usr/bin/runc"
+ CNIConfigDir := "/etc/cni/net.d"
+
+ return PodmanTest{
+ PodmanBinary: podmanBinary,
+ ConmonBinary: conmonBinary,
+ CrioRoot: filepath.Join(tempDir, "crio"),
+ CNIConfigDir: CNIConfigDir,
+ RunCBinary: runCBinary,
+ RunRoot: filepath.Join(tempDir, "crio-run"),
+ StorageOptions: storageOptions,
+ SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
+ ArtifactPath: ARTIFACT_DIR,
+ TempDir: tempDir,
+ }
+}
+
+//MakeOptions assembles all the podman main options
+func (p *PodmanTest) MakeOptions() []string {
+ return strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s",
+ p.CrioRoot, p.RunRoot, p.RunCBinary, p.ConmonBinary, p.CNIConfigDir), " ")
+}
+
+// Podman is the exec call to podman on the filesystem
+func (p *PodmanTest) Podman(args []string) *PodmanSession {
+ podmanOptions := p.MakeOptions()
+ podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
+ podmanOptions = append(podmanOptions, args...)
+ fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
+ command := exec.Command(p.PodmanBinary, podmanOptions...)
+ session, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)
+ if err != nil {
+ Fail(fmt.Sprintf("unable to run podman command: %s", strings.Join(podmanOptions, " ")))
+ }
+ return &PodmanSession{session}
+}
+
+// Cleanup cleans up the temporary store
+func (p *PodmanTest) Cleanup() {
+ // Remove all containers
+ session := p.Podman([]string{"rm", "-fa"})
+ session.Wait()
+ // Nuke tempdir
+ if err := os.RemoveAll(p.TempDir); err != nil {
+ fmt.Printf("%q\n", err)
+ }
+}
+
+// GrepString takes session output and behaves like grep. it returns a bool
+// if successful and an array of strings on positive matches
+func (s *PodmanSession) GrepString(term string) (bool, []string) {
+ var (
+ greps []string
+ matches bool
+ )
+
+ for _, line := range strings.Split(s.OutputToString(), "\n") {
+ if strings.Contains(line, term) {
+ matches = true
+ greps = append(greps, line)
+ }
+ }
+ return matches, greps
+}
+
+// Pull Images pulls multiple images
+func (p *PodmanTest) PullImages(images []string) error {
+ for _, i := range images {
+ p.PullImage(i)
+ }
+ return nil
+}
+
+// Pull Image a single image
+// TODO should the timeout be configurable?
+func (p *PodmanTest) PullImage(image string) error {
+ session := p.Podman([]string{"pull", image})
+ session.Wait(60)
+ Expect(session.ExitCode()).To(Equal(0))
+ return nil
+}
+
+// OutputToString formats session output to string
+func (s *PodmanSession) OutputToString() string {
+ fields := strings.Fields(fmt.Sprintf("%s", s.Out.Contents()))
+ return strings.Join(fields, " ")
+}
+
+// SystemExec is used to exec a system command to check its exit code or output
+func (p *PodmanTest) SystemExec(command string, args []string) *PodmanSession {
+ c := exec.Command(command, args...)
+ session, err := gexec.Start(c, GinkgoWriter, GinkgoWriter)
+ if err != nil {
+ Fail(fmt.Sprintf("unable to run command: %s %s", command, strings.Join(args, " ")))
+ }
+ return &PodmanSession{session}
+}
+
+// CreateArtifact creates a cached image in the artifact dir
+func (p *PodmanTest) CreateArtifact(image string) error {
+ imageName := fmt.Sprintf("docker://%s", image)
+ systemContext := types.SystemContext{
+ SignaturePolicyPath: p.SignaturePolicyPath,
+ }
+ policy, err := signature.DefaultPolicy(&systemContext)
+ if err != nil {
+ return errors.Errorf("error loading signature policy: %v", err)
+ }
+ policyContext, err := signature.NewPolicyContext(policy)
+ if err != nil {
+ return errors.Errorf("error loading signature policy: %v", err)
+ }
+ defer func() {
+ _ = policyContext.Destroy()
+ }()
+ options := &copy.Options{}
+
+ importRef, err := alltransports.ParseImageName(imageName)
+ if err != nil {
+ return errors.Errorf("error parsing image name %v: %v", image, err)
+ }
+
+ exportTo := filepath.Join("dir:", p.ArtifactPath, image)
+ exportRef, err := alltransports.ParseImageName(exportTo)
+ if err != nil {
+ return errors.Errorf("error parsing image name %v: %v", exportTo, err)
+ }
+
+ return copy.Image(policyContext, exportRef, importRef, options)
+
+ return nil
+}
+
+// RestoreArtifact puts the cached image into our test store
+func (p *PodmanTest) RestoreArtifact(image string) error {
+ storeOptions := sstorage.DefaultStoreOptions
+ storeOptions.GraphDriverName = "vfs"
+ //storeOptions.GraphDriverOptions = storageOptions
+ storeOptions.GraphRoot = p.CrioRoot
+ storeOptions.RunRoot = p.RunRoot
+ store, err := sstorage.GetStore(storeOptions)
+
+ options := &copy.Options{}
+ if err != nil {
+ return errors.Errorf("error opening storage: %v", err)
+ }
+ defer func() {
+ _, _ = store.Shutdown(false)
+ }()
+
+ storage.Transport.SetStore(store)
+ ref, err := storage.Transport.ParseStoreReference(store, image)
+ if err != nil {
+ return errors.Errorf("error parsing image name: %v", err)
+ }
+
+ importFrom := fmt.Sprintf("dir:%s", filepath.Join(p.ArtifactPath, image))
+ importRef, err := alltransports.ParseImageName(importFrom)
+ if err != nil {
+ return errors.Errorf("error parsing image name %v: %v", image, err)
+ }
+ systemContext := types.SystemContext{
+ SignaturePolicyPath: p.SignaturePolicyPath,
+ }
+ policy, err := signature.DefaultPolicy(&systemContext)
+ if err != nil {
+ return errors.Errorf("error loading signature policy: %v", err)
+ }
+ policyContext, err := signature.NewPolicyContext(policy)
+ if err != nil {
+ return errors.Errorf("error loading signature policy: %v", err)
+ }
+ defer func() {
+ _ = policyContext.Destroy()
+ }()
+ err = copy.Image(policyContext, ref, importRef, options)
+ if err != nil {
+ return errors.Errorf("error importing %s: %v", importFrom, err)
+ }
+ return nil
+}
+
+// RestoreAllArtifacts unpacks all cached images
+func (p *PodmanTest) RestoreAllArtifacts() error {
+ for _, image := range IMAGES {
+ if err := p.RestoreArtifact(image); err != nil {
+ return err
+ }
+ }
+ return nil
+}
diff --git a/test/e2e/rmi_test.go b/test/e2e/rmi_test.go
new file mode 100644
index 000000000..895c812c6
--- /dev/null
+++ b/test/e2e/rmi_test.go
@@ -0,0 +1,70 @@
+package integration
+
+import (
+ "os"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman rmi", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest PodmanTest
+ image1 = "docker.io/library/alpine:latest"
+ image3 = "docker.io/library/busybox:glibc"
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanCreate(tempdir)
+ podmanTest.RestoreAllArtifacts()
+ })
+
+ AfterEach(func() {
+ podmanTest.Cleanup()
+
+ })
+
+ It("podman rmi bogus image", func() {
+ session := podmanTest.Podman([]string{"rmi", "debian:6.0.10"})
+ session.Wait()
+ Expect(session.ExitCode()).To(Equal(125))
+
+ })
+
+ It("podman rmi with fq name", func() {
+ session := podmanTest.Podman([]string{"rmi", image1})
+ session.Wait()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ })
+
+ It("podman rmi with short name", func() {
+ session := podmanTest.Podman([]string{"rmi", "alpine"})
+ session.Wait()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ })
+
+ It("podman rmi all images", func() {
+ podmanTest.PullImages([]string{image3})
+ session := podmanTest.Podman([]string{"rmi", "-a"})
+ session.Wait()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ })
+
+ It("podman rmi all images forceably with short options", func() {
+ podmanTest.PullImages([]string{image3})
+ session := podmanTest.Podman([]string{"rmi", "-fa"})
+ session.Wait()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ })
+
+})
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
new file mode 100644
index 000000000..8f1aa0053
--- /dev/null
+++ b/test/e2e/run_test.go
@@ -0,0 +1,187 @@
+package integration
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman run", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest PodmanTest
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanCreate(tempdir)
+ podmanTest.RestoreAllArtifacts()
+ })
+
+ AfterEach(func() {
+ podmanTest.Cleanup()
+ })
+
+ It("podman run a container based on local image", func() {
+ session := podmanTest.Podman([]string{"run", ALPINE, "ls"})
+ session.Wait(10)
+ 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.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ })
+
+ It("podman run a container based on remote image", func() {
+ session := podmanTest.Podman([]string{"run", "-dt", BB_GLIBC, "ls"})
+ session.Wait(45)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ })
+
+ It("podman run selinux grep test", func() {
+ selinux := podmanTest.SystemExec("ls", []string{"/usr/sbin/selinuxenabled"})
+ if selinux.ExitCode() != 0 {
+ Skip("SELinux not enabled")
+ }
+ session := podmanTest.Podman([]string{"run", "-it", "--security-opt", "label=level:s0:c1,c2", ALPINE, "cat", "/proc/self/attr/current"})
+ session.Wait(30)
+ Expect(session.ExitCode()).To(Equal(0))
+ match, _ := session.GrepString("s0:c1,c2")
+ Expect(match).Should(BeTrue())
+ })
+
+ It("podman run capabilities test", func() {
+ session := podmanTest.Podman([]string{"run", "--rm", "--cap-add", "all", ALPINE, "cat", "/proc/self/status"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--cap-add", "sys_admin", ALPINE, "cat", "/proc/self/status"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--cap-drop", "all", ALPINE, "cat", "/proc/self/status"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--cap-drop", "setuid", ALPINE, "cat", "/proc/self/status"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ })
+
+ It("podman run environment test", func() {
+ session := podmanTest.Podman([]string{"run", "--rm", "--env", "FOO=BAR", ALPINE, "printenv", "FOO"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ match, _ := session.GrepString("BAR")
+ Expect(match).Should(BeTrue())
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--env", "PATH=/bin", ALPINE, "printenv", "PATH"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ match, _ = session.GrepString("/bin")
+ Expect(match).Should(BeTrue())
+
+ os.Setenv("FOO", "BAR")
+ session = podmanTest.Podman([]string{"run", "--rm", "--env", "FOO", ALPINE, "printenv", "FOO"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ match, _ = session.GrepString("BAR")
+ Expect(match).Should(BeTrue())
+ os.Unsetenv("FOO")
+
+ session = podmanTest.Podman([]string{"run", "--rm", ALPINE, "printenv"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ // This currently does not work
+ // Re-enable when hostname is an env variable
+ //session = podmanTest.Podman([]string{"run", "--rm", ALPINE, "sh", "-c", "printenv"})
+ //session.Wait(10)
+ //Expect(session.ExitCode()).To(Equal(0))
+ //match, _ = session.GrepString("HOSTNAME")
+ //Expect(match).Should(BeTrue())
+ })
+
+ It("podman run limits test", func() {
+ session := podmanTest.Podman([]string{"run", "--rm", "--ulimit", "rtprio=99", "--cap-add=sys_nice", fedoraMinimal, "cat", "/proc/self/sched"})
+ session.Wait(45)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--ulimit", "nofile=2048:2048", fedoraMinimal, "ulimit", "-n"})
+ session.Wait(45)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("2048"))
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--ulimit", "nofile=1024:1028", fedoraMinimal, "ulimit", "-n"})
+ session.Wait(45)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("1024"))
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--oom-kill-disable=true", fedoraMinimal, "echo", "memory-hog"})
+ session.Wait(45)
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"run", "--rm", "--oom-score-adj=100", fedoraMinimal, "cat", "/proc/self/oom_score_adj"})
+ session.Wait(45)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("100"))
+ })
+
+ It("podman run with volume flag", func() {
+ Skip("Skip until we diagnose the regression of volume mounts")
+ mountPath := filepath.Join(podmanTest.TempDir, "secrets")
+ os.Mkdir(mountPath, 0755)
+ session := podmanTest.Podman([]string{"run", "--rm", "-v", fmt.Sprintf("%s:/run/test", mountPath), ALPINE, "cat", "/proc/self/mountinfo"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("/run/test rw,relatime"))
+
+ mountPath = filepath.Join(podmanTest.TempDir, "secrets")
+ os.Mkdir(mountPath, 0755)
+ session = podmanTest.Podman([]string{"run", "--rm", "-v", fmt.Sprintf("%s:/run/test:ro", mountPath), ALPINE, "cat", "/proc/self/mountinfo"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("/run/test ro,relatime"))
+
+ mountPath = filepath.Join(podmanTest.TempDir, "secrets")
+ os.Mkdir(mountPath, 0755)
+ session = podmanTest.Podman([]string{"run", "--rm", "-v", fmt.Sprintf("%s:/run/test:shared", mountPath), ALPINE, "cat", "/proc/self/mountinfo"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("/run/test rw,relatime, shared"))
+ })
+
+ It("podman run with cidfile", func() {
+ session := podmanTest.Podman([]string{"run", "--cidfile", "/tmp/cidfile", ALPINE, "ls"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ err := os.Remove("/tmp/cidfile")
+ Expect(err).To(BeNil())
+ })
+
+ It("podman run sysctl test", func() {
+ session := podmanTest.Podman([]string{"run", "--rm", "--sysctl", "net.core.somaxconn=65535", ALPINE, "sysctl", "net.core.somaxconn"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("net.core.somaxconn = 65535"))
+ })
+
+ It("podman run blkio-weight test", func() {
+ session := podmanTest.Podman([]string{"run", "--rm", "--blkio-weight=15", ALPINE, "cat", "/sys/fs/cgroup/blkio/blkio.weight"})
+ session.Wait(10)
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(session.OutputToString()).To(ContainSubstring("15"))
+ })
+})
diff --git a/test/e2e/wait_test.go b/test/e2e/wait_test.go
new file mode 100644
index 000000000..5448b5ae4
--- /dev/null
+++ b/test/e2e/wait_test.go
@@ -0,0 +1,63 @@
+package integration
+
+import (
+ "os"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman wait", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest PodmanTest
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanCreate(tempdir)
+ podmanTest.RestoreAllArtifacts()
+ })
+
+ AfterEach(func() {
+ podmanTest.Cleanup()
+
+ })
+
+ It("podman wait on bogus container", func() {
+ session := podmanTest.Podman([]string{"wait", "1234"})
+ session.Wait()
+ Expect(session.ExitCode()).To(Equal(125))
+
+ })
+
+ It("podman wait on a stopped container", func() {
+ session := podmanTest.Podman([]string{"run", "-d", ALPINE, "ls"})
+ session.Wait(10)
+ cid := session.OutputToString()
+ Expect(session.ExitCode()).To(Equal(0))
+ session = podmanTest.Podman([]string{"wait", cid})
+ session.Wait()
+ })
+
+ It("podman wait on a sleeping container", func() {
+ session := podmanTest.Podman([]string{"run", "-d", ALPINE, "sleep", "10"})
+ session.Wait(20)
+ cid := session.OutputToString()
+ Expect(session.ExitCode()).To(Equal(0))
+ session = podmanTest.Podman([]string{"wait", cid})
+ session.Wait(20)
+ })
+
+ It("podman wait on latest container", func() {
+ session := podmanTest.Podman([]string{"run", "-d", ALPINE, "sleep", "10"})
+ session.Wait(20)
+ Expect(session.ExitCode()).To(Equal(0))
+ session = podmanTest.Podman([]string{"wait", "-l"})
+ session.Wait(20)
+ })
+})
diff --git a/test/podman_rmi.bats b/test/podman_rmi.bats
deleted file mode 100644
index e800a0388..000000000
--- a/test/podman_rmi.bats
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env bats
-
-load helpers
-
-IMAGE1="docker.io/library/alpine:latest"
-IMAGE2="docker.io/library/busybox:latest"
-IMAGE3="docker.io/library/busybox:glibc"
-
-function teardown() {
- cleanup_test
-}
-
-function pullImages() {
- ${PODMAN_BINARY} $PODMAN_OPTIONS pull $IMAGE1
- ${PODMAN_BINARY} $PODMAN_OPTIONS pull $IMAGE2
- ${PODMAN_BINARY} $PODMAN_OPTIONS pull $IMAGE3
-}
-
-@test "podman rmi bogus image" {
- run ${PODMAN_BINARY} $PODMAN_OPTIONS rmi debian:6.0.10
- echo "$output"
- [ "$status" -eq 125 ]
-}
-
-@test "podman rmi image with fq name" {
- pullImages
- run ${PODMAN_BINARY} $PODMAN_OPTIONS rmi $IMAGE1
- echo "$output"
- [ "$status" -eq 0 ]
-}
-
-@test "podman rmi image with short name" {
- pullImages
- run ${PODMAN_BINARY} $PODMAN_OPTIONS rmi alpine
- echo "$output"
- [ "$status" -eq 0 ]
-}
-
-@test "podman rmi all images" {
- pullImages
- run ${PODMAN_BINARY} $PODMAN_OPTIONS rmi -a
- echo "$output"
- [ "$status" -eq 0 ]
-}
-
-@test "podman rmi all images forceably with short options" {
- pullImages
- ${PODMAN_BINARY} $PODMAN_OPTIONS create ${IMAGE1} ls
- run ${PODMAN_BINARY} $PODMAN_OPTIONS rmi -af
- echo "$output"
- [ "$status" -eq 0 ]
-}
diff --git a/test/podman_run.bats b/test/podman_run.bats
deleted file mode 100644
index 9fa048439..000000000
--- a/test/podman_run.bats
+++ /dev/null
@@ -1,162 +0,0 @@
-#!/usr/bin/env bats
-
-load helpers
-
-function teardown() {
- cleanup_test
-}
-
-function setup() {
- copy_images
-}
-
-@test "run a container based on local image" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run $BB ls
- echo "$output"
- [ "$status" -eq 0 ]
-}
-
-@test "run a container based on local image with short options" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -dt $BB ls
- echo "$output"
- [ "$status" -eq 0 ]
-}
-
-@test "run a container based on a remote image" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${BB_GLIBC} ls
- echo "$output"
- [ "$status" -eq 0 ]
-}
-
-@test "run selinux test" {
- if [ ! -e /usr/sbin/selinuxenabled ] || [ ! /usr/sbin/selinuxenabled ]; then
- skip "SELinux not enabled"
- fi
-
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${ALPINE} cat /proc/self/attr/current
- echo "$output"
- firstLabel=$output
-
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${ALPINE} cat /proc/self/attr/current
- echo "$output"
- [ "$output" != "${firstLabel}" ]
-}
-
-
-@test "run selinux grep test" {
- skip "Until console issues worked out"
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -t -i --security-opt label=level:s0:c1,c2 ${ALPINE} cat /proc/self/attr/current | grep s0:c1,c2"
- echo "$output"
- [ "$status" -eq 0 ]
-
-}
-
-@test "run capabilities test" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-add all ${ALPINE} cat /proc/self/status
- echo "$output"
- [ "$status" -eq 0 ]
-
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-add sys_admin ${ALPINE} cat /proc/self/status
- echo "$output"
- [ "$status" -eq 0 ]
-
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-drop all ${ALPINE} cat /proc/self/status
- echo "$output"
- [ "$status" -eq 0 ]
-
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-drop setuid ${ALPINE} cat /proc/self/status
- echo "$output"
- [ "$status" -eq 0 ]
-
-}
-
-@test "run environment test" {
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env FOO=BAR ${ALPINE} printenv FOO | tr -d '\r'"
- echo "$output"
- [ "$status" -eq 0 ]
- [ $output = "BAR" ]
-
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env PATH="/bin" ${ALPINE} printenv PATH | tr -d '\r'"
- echo "$output"
- [ "$status" -eq 0 ]
- [ $output = "/bin" ]
-
- run bash -c "export FOO=BAR; ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env FOO ${ALPINE} printenv FOO | tr -d '\r'"
- echo "$output"
- [ "$status" -eq 0 ]
- [ "$output" = "BAR" ]
-
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env FOO ${ALPINE} printenv
- echo "$output"
- [ "$status" -ne 0 ]
-
-# We don't currently set the hostname in containers, since we are not setting up
-# networking. As soon as podman run gets network support we need to uncomment this
-# test.
-# run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${ALPINE} sh -c printenv | grep HOSTNAME"
-# echo "$output"
-# [ "$status" -eq 0 ]
-}
-
-IMAGE="docker.io/library/fedora:latest"
-
-@test "run limits test" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --ulimit rtprio=99 --cap-add=sys_nice ${IMAGE} cat /proc/self/sched
- echo $output
- [ "$status" -eq 0 ]
-
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --ulimit nofile=2048:2048 ${IMAGE} ulimit -n | tr -d '\r'"
- echo $output
- [ "$status" -eq 0 ]
- [ "$output" = 2048 ]
-
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --ulimit nofile=1024:1028 ${IMAGE} ulimit -n | tr -d '\r'"
- echo $output
- [ "$status" -eq 0 ]
- [ "$output" = 1024 ]
-
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --oom-kill-disable=true ${IMAGE} echo memory-hog
- echo $output
- [ "$status" -eq 0 ]
-
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --oom-score-adj=100 ${IMAGE} cat /proc/self/oom_score_adj | tr -d '\r'"
- echo $output
- [ "$status" -eq 0 ]
- [ "$output" = 100 ]
-
-}
-
-@test "podman run with volume flag" {
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -v ${MOUNT_PATH}:/run/test ${BB} cat /proc/self/mountinfo | grep '${MOUNT_PATH} /run/test rw,relatime'"
- echo $output
- [ "$status" -eq 0 ]
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -v ${MOUNT_PATH}:/run/test:ro ${BB} cat /proc/self/mountinfo | grep '${MOUNT_PATH} /run/test ro,relatime'"
- echo $output
- [ "$status" -eq 0 ]
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -v ${MOUNT_PATH}:/run/test:shared ${BB} cat /proc/self/mountinfo | grep '${MOUNT_PATH} /run/test rw,relatime shared:'"
- echo $output
- [ "$status" -eq 0 ]
-}
-
-@test "podman run with cidfile" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cidfile /tmp/cidfile $BB ls
- echo "$output"
- [ "$status" -eq 0 ]
- run rm /tmp/cidfile
- echo "$output"
- [ "$status" -eq 0 ]
-}
-
-@test "podman run sysctl test" {
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --rm --sysctl net.core.somaxconn=65535 ${ALPINE} sysctl net.core.somaxconn | tr -d '\r'"
- echo "$output"
- [ "$status" -eq 0 ]
- [ "$output" = "net.core.somaxconn = 65535" ]
-}
-
-@test "podman run blkio-weight test" {
- run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --rm --blkio-weight=15 ${ALPINE} cat /sys/fs/cgroup/blkio/blkio.weight | tr -d '\r'"
- echo "$output"
- [ "$status" -eq 0 ]
- [ "$output" = 15 ]
-}
diff --git a/test/podman_wait.bats b/test/podman_wait.bats
deleted file mode 100644
index 9d6c22734..000000000
--- a/test/podman_wait.bats
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env bats
-
-load helpers
-
-function setup() {
- copy_images
-}
-
-function teardown() {
- cleanup_test
-}
-
-@test "wait on a bogus container" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} wait 12343
- echo $output
- echo $status
- [ "$status" -eq 125 ]
-}
-
-@test "wait on a stopped container" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d ${ALPINE} ls
- echo $output
- [ "$status" -eq 0 ]
- ctr_id=${output}
- run bash -c ${PODMAN_BINARY} ${PODMAN_OPTIONS} wait $ctr_id
- [ "$status" -eq 0 ]
-}
-
-@test "wait on a sleeping container" {
- run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d ${ALPINE} sleep 10
- echo $output
- [ "$status" -eq 0 ]
- ctr_id=${output}
- run bash -c ${PODMAN_BINARY} ${PODMAN_OPTIONS} wait $ctr_id
- [ "$status" -eq 0 ]
-}
-
-@test "wait on the latest container" {
- ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d ${ALPINE} sleep 5
- run bash -c ${PODMAN_BINARY} ${PODMAN_OPTIONS} wait -l
- echo "$output"
- [ "$status" -eq 0 ]
-}