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
This commit is contained in:
baude
2018-01-29 14:28:32 -06:00
committed by Atomic Bot
parent c60d8a0671
commit 4cb33035ce
7 changed files with 296 additions and 214 deletions

View File

@ -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)
}

78
test/e2e/start_test.go Normal file
View File

@ -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))
})
})

89
test/e2e/stats_test.go Normal file
View File

@ -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())
})
})

88
test/e2e/stop_test.go Normal file
View File

@ -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))
})
})

View File

@ -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 ]
}

View File

@ -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 ]
}

View File

@ -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"* ]]
}