From 4cb33035ce82d4eebc20a01abab20828be802f4d Mon Sep 17 00:00:00 2001 From: baude Date: Mon, 29 Jan 2018 14:28:32 -0600 Subject: Migrate start, stats, stop to Ginkgo Migrate the start, stats, and stop integration tests to the Ginkgo style. Signed-off-by: baude Closes: #274 Approved by: mheon --- test/e2e/libpod_suite_test.go | 53 +++++++++++++++++++------ test/e2e/start_test.go | 78 ++++++++++++++++++++++++++++++++++++ test/e2e/stats_test.go | 89 +++++++++++++++++++++++++++++++++++++++++ test/e2e/stop_test.go | 88 +++++++++++++++++++++++++++++++++++++++++ test/podman_start.bats | 50 ----------------------- test/podman_stats.bats | 60 ---------------------------- test/podman_stop.bats | 92 ------------------------------------------- 7 files changed, 296 insertions(+), 214 deletions(-) create mode 100644 test/e2e/start_test.go create mode 100644 test/e2e/stats_test.go create mode 100644 test/e2e/stop_test.go delete mode 100644 test/podman_start.bats delete mode 100644 test/podman_stats.bats delete mode 100644 test/podman_stop.bats (limited to 'test') 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)) + }) +}) diff --git a/test/podman_start.bats b/test/podman_start.bats deleted file mode 100644 index 71afc83ff..000000000 --- a/test/podman_start.bats +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function setup() { - copy_images -} - -function teardown() { - cleanup_test -} - -@test "start bogus container" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} start 1234 - echo "$output" - [ "$status" -eq 125 ] -} - -@test "start single container by id" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} create -d ${ALPINE} ls - ctr_id=${output} - run bash -c ${PODMAN_BINARY} ${PODMAN_OPTIONS} start $ctr_id - echo "$output" - [ "$status" -eq 0 ] -} - -@test "start single container by name" { - ${PODMAN_BINARY} ${PODMAN_OPTIONS} create -d --name foobar99 ${ALPINE} ls - run bash -c ${PODMAN_BINARY} ${PODMAN_OPTIONS} start foobar - echo "$output" - [ "$status" -eq 0 ] -} - -@test "start multiple containers" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} create -d ${ALPINE} ls - ctr1_id=${output} - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} create -d ${ALPINE} ls - ctr1_id2=${output} - run bash -c ${PODMAN_BINARY} ${PODMAN_OPTIONS} start $ctr1_id $ctr2_id - echo "$output" - [ "$status" -eq 0 ] -} - -@test "start multiple containers -- attach should fail" { - ${PODMAN_BINARY} ${PODMAN_OPTIONS} create --name foobar1 -d ${ALPINE} ls - ${PODMAN_BINARY} ${PODMAN_OPTIONS} create --name foobar2 -d ${ALPINE} ls - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} start -a foobar1 foobar2 - echo "$output" - [ "$status" -eq 125 ] -} diff --git a/test/podman_stats.bats b/test/podman_stats.bats deleted file mode 100644 index 7bdd0ee63..000000000 --- a/test/podman_stats.bats +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function teardown() { - cleanup_test -} - -function setup() { - copy_images -} - -@test "stats should run with no containers" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stats --no-stream - echo "$output" - [ "$status" -eq 0 ] -} - -@test "stats with bogus container id" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stats --no-stream 123 - echo "$output" - [ "$status" -eq 125 ] -} - -@test "stats on a running container" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d -t ${ALPINE} sleep 99 - ctr_id="$output" - echo "$output" - run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} stats --no-stream $ctr_id" - echo "$output" - [ "$status" -eq 0 ] -} - -@test "stats on a running container no id" { - ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d -t ${ALPINE} sleep 99 - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stats --no-stream - echo "$output" - [ "$status" -eq 0 ] -} - -@test "stats on all containers" { - ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d -t ${ALPINE} ls - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stats --no-stream -a - echo "$output" - [ "$status" -eq 0 ] -} - -@test "stats only output IDs" { - ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d -t ${ALPINE} sleep 99 - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stats --no-stream --format "{{.Container}}" - echo "$output" - [ "$status" -eq 0 ] -} - -@test "stats json output" { - ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d -t ${ALPINE} ls - run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} stats --no-stream -a --format json | python -m json.tool" - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/podman_stop.bats b/test/podman_stop.bats deleted file mode 100644 index 2809a2b33..000000000 --- a/test/podman_stop.bats +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function teardown() { - cleanup_test -} - -function setup() { - copy_images -} - -@test "stop a bogus container" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stop foobar - echo "$output" - [ "$status" -eq 125 ] -} - -@test "stop a running container by id" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run -d ${ALPINE} sleep 9999 - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps --no-trunc - echo "$output" - [ "$status" -eq 0 ] - [[ "$output" == *"$ctr_id"* ]] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stop $ctr_id - echo "$output" - [ "$status" -eq 0 ] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps --no-trunc - echo "$output" - [ "$status" -eq 0 ] - [[ "$output" != *"$ctr_id"* ]] -} - -@test "stop a running container by name" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --name test1 -d ${ALPINE} sleep 9999 - echo "$output" - [ "$status" -eq 0 ] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps - echo "$output" - [ "$status" -eq 0 ] - [[ "$output" == *"test1"* ]] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stop test1 - echo "$output" - [ "$status" -eq 0 ] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps - echo "$output" - [ "$status" -eq 0 ] - [[ "$output" != *"test1"* ]] -} - -@test "stop all containers" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --name test1 -d ${ALPINE} sleep 9999 - echo "$output" - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --name test2 -d ${ALPINE} sleep 9999 - echo "$output" - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --name test3 -d ${ALPINE} sleep 9999 - echo "$output" - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps - echo "$output" - [[ "$output" == *"test1"* ]] - [[ "$output" == *"test2"* ]] - [[ "$output" == *"test3"* ]] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stop -a -t 1 - echo "$output" - [ "$status" -eq 0 ] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps - echo "$output" - [[ "$output" != *"test1"* ]] - [[ "$output" != *"test2"* ]] - [[ "$output" != *"test3"* ]] -} - -@test "stop a container with latest" { - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --name test1 -d ${ALPINE} sleep 9999 - echo "$output" - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --name test2 -d ${ALPINE} sleep 9999 - echo "$output" - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps - echo "$output" - [[ "$output" == *"test1"* ]] - [[ "$output" == *"test2"* ]] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} stop -t 1 -l - echo "$output" - [ "$status" -eq 0 ] - run ${PODMAN_BINARY} ${PODMAN_OPTIONS} ps - echo "$output" - [[ "$output" == *"test1"* ]] - [[ "$output" != *"test2"* ]] -} -- cgit v1.2.3-54-g00ecf