mirror of
https://github.com/containers/podman.git
synced 2025-07-31 04:12:40 +08:00
The system test write with ginkgo
The tests can be filter by --focus and --skip to fit different test target. Also be able to set global options and cmd options by export it to ENV to fit different test matrix. Signed-off-by: Yiqiao Pu <ypu@redhat.com>
This commit is contained in:
217
test/system/libpod_suite_test.go
Normal file
217
test/system/libpod_suite_test.go
Normal file
@ -0,0 +1,217 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var (
|
||||
PODMAN_BINARY string
|
||||
GLOBALOPTIONS = []string{"--cgroup-manager",
|
||||
"--cni-config-dir",
|
||||
"--config", "-c",
|
||||
"--conmon",
|
||||
"--cpu-profile",
|
||||
"--log-level",
|
||||
"--root",
|
||||
"--tmpdir",
|
||||
"--runroot",
|
||||
"--runtime",
|
||||
"--storage-driver",
|
||||
"--storage-opt",
|
||||
"--syslog",
|
||||
}
|
||||
PODMAN_SUBCMD = []string{"attach",
|
||||
"commit",
|
||||
"container",
|
||||
"build",
|
||||
"create",
|
||||
"diff",
|
||||
"exec",
|
||||
"export",
|
||||
"history",
|
||||
"image",
|
||||
"images",
|
||||
"import",
|
||||
"info",
|
||||
"inspect",
|
||||
"kill",
|
||||
"load",
|
||||
"login",
|
||||
"logout",
|
||||
"logs",
|
||||
"mount",
|
||||
"pause",
|
||||
"ps",
|
||||
"pod",
|
||||
"port",
|
||||
"pull",
|
||||
"push",
|
||||
"restart",
|
||||
"rm",
|
||||
"rmi",
|
||||
"run",
|
||||
"save",
|
||||
"search",
|
||||
"start",
|
||||
"stats",
|
||||
"stop",
|
||||
"tag",
|
||||
"top",
|
||||
"umount",
|
||||
"unpause",
|
||||
"version",
|
||||
"wait",
|
||||
"h",
|
||||
}
|
||||
INTEGRATION_ROOT string
|
||||
ARTIFACT_DIR = "/tmp/.artifacts"
|
||||
ALPINE = "docker.io/library/alpine:latest"
|
||||
BB = "docker.io/library/busybox:latest"
|
||||
BB_GLIBC = "docker.io/library/busybox:glibc"
|
||||
fedoraMinimal = "registry.fedoraproject.org/fedora-minimal:latest"
|
||||
nginx = "quay.io/baude/alpine_nginx:latest"
|
||||
redis = "docker.io/library/redis:alpine"
|
||||
registry = "docker.io/library/registry:2"
|
||||
infra = "k8s.gcr.io/pause:3.1"
|
||||
defaultWaitTimeout = 90
|
||||
)
|
||||
|
||||
// PodmanTestSystem struct for command line options
|
||||
type PodmanTestSystem struct {
|
||||
PodmanTest
|
||||
GlobalOptions map[string]string
|
||||
PodmanCmdOptions map[string][]string
|
||||
}
|
||||
|
||||
// TestLibpod ginkgo master function
|
||||
func TestLibpod(t *testing.T) {
|
||||
RegisterFailHandler(Fail)
|
||||
RunSpecs(t, "Libpod Suite")
|
||||
}
|
||||
|
||||
var _ = BeforeSuite(func() {
|
||||
})
|
||||
|
||||
// PodmanTestCreate creates a PodmanTestSystem instance for the tests
|
||||
func PodmanTestCreate(tempDir string) *PodmanTestSystem {
|
||||
var envKey string
|
||||
globalOptions := make(map[string]string)
|
||||
podmanCmdOptions := make(map[string][]string)
|
||||
|
||||
for _, n := range GLOBALOPTIONS {
|
||||
envKey = strings.Replace(strings.ToUpper(strings.Trim(n, "-")), "-", "_", -1)
|
||||
if isEnvSet(envKey) {
|
||||
globalOptions[n] = os.Getenv(envKey)
|
||||
}
|
||||
}
|
||||
|
||||
for _, n := range PODMAN_SUBCMD {
|
||||
envKey = strings.Replace("PODMAN_SUBCMD_OPTIONS", "SUBCMD", strings.ToUpper(n), -1)
|
||||
if isEnvSet(envKey) {
|
||||
podmanCmdOptions[n] = strings.Split(os.Getenv(envKey), " ")
|
||||
}
|
||||
}
|
||||
|
||||
podmanBinary := "podman"
|
||||
if os.Getenv("PODMAN_BINARY") != "" {
|
||||
podmanBinary = os.Getenv("PODMAN_BINARY")
|
||||
}
|
||||
|
||||
p := &PodmanTestSystem{
|
||||
PodmanTest: PodmanTest{
|
||||
PodmanBinary: podmanBinary,
|
||||
ArtifactPath: ARTIFACT_DIR,
|
||||
TempDir: tempDir,
|
||||
},
|
||||
GlobalOptions: globalOptions,
|
||||
PodmanCmdOptions: podmanCmdOptions,
|
||||
}
|
||||
|
||||
p.PodmanMakeOptions = p.makeOptions
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *PodmanTestSystem) Podman(args []string) *PodmanSession {
|
||||
return p.PodmanBase(args)
|
||||
}
|
||||
|
||||
//MakeOptions assembles all the podman options
|
||||
func (p *PodmanTestSystem) makeOptions(args []string) []string {
|
||||
var addOptions, subArgs []string
|
||||
for _, n := range GLOBALOPTIONS {
|
||||
if p.GlobalOptions[n] != "" {
|
||||
addOptions = append(addOptions, n, p.GlobalOptions[n])
|
||||
}
|
||||
}
|
||||
|
||||
if len(args) == 0 {
|
||||
return addOptions
|
||||
}
|
||||
|
||||
subCmd := args[0]
|
||||
addOptions = append(addOptions, subCmd)
|
||||
if subCmd == "unmount" {
|
||||
subCmd = "umount"
|
||||
}
|
||||
if subCmd == "help" {
|
||||
subCmd = "h"
|
||||
}
|
||||
|
||||
if _, ok := p.PodmanCmdOptions[subCmd]; ok {
|
||||
m := make(map[string]bool)
|
||||
subArgs = p.PodmanCmdOptions[subCmd]
|
||||
for i := 0; i < len(subArgs); i++ {
|
||||
m[subArgs[i]] = true
|
||||
}
|
||||
for i := 1; i < len(args); i++ {
|
||||
if _, ok := m[args[i]]; !ok {
|
||||
subArgs = append(subArgs, args[i])
|
||||
}
|
||||
}
|
||||
} else {
|
||||
subArgs = args[1:]
|
||||
}
|
||||
|
||||
addOptions = append(addOptions, subArgs...)
|
||||
|
||||
return addOptions
|
||||
}
|
||||
|
||||
// Cleanup cleans up the temporary store
|
||||
func (p *PodmanTestSystem) Cleanup() {
|
||||
// Remove all containers
|
||||
stopall := p.Podman([]string{"stop", "-a", "--timeout", "0"})
|
||||
stopall.WaitWithDefaultTimeout()
|
||||
|
||||
session := p.Podman([]string{"rm", "-fa"})
|
||||
session.Wait(90)
|
||||
// Nuke tempdir
|
||||
if err := os.RemoveAll(p.TempDir); err != nil {
|
||||
fmt.Printf("%q\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
// CleanupPod cleans up the temporary store
|
||||
func (p *PodmanTestSystem) CleanupPod() {
|
||||
// Remove all containers
|
||||
session := p.Podman([]string{"pod", "rm", "-fa"})
|
||||
session.Wait(90)
|
||||
// Nuke tempdir
|
||||
if err := os.RemoveAll(p.TempDir); err != nil {
|
||||
fmt.Printf("%q\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Check if the key is set in Env
|
||||
func isEnvSet(key string) bool {
|
||||
_, set := os.LookupEnv(key)
|
||||
return set
|
||||
}
|
Reference in New Issue
Block a user