diff options
author | baude <bbaude@redhat.com> | 2018-01-29 14:28:32 -0600 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-01-30 10:40:00 +0000 |
commit | 4cb33035ce82d4eebc20a01abab20828be802f4d (patch) | |
tree | 5a68624f7fddd5b0c3848441df604723ede061d2 /test/e2e | |
parent | c60d8a0671b48ffdeda68895e0b7d97b252d66d9 (diff) | |
download | podman-4cb33035ce82d4eebc20a01abab20828be802f4d.tar.gz podman-4cb33035ce82d4eebc20a01abab20828be802f4d.tar.bz2 podman-4cb33035ce82d4eebc20a01abab20828be802f4d.zip |
Migrate start, stats, stop to Ginkgo
Migrate the start, stats, and stop integration tests to the
Ginkgo style.
Signed-off-by: baude <bbaude@redhat.com>
Closes: #274
Approved by: mheon
Diffstat (limited to 'test/e2e')
-rw-r--r-- | test/e2e/libpod_suite_test.go | 53 | ||||
-rw-r--r-- | test/e2e/start_test.go | 78 | ||||
-rw-r--r-- | test/e2e/stats_test.go | 89 | ||||
-rw-r--r-- | test/e2e/stop_test.go | 88 |
4 files changed, 296 insertions, 12 deletions
diff --git a/test/e2e/libpod_suite_test.go b/test/e2e/libpod_suite_test.go index 2f541244c..c83105325 100644 --- a/test/e2e/libpod_suite_test.go +++ b/test/e2e/libpod_suite_test.go @@ -9,6 +9,7 @@ import ( "strings" "testing" + "encoding/json" "github.com/containers/image/copy" "github.com/containers/image/signature" "github.com/containers/image/storage" @@ -30,17 +31,18 @@ import ( //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" + 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" + defaultWaitTimeout = 90 ) // PodmanSession wrapps the gexec.session so we can extend it @@ -156,7 +158,7 @@ func (p *PodmanTest) Podman(args []string) *PodmanSession { func (p *PodmanTest) Cleanup() { // Remove all containers session := p.Podman([]string{"rm", "-fa"}) - session.Wait() + session.Wait(60) // Nuke tempdir if err := os.RemoveAll(p.TempDir); err != nil { fmt.Printf("%q\n", err) @@ -203,6 +205,22 @@ func (s *PodmanSession) OutputToString() string { return strings.Join(fields, " ") } +// IsJSONOutputValid attempts to unmarshall the session buffer +// and if successful, returns true, else false +func (s *PodmanSession) IsJSONOutputValid() bool { + var i interface{} + if err := json.Unmarshal(s.Out.Contents(), &i); err != nil { + fmt.Println(err) + fmt.Println(s.OutputToString()) + return false + } + return true +} + +func (s *PodmanSession) WaitWithDefaultTimeout() { + s.Wait(defaultWaitTimeout) +} + // 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...) @@ -306,3 +324,14 @@ func (p *PodmanTest) RestoreAllArtifacts() error { } return nil } + +//RunSleepContainer runs a simple container in the background that +// sleeps. If the name passed != "", it will have a name +func (p *PodmanTest) RunSleepContainer(name string) *PodmanSession { + var podmanArgs = []string{"run"} + if name != "" { + podmanArgs = append(podmanArgs, "--name", name) + } + podmanArgs = append(podmanArgs, "-d", ALPINE, "sleep", "90") + return p.Podman(podmanArgs) +} diff --git a/test/e2e/start_test.go b/test/e2e/start_test.go new file mode 100644 index 000000000..66f993bc7 --- /dev/null +++ b/test/e2e/start_test.go @@ -0,0 +1,78 @@ +package integration + +import ( + "os" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Podman start", 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 start bogus container", func() { + session := podmanTest.Podman([]string{"start", "123"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(125)) + }) + + It("podman start single container by id", func() { + session := podmanTest.Podman([]string{"create", "-d", ALPINE, "ls"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + cid := session.OutputToString() + session = podmanTest.Podman([]string{"start", cid}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman start single container by name", func() { + session := podmanTest.Podman([]string{"create", "-d", "--name", "foobar99", ALPINE, "ls"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"start", "foobar99"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman start multiple containers", func() { + session := podmanTest.Podman([]string{"create", "-d", "--name", "foobar99", ALPINE, "ls"}) + session.WaitWithDefaultTimeout() + cid1 := session.OutputToString() + session2 := podmanTest.Podman([]string{"create", "-d", "--name", "foobar99", ALPINE, "ls"}) + session2.WaitWithDefaultTimeout() + cid2 := session2.OutputToString() + session = podmanTest.Podman([]string{"start", cid1, cid2}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman multiple containers -- attach should fail", func() { + session := podmanTest.Podman([]string{"create", "--name", "foobar1", ALPINE, "ls"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"create", "--name", "foobar2", ALPINE, "ls"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"start", "-a", "foobar1", "foobar2"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(125)) + }) +}) diff --git a/test/e2e/stats_test.go b/test/e2e/stats_test.go new file mode 100644 index 000000000..f1d374f60 --- /dev/null +++ b/test/e2e/stats_test.go @@ -0,0 +1,89 @@ +package integration + +import ( + "os" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Podman stats", 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 stats should run with no containers", func() { + session := podmanTest.Podman([]string{"stats", "--no-stream"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman stats with bogus container", func() { + session := podmanTest.Podman([]string{"stats", "--no-stream", "123"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(125)) + }) + + It("podman on a running container", func() { + session := podmanTest.Podman([]string{"run", "-d", "-t", ALPINE, "sleep", "99"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + cid := session.OutputToString() + session = podmanTest.Podman([]string{"stats", "--no-stream", cid}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman on a running container no id", func() { + session := podmanTest.Podman([]string{"run", "-d", "-t", ALPINE, "sleep", "99"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"stats", "--no-stream"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman stats on all containers", func() { + session := podmanTest.Podman([]string{"run", "-d", "-t", ALPINE, "sleep", "99"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"stats", "--no-stream", "-a"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman stats only output cids", func() { + session := podmanTest.Podman([]string{"run", "-d", "-t", ALPINE, "sleep", "99"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"stats", "--no-stream", "--format", "\"{{.Container}}\""}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman stats with json output", func() { + session := podmanTest.Podman([]string{"run", "-d", "-t", ALPINE, "sleep", "99"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"stats", "--no-stream", "--format", "json"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + Expect(session.IsJSONOutputValid()).To(BeTrue()) + }) + +}) diff --git a/test/e2e/stop_test.go b/test/e2e/stop_test.go new file mode 100644 index 000000000..882834f0c --- /dev/null +++ b/test/e2e/stop_test.go @@ -0,0 +1,88 @@ +package integration + +import ( + "os" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Podman stop", 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 stop bogus container", func() { + session := podmanTest.Podman([]string{"stop", "foobar"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(125)) + }) + + It("podman stop container by id", func() { + session := podmanTest.RunSleepContainer("") + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + cid := session.OutputToString() + session = podmanTest.Podman([]string{"stop", cid}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman stop container by name", func() { + session := podmanTest.RunSleepContainer("test1") + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"stop", "test1"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) + + It("podman stop all containers", func() { + session := podmanTest.RunSleepContainer("test1") + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + cid1 := session.OutputToString() + + session = podmanTest.RunSleepContainer("test2") + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + cid2 := session.OutputToString() + + session = podmanTest.RunSleepContainer("test3") + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + cid3 := session.OutputToString() + + session = podmanTest.Podman([]string{"stop", "-a", "-t", "1"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + output := session.OutputToString() + Expect(output).To(ContainSubstring(cid1)) + Expect(output).To(ContainSubstring(cid2)) + Expect(output).To(ContainSubstring(cid3)) + }) + + It("podman stop latest containers", func() { + session := podmanTest.RunSleepContainer("test1") + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + session = podmanTest.Podman([]string{"stop", "-l", "-t", "1"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + }) +}) |