Separate common used test functions and structs to test/utils

Put common used test functions and structs to a separated package.
So we can use them for more testsuites.

Signed-off-by: Yiqiao Pu <ypu@redhat.com>
This commit is contained in:
Yiqiao Pu 2018-10-29 14:56:07 +08:00
parent 236408bbbc
commit 74bcfc2f96
77 changed files with 1188 additions and 640 deletions

View File

@ -31,7 +31,7 @@ BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions
OCIUMOUNTINSTALLDIR=$(PREFIX)/share/oci-umount/oci-umount.d OCIUMOUNTINSTALLDIR=$(PREFIX)/share/oci-umount/oci-umount.d
SELINUXOPT ?= $(shell test -x /usr/sbin/selinuxenabled && selinuxenabled && echo -Z) SELINUXOPT ?= $(shell test -x /usr/sbin/selinuxenabled && selinuxenabled && echo -Z)
PACKAGES ?= $(shell $(GO) list -tags "${BUILDTAGS}" ./... | grep -v github.com/containers/libpod/vendor | grep -v e2e) PACKAGES ?= $(shell $(GO) list -tags "${BUILDTAGS}" ./... | grep -v github.com/containers/libpod/vendor | grep -v e2e )
COMMIT_NO ?= $(shell git rev-parse HEAD 2> /dev/null || true) COMMIT_NO ?= $(shell git rev-parse HEAD 2> /dev/null || true)
GIT_COMMIT ?= $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}") GIT_COMMIT ?= $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}")
@ -104,6 +104,9 @@ test/copyimg/copyimg: .gopathok $(wildcard test/copyimg/*.go)
test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go) test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go)
$(GO) build -ldflags '$(LDFLAGS)' -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/checkseccomp $(GO) build -ldflags '$(LDFLAGS)' -tags "$(BUILDTAGS) containers_image_ostree_stub" -o $@ $(PROJECT)/test/checkseccomp
test/goecho/goecho: .gopathok $(wildcard test/goecho/*.go)
$(GO) build -ldflags '$(LDFLAGS)' -o $@ $(PROJECT)/test/goecho
podman: .gopathok $(PODMAN_VARLINK_DEPENDENCIES) podman: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
$(GO) build -i -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/podman $(GO) build -i -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/podman
@ -130,6 +133,7 @@ clean:
test/bin2img/bin2img \ test/bin2img/bin2img \
test/checkseccomp/checkseccomp \ test/checkseccomp/checkseccomp \
test/copyimg/copyimg \ test/copyimg/copyimg \
test/goecho/goecho \
test/testdata/redis-image \ test/testdata/redis-image \
cmd/podman/varlink/iopodman.go \ cmd/podman/varlink/iopodman.go \
libpod/container_ffjson.go \ libpod/container_ffjson.go \
@ -166,7 +170,7 @@ shell: libpodimage
testunit: libpodimage testunit: libpodimage
${CONTAINER_RUNTIME} run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e CGROUP_MANAGER=cgroupfs -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make localunit ${CONTAINER_RUNTIME} run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e CGROUP_MANAGER=cgroupfs -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make localunit
localunit: varlink_generate localunit: test/goecho/goecho varlink_generate
$(GO) test -tags "$(BUILDTAGS)" -cover $(PACKAGES) $(GO) test -tags "$(BUILDTAGS)" -cover $(PACKAGES)
ginkgo: ginkgo:
@ -183,7 +187,7 @@ vagrant-check:
binaries: varlink_generate easyjson_generate podman binaries: varlink_generate easyjson_generate podman
test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp test/goecho/goecho
MANPAGES_MD ?= $(wildcard docs/*.md pkg/*/docs/*.md) MANPAGES_MD ?= $(wildcard docs/*.md pkg/*/docs/*.md)
MANPAGES ?= $(MANPAGES_MD:%.md=%) MANPAGES ?= $(MANPAGES_MD:%.md=%)

View File

@ -1,8 +1,33 @@
![PODMAN logo](../logo/podman-logo-source.svg) ![PODMAN logo](../logo/podman-logo-source.svg)
# Integration Tests # Test utils
Test utils provide common functions and structs for testing. It includes two structs:
* `PodmanTest`: Handle the *podman* command and other global resources like temporary
directory. It provides basic methods, like checking podman image and pod status. Test
suites should create their owner test *struct* as a composite of `PodmanTest`, and their
owner PodmanMakeOptions().
Our primary means of performing integration testing for libpod is with the * `PodmanSession`: Store execution session data and related *methods*. Such like get command
[Ginkgo](https://github.com/onsi/ginkgo) BDD testing framework. This allows output and so on. It can be used directly in the test suite, only embed it to your owner
session struct if you need expend it.
## Unittest for test/utils
To ensure neither *tests* nor *utils* break, There are unit-tests for each *functions* and
*structs* in `test/utils`. When you adding functions or structs to this *package*, please
update both unit-tests for it and this documentation.
### Run unit test for test/utils
Run unit test for test/utils.
```
make localunit
```
## Structure of the test utils and test suites
The test *utils* package is at the same level of test suites. Each test suites also have their
owner common functions and structs stored in `libpod_suite_test.go`.
# Ginkgo test framework
[Ginkgo](https://github.com/onsi/ginkgo) is a BDD testing framework. This allows
us to use native Golang to perform our tests and there is a strong affiliation us to use native Golang to perform our tests and there is a strong affiliation
between Ginkgo and the Go test framework. between Ginkgo and the Go test framework.
@ -32,8 +57,16 @@ The gomega sources can be simply installed with the command:
GOPATH=~/go go get github.com/onsi/gomega/... GOPATH=~/go go get github.com/onsi/gomega/...
``` ```
### Running the integration tests # Integration Tests
Test suite for integration test for podman command line. It has its own structs:
* `PodmanTestIntegration`: Integration test *struct* as a composite of `PodmanTest`. It
set up the global options for *podman* command to ignore the environment influence from
different test system.
* `PodmanSessionIntegration`: This *struct* has it own *methods* for checking command
output with given format JSON by using *structs* defined in inspect package.
## Running the integration tests
You can run the entire suite of integration tests with the following command: You can run the entire suite of integration tests with the following command:
``` ```

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman attach", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman attach", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"github.com/containers/libpod/pkg/criu" "github.com/containers/libpod/pkg/criu"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman checkpoint", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman checkpoint", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
if !criu.CheckForCriu() { if !criu.CheckForCriu() {
Skip("CRIU is missing or too old.") Skip("CRIU is missing or too old.")

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman commit", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman commit", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman create", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman create", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"sort" "sort"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman diff", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman diff", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman exec", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman exec", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman export", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman export", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman history", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman history", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"sort" "sort"
. "github.com/containers/libpod/test/utils"
"github.com/docker/go-units" "github.com/docker/go-units"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
@ -14,7 +15,7 @@ var _ = Describe("Podman images", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -22,7 +23,7 @@ var _ = Describe("Podman images", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman import", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman import", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman Info", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman Info", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
}) })
AfterEach(func() { AfterEach(func() {

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"strings" "strings"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman inspect", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman inspect", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman kill", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman kill", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -1,22 +1,18 @@
package integration package integration
import ( import (
"bufio"
"context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"runtime"
"strings" "strings"
"testing" "testing"
"time"
"github.com/containers/libpod/libpod" "github.com/containers/libpod/libpod"
"github.com/containers/libpod/pkg/inspect" "github.com/containers/libpod/pkg/inspect"
"github.com/containers/storage/pkg/parsers/kernel" . "github.com/containers/libpod/test/utils"
"github.com/containers/storage/pkg/reexec" "github.com/containers/storage/pkg/reexec"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
@ -35,14 +31,9 @@ var (
defaultWaitTimeout = 90 defaultWaitTimeout = 90
) )
// PodmanSession wrapps the gexec.session so we can extend it // PodmanTestIntegration struct for command line options
type PodmanSession struct { type PodmanTestIntegration struct {
*gexec.Session PodmanTest
}
// PodmanTest struct for command line options
type PodmanTest struct {
PodmanBinary string
ConmonBinary string ConmonBinary string
CrioRoot string CrioRoot string
CNIConfigDir string CNIConfigDir string
@ -50,17 +41,13 @@ type PodmanTest struct {
RunRoot string RunRoot string
StorageOptions string StorageOptions string
SignaturePolicyPath string SignaturePolicyPath string
ArtifactPath string
TempDir string
CgroupManager string CgroupManager string
Host HostOS Host HostOS
} }
// HostOS is a simple struct for the test os // PodmanSessionIntegration sturct for command line session
type HostOS struct { type PodmanSessionIntegration struct {
Distribution string *PodmanSession
Version string
Arch string
} }
// TestLibpod ginkgo master function // TestLibpod ginkgo master function
@ -80,7 +67,7 @@ var _ = BeforeSuite(func() {
//Cache images //Cache images
cwd, _ := os.Getwd() cwd, _ := os.Getwd()
INTEGRATION_ROOT = filepath.Join(cwd, "../../") INTEGRATION_ROOT = filepath.Join(cwd, "../../")
podman := PodmanCreate("/tmp") podman := PodmanTestCreate("/tmp")
podman.ArtifactPath = ARTIFACT_DIR podman.ArtifactPath = ARTIFACT_DIR
if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) { if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) {
if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil { if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil {
@ -110,13 +97,8 @@ var _ = BeforeSuite(func() {
} }
}) })
// CreateTempDirin // PodmanTestCreate creates a PodmanTestIntegration instance for the tests
func CreateTempDirInTempDir() (string, error) { func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
return ioutil.TempDir("", "podman_test")
}
// PodmanCreate creates a PodmanTest instance for the tests
func PodmanCreate(tempDir string) PodmanTest {
host := GetHostDistributionInfo() host := GetHostDistributionInfo()
cwd, _ := os.Getwd() cwd, _ := os.Getwd()
@ -157,8 +139,12 @@ func PodmanCreate(tempDir string) PodmanTest {
CNIConfigDir := "/etc/cni/net.d" CNIConfigDir := "/etc/cni/net.d"
p := PodmanTest{ p := &PodmanTestIntegration{
PodmanBinary: podmanBinary, PodmanTest: PodmanTest{
PodmanBinary: podmanBinary,
ArtifactPath: ARTIFACT_DIR,
TempDir: tempDir,
},
ConmonBinary: conmonBinary, ConmonBinary: conmonBinary,
CrioRoot: filepath.Join(tempDir, "crio"), CrioRoot: filepath.Join(tempDir, "crio"),
CNIConfigDir: CNIConfigDir, CNIConfigDir: CNIConfigDir,
@ -166,73 +152,50 @@ func PodmanCreate(tempDir string) PodmanTest {
RunRoot: filepath.Join(tempDir, "crio-run"), RunRoot: filepath.Join(tempDir, "crio-run"),
StorageOptions: storageOptions, StorageOptions: storageOptions,
SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"), SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
ArtifactPath: ARTIFACT_DIR,
TempDir: tempDir,
CgroupManager: cgroupManager, CgroupManager: cgroupManager,
Host: host, Host: host,
} }
// Setup registries.conf ENV variable // Setup registries.conf ENV variable
p.setDefaultRegistriesConfigEnv() p.setDefaultRegistriesConfigEnv()
// Rewrite the PodmanAsUser function
p.PodmanMakeOptions = p.makeOptions
return p return p
} }
//MakeOptions assembles all the podman main options //MakeOptions assembles all the podman main options
func (p *PodmanTest) MakeOptions() []string { func (p *PodmanTestIntegration) makeOptions(args []string) []string {
return strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s", podmanOptions := strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s",
p.CrioRoot, p.RunRoot, p.RunCBinary, p.ConmonBinary, p.CNIConfigDir, p.CgroupManager), " ") p.CrioRoot, p.RunRoot, p.RunCBinary, p.ConmonBinary, p.CNIConfigDir, p.CgroupManager), " ")
}
// Podman is the exec call to podman on the filesystem, uid and gid the credentials to use
func (p *PodmanTest) PodmanAsUser(args []string, uid, gid uint32, env []string) *PodmanSession {
podmanOptions := p.MakeOptions()
if os.Getenv("HOOK_OPTION") != "" { if os.Getenv("HOOK_OPTION") != "" {
podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION")) podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
} }
podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...) podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
podmanOptions = append(podmanOptions, args...) podmanOptions = append(podmanOptions, args...)
if env == nil { return podmanOptions
fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
} else {
fmt.Printf("Running: (env: %v) %s %s\n", env, p.PodmanBinary, strings.Join(podmanOptions, " "))
}
var command *exec.Cmd
if uid != 0 || gid != 0 {
nsEnterOpts := append([]string{"--userspec", fmt.Sprintf("%d:%d", uid, gid), "/", p.PodmanBinary}, podmanOptions...)
command = exec.Command("chroot", nsEnterOpts...)
} else {
command = exec.Command(p.PodmanBinary, podmanOptions...)
}
if env != nil {
command.Env = env
}
session, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)
if err != nil {
Fail(fmt.Sprintf("unable to run podman command: %s\n%v", strings.Join(podmanOptions, " "), err))
}
return &PodmanSession{session}
} }
// Podman is the exec call to podman on the filesystem // Podman is the exec call to podman on the filesystem
func (p *PodmanTest) Podman(args []string) *PodmanSession { func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
return p.PodmanAsUser(args, 0, 0, nil) podmanSession := p.PodmanBase(args)
return &PodmanSessionIntegration{podmanSession}
} }
//WaitForContainer waits on a started container // PodmanPID execs podman and returns its PID
func WaitForContainer(p *PodmanTest) bool { func (p *PodmanTestIntegration) PodmanPID(args []string) (*PodmanSessionIntegration, int) {
for i := 0; i < 10; i++ { podmanOptions := p.MakeOptions(args)
if p.NumberOfRunningContainers() == 1 { fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
return true command := exec.Command(p.PodmanBinary, podmanOptions...)
} session, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)
time.Sleep(1 * time.Second) if err != nil {
Fail(fmt.Sprintf("unable to run podman command: %s", strings.Join(podmanOptions, " ")))
} }
return false podmanSession := &PodmanSession{session}
return &PodmanSessionIntegration{podmanSession}, command.Process.Pid
} }
// Cleanup cleans up the temporary store // Cleanup cleans up the temporary store
func (p *PodmanTest) Cleanup() { func (p *PodmanTestIntegration) Cleanup() {
// Remove all containers // Remove all containers
stopall := p.Podman([]string{"stop", "-a", "--timeout", "0"}) stopall := p.Podman([]string{"stop", "-a", "--timeout", "0"})
stopall.WaitWithDefaultTimeout() stopall.WaitWithDefaultTimeout()
@ -248,7 +211,7 @@ func (p *PodmanTest) Cleanup() {
} }
// CleanupPod cleans up the temporary store // CleanupPod cleans up the temporary store
func (p *PodmanTest) CleanupPod() { func (p *PodmanTestIntegration) CleanupPod() {
// Remove all containers // Remove all containers
session := p.Podman([]string{"pod", "rm", "-fa"}) session := p.Podman([]string{"pod", "rm", "-fa"})
session.Wait(90) session.Wait(90)
@ -258,103 +221,26 @@ func (p *PodmanTest) CleanupPod() {
} }
} }
// GrepString takes session output and behaves like grep. it returns a bool // PullImages pulls multiple images
// if successful and an array of strings on positive matches func (p *PodmanTestIntegration) PullImages(images []string) error {
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 { for _, i := range images {
p.PullImage(i) p.PullImage(i)
} }
return nil return nil
} }
// Pull Image a single image // PullImage pulls a single image
// TODO should the timeout be configurable? // TODO should the timeout be configurable?
func (p *PodmanTest) PullImage(image string) error { func (p *PodmanTestIntegration) PullImage(image string) error {
session := p.Podman([]string{"pull", image}) session := p.Podman([]string{"pull", image})
session.Wait(60) session.Wait(60)
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
return nil 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, " ")
}
// OutputToStringArray returns the output as a []string
// where each array item is a line split by newline
func (s *PodmanSession) OutputToStringArray() []string {
var results []string
output := fmt.Sprintf("%s", s.Out.Contents())
for _, line := range strings.Split(output, "\n") {
if line != "" {
results = append(results, line)
}
}
return results
}
// ErrorGrepString takes session stderr output and behaves like grep. it returns a bool
// if successful and an array of strings on positive matches
func (s *PodmanSession) ErrorGrepString(term string) (bool, []string) {
var (
greps []string
matches bool
)
for _, line := range strings.Split(s.ErrorToString(), "\n") {
if strings.Contains(line, term) {
matches = true
greps = append(greps, line)
}
}
return matches, greps
}
// ErrorToString formats session stderr to string
func (s *PodmanSession) ErrorToString() string {
fields := strings.Fields(fmt.Sprintf("%s", s.Err.Contents()))
return strings.Join(fields, " ")
}
// ErrorToStringArray returns the stderr output as a []string
// where each array item is a line split by newline
func (s *PodmanSession) ErrorToStringArray() []string {
output := fmt.Sprintf("%s", s.Err.Contents())
return strings.Split(output, "\n")
}
// IsJSONOutputValid attempts to unmarshal 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)
return false
}
return true
}
// InspectContainerToJSON takes the session output of an inspect // InspectContainerToJSON takes the session output of an inspect
// container and returns json // container and returns json
func (s *PodmanSession) InspectContainerToJSON() []inspect.ContainerData { func (s *PodmanSessionIntegration) InspectContainerToJSON() []inspect.ContainerData {
var i []inspect.ContainerData var i []inspect.ContainerData
err := json.Unmarshal(s.Out.Contents(), &i) err := json.Unmarshal(s.Out.Contents(), &i)
Expect(err).To(BeNil()) Expect(err).To(BeNil())
@ -362,7 +248,7 @@ func (s *PodmanSession) InspectContainerToJSON() []inspect.ContainerData {
} }
// InspectPodToJSON takes the sessions output from a pod inspect and returns json // InspectPodToJSON takes the sessions output from a pod inspect and returns json
func (s *PodmanSession) InspectPodToJSON() libpod.PodInspect { func (s *PodmanSessionIntegration) InspectPodToJSON() libpod.PodInspect {
var i libpod.PodInspect var i libpod.PodInspect
err := json.Unmarshal(s.Out.Contents(), &i) err := json.Unmarshal(s.Out.Contents(), &i)
Expect(err).To(BeNil()) Expect(err).To(BeNil())
@ -371,30 +257,15 @@ func (s *PodmanSession) InspectPodToJSON() libpod.PodInspect {
// InspectImageJSON takes the session output of an inspect // InspectImageJSON takes the session output of an inspect
// image and returns json // image and returns json
func (s *PodmanSession) InspectImageJSON() []inspect.ImageData { func (s *PodmanSessionIntegration) InspectImageJSON() []inspect.ImageData {
var i []inspect.ImageData var i []inspect.ImageData
err := json.Unmarshal(s.Out.Contents(), &i) err := json.Unmarshal(s.Out.Contents(), &i)
Expect(err).To(BeNil()) Expect(err).To(BeNil())
return i return i
} }
func (s *PodmanSession) WaitWithDefaultTimeout() {
s.Wait(defaultWaitTimeout)
fmt.Println("output:", s.OutputToString())
}
// 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 // CreateArtifact creates a cached image in the artifact dir
func (p *PodmanTest) CreateArtifact(image string) error { func (p *PodmanTestIntegration) CreateArtifact(image string) error {
if os.Getenv("NO_TEST_CACHE") != "" { if os.Getenv("NO_TEST_CACHE") != "" {
return nil return nil
} }
@ -415,7 +286,7 @@ func (p *PodmanTest) CreateArtifact(image string) error {
} }
// RestoreArtifact puts the cached image into our test store // RestoreArtifact puts the cached image into our test store
func (p *PodmanTest) RestoreArtifact(image string) error { func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
fmt.Printf("Restoring %s...\n", image) fmt.Printf("Restoring %s...\n", image)
dest := strings.Split(image, "/") dest := strings.Split(image, "/")
destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1)) destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
@ -425,7 +296,7 @@ func (p *PodmanTest) RestoreArtifact(image string) error {
} }
// RestoreAllArtifacts unpacks all cached images // RestoreAllArtifacts unpacks all cached images
func (p *PodmanTest) RestoreAllArtifacts() error { func (p *PodmanTestIntegration) RestoreAllArtifacts() error {
if os.Getenv("NO_TEST_CACHE") != "" { if os.Getenv("NO_TEST_CACHE") != "" {
return nil return nil
} }
@ -439,7 +310,7 @@ func (p *PodmanTest) RestoreAllArtifacts() error {
// CreatePod creates a pod with no infra container // CreatePod creates a pod with no infra container
// it optionally takes a pod name // it optionally takes a pod name
func (p *PodmanTest) CreatePod(name string) (*PodmanSession, int, string) { func (p *PodmanTestIntegration) CreatePod(name string) (*PodmanSessionIntegration, int, string) {
var podmanArgs = []string{"pod", "create", "--infra=false", "--share", ""} var podmanArgs = []string{"pod", "create", "--infra=false", "--share", ""}
if name != "" { if name != "" {
podmanArgs = append(podmanArgs, "--name", name) podmanArgs = append(podmanArgs, "--name", name)
@ -451,7 +322,7 @@ func (p *PodmanTest) CreatePod(name string) (*PodmanSession, int, string) {
//RunTopContainer runs a simple container in the background that //RunTopContainer runs a simple container in the background that
// runs top. If the name passed != "", it will have a name // runs top. If the name passed != "", it will have a name
func (p *PodmanTest) RunTopContainer(name string) *PodmanSession { func (p *PodmanTestIntegration) RunTopContainer(name string) *PodmanSessionIntegration {
var podmanArgs = []string{"run"} var podmanArgs = []string{"run"}
if name != "" { if name != "" {
podmanArgs = append(podmanArgs, "--name", name) podmanArgs = append(podmanArgs, "--name", name)
@ -460,7 +331,7 @@ func (p *PodmanTest) RunTopContainer(name string) *PodmanSession {
return p.Podman(podmanArgs) return p.Podman(podmanArgs)
} }
func (p *PodmanTest) RunTopContainerInPod(name, pod string) *PodmanSession { func (p *PodmanTestIntegration) RunTopContainerInPod(name, pod string) *PodmanSessionIntegration {
var podmanArgs = []string{"run", "--pod", pod} var podmanArgs = []string{"run", "--pod", pod}
if name != "" { if name != "" {
podmanArgs = append(podmanArgs, "--name", name) podmanArgs = append(podmanArgs, "--name", name)
@ -471,7 +342,7 @@ func (p *PodmanTest) RunTopContainerInPod(name, pod string) *PodmanSession {
//RunLsContainer runs a simple container in the background that //RunLsContainer runs a simple container in the background that
// simply runs ls. If the name passed != "", it will have a name // simply runs ls. If the name passed != "", it will have a name
func (p *PodmanTest) RunLsContainer(name string) (*PodmanSession, int, string) { func (p *PodmanTestIntegration) RunLsContainer(name string) (*PodmanSessionIntegration, int, string) {
var podmanArgs = []string{"run"} var podmanArgs = []string{"run"}
if name != "" { if name != "" {
podmanArgs = append(podmanArgs, "--name", name) podmanArgs = append(podmanArgs, "--name", name)
@ -482,7 +353,7 @@ func (p *PodmanTest) RunLsContainer(name string) (*PodmanSession, int, string) {
return session, session.ExitCode(), session.OutputToString() return session, session.ExitCode(), session.OutputToString()
} }
func (p *PodmanTest) RunLsContainerInPod(name, pod string) (*PodmanSession, int, string) { func (p *PodmanTestIntegration) RunLsContainerInPod(name, pod string) (*PodmanSessionIntegration, int, string) {
var podmanArgs = []string{"run", "--pod", pod} var podmanArgs = []string{"run", "--pod", pod}
if name != "" { if name != "" {
podmanArgs = append(podmanArgs, "--name", name) podmanArgs = append(podmanArgs, "--name", name)
@ -493,147 +364,9 @@ func (p *PodmanTest) RunLsContainerInPod(name, pod string) (*PodmanSession, int,
return session, session.ExitCode(), session.OutputToString() return session, session.ExitCode(), session.OutputToString()
} }
//NumberOfContainersRunning returns an int of how many
// containers are currently running.
func (p *PodmanTest) NumberOfContainersRunning() int {
var containers []string
ps := p.Podman([]string{"ps", "-q"})
ps.WaitWithDefaultTimeout()
Expect(ps.ExitCode()).To(Equal(0))
for _, i := range ps.OutputToStringArray() {
if i != "" {
containers = append(containers, i)
}
}
return len(containers)
}
// NumberOfContainers returns an int of how many
// containers are currently defined.
func (p *PodmanTest) NumberOfContainers() int {
var containers []string
ps := p.Podman([]string{"ps", "-aq"})
ps.WaitWithDefaultTimeout()
Expect(ps.ExitCode()).To(Equal(0))
for _, i := range ps.OutputToStringArray() {
if i != "" {
containers = append(containers, i)
}
}
return len(containers)
}
// NumberOfPods returns an int of how many
// pods are currently defined.
func (p *PodmanTest) NumberOfPods() int {
var pods []string
ps := p.Podman([]string{"pod", "ps", "-q"})
ps.WaitWithDefaultTimeout()
Expect(ps.ExitCode()).To(Equal(0))
for _, i := range ps.OutputToStringArray() {
if i != "" {
pods = append(pods, i)
}
}
return len(pods)
}
// NumberOfRunningContainers returns an int of how many containers are currently
// running
func (p *PodmanTest) NumberOfRunningContainers() int {
var containers []string
ps := p.Podman([]string{"ps", "-q"})
ps.WaitWithDefaultTimeout()
Expect(ps.ExitCode()).To(Equal(0))
for _, i := range ps.OutputToStringArray() {
if i != "" {
containers = append(containers, i)
}
}
return len(containers)
}
// StringInSlice determines if a string is in a string slice, returns bool
func StringInSlice(s string, sl []string) bool {
for _, i := range sl {
if i == s {
return true
}
}
return false
}
//LineInOutputStartsWith returns true if a line in a
// session output starts with the supplied string
func (s *PodmanSession) LineInOuputStartsWith(term string) bool {
for _, i := range s.OutputToStringArray() {
if strings.HasPrefix(i, term) {
return true
}
}
return false
}
//LineInOutputContains returns true if a line in a
// session output starts with the supplied string
func (s *PodmanSession) LineInOutputContains(term string) bool {
for _, i := range s.OutputToStringArray() {
if strings.Contains(i, term) {
return true
}
}
return false
}
//tagOutPutToMap parses each string in imagesOutput and returns
// a map of repo:tag pairs. Notice, the first array item will
// be skipped as it's considered to be the header.
func tagOutputToMap(imagesOutput []string) map[string]string {
m := make(map[string]string)
// iterate over output but skip the header
for _, i := range imagesOutput[1:] {
tmp := []string{}
for _, x := range strings.Split(i, " ") {
if x != "" {
tmp = append(tmp, x)
}
}
// podman-images(1) return a list like output
// in the format of "Repository Tag [...]"
if len(tmp) < 2 {
continue
}
m[tmp[0]] = tmp[1]
}
return m
}
//LineInOutputContainsTag returns true if a line in the
// session's output contains the repo-tag pair as returned
// by podman-images(1).
func (s *PodmanSession) LineInOutputContainsTag(repo, tag string) bool {
tagMap := tagOutputToMap(s.OutputToStringArray())
for r, t := range tagMap {
if repo == r && tag == t {
return true
}
}
return false
}
//GetContainerStatus returns the containers state.
// This function assumes only one container is active.
func (p *PodmanTest) GetContainerStatus() string {
var podmanArgs = []string{"ps"}
podmanArgs = append(podmanArgs, "--all", "--format={{.Status}}")
session := p.Podman(podmanArgs)
session.WaitWithDefaultTimeout()
return session.OutputToString()
}
// BuildImage uses podman build and buildah to build an image // BuildImage uses podman build and buildah to build an image
// called imageName based on a string dockerfile // called imageName based on a string dockerfile
func (p *PodmanTest) BuildImage(dockerfile, imageName string, layers string) { func (p *PodmanTestIntegration) BuildImage(dockerfile, imageName string, layers string) {
dockerfilePath := filepath.Join(p.TempDir, "Dockerfile") dockerfilePath := filepath.Join(p.TempDir, "Dockerfile")
err := ioutil.WriteFile(dockerfilePath, []byte(dockerfile), 0755) err := ioutil.WriteFile(dockerfilePath, []byte(dockerfile), 0755)
Expect(err).To(BeNil()) Expect(err).To(BeNil())
@ -642,34 +375,12 @@ func (p *PodmanTest) BuildImage(dockerfile, imageName string, layers string) {
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
} }
//GetHostDistributionInfo returns a struct with its distribution name and version func (p *PodmanTestIntegration) setDefaultRegistriesConfigEnv() {
func GetHostDistributionInfo() HostOS {
f, err := os.Open("/etc/os-release")
defer f.Close()
if err != nil {
return HostOS{}
}
l := bufio.NewScanner(f)
host := HostOS{}
host.Arch = runtime.GOARCH
for l.Scan() {
if strings.HasPrefix(l.Text(), "ID=") {
host.Distribution = strings.Replace(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "", -1)
}
if strings.HasPrefix(l.Text(), "VERSION_ID=") {
host.Version = strings.Replace(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "", -1)
}
}
return host
}
func (p *PodmanTest) setDefaultRegistriesConfigEnv() {
defaultFile := filepath.Join(INTEGRATION_ROOT, "test/registries.conf") defaultFile := filepath.Join(INTEGRATION_ROOT, "test/registries.conf")
os.Setenv("REGISTRIES_CONFIG_PATH", defaultFile) os.Setenv("REGISTRIES_CONFIG_PATH", defaultFile)
} }
func (p *PodmanTest) setRegistriesConfigEnv(b []byte) { func (p *PodmanTestIntegration) setRegistriesConfigEnv(b []byte) {
outfile := filepath.Join(p.TempDir, "registries.conf") outfile := filepath.Join(p.TempDir, "registries.conf")
os.Setenv("REGISTRIES_CONFIG_PATH", outfile) os.Setenv("REGISTRIES_CONFIG_PATH", outfile)
ioutil.WriteFile(outfile, b, 0644) ioutil.WriteFile(outfile, b, 0644)
@ -678,81 +389,3 @@ func (p *PodmanTest) setRegistriesConfigEnv(b []byte) {
func resetRegistriesConfigEnv() { func resetRegistriesConfigEnv() {
os.Setenv("REGISTRIES_CONFIG_PATH", "") os.Setenv("REGISTRIES_CONFIG_PATH", "")
} }
// IsKernelNewThan compares the current kernel version to one provided. If
// the kernel is equal to or greater, returns true
func IsKernelNewThan(version string) (bool, error) {
inputVersion, err := kernel.ParseRelease(version)
if err != nil {
return false, err
}
kv, err := kernel.GetKernelVersion()
if err == nil {
return false, err
}
// CompareKernelVersion compares two kernel.VersionInfo structs.
// Returns -1 if a < b, 0 if a == b, 1 it a > b
result := kernel.CompareKernelVersion(*kv, *inputVersion)
if result >= 0 {
return true, nil
}
return false, nil
}
//Wait process or service inside container start, and ready to be used.
func WaitContainerReady(p *PodmanTest, id string, expStr string, timeout int, step int) bool {
startTime := time.Now()
s := p.Podman([]string{"logs", id})
s.WaitWithDefaultTimeout()
fmt.Println(startTime)
for {
if time.Since(startTime) >= time.Duration(timeout)*time.Second {
return false
}
if strings.Contains(s.OutputToString(), expStr) {
return true
}
time.Sleep(time.Duration(step) * time.Second)
s = p.Podman([]string{"logs", id})
s.WaitWithDefaultTimeout()
}
}
//IsCommandAvaible check if command exist
func IsCommandAvailable(command string) bool {
check := exec.Command("bash", "-c", strings.Join([]string{"command -v", command}, " "))
err := check.Run()
if err != nil {
return false
}
return true
}
// WriteJsonFile write json format data to a json file
func WriteJsonFile(data []byte, filePath string) error {
var jsonData map[string]interface{}
json.Unmarshal(data, &jsonData)
formatJson, _ := json.MarshalIndent(jsonData, "", " ")
return ioutil.WriteFile(filePath, formatJson, 0644)
}
func getTestContext() context.Context {
return context.Background()
}
func containerized() bool {
container := os.Getenv("container")
if container != "" {
return true
}
b, err := ioutil.ReadFile("/proc/1/cgroup")
if err != nil {
// shrug, if we cannot read that file, return false
return false
}
if strings.Index(string(b), "docker") > -1 {
return true
}
return false
}

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman load", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman load", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -55,7 +56,7 @@ var _ = Describe("Podman load", func() {
save.WaitWithDefaultTimeout() save.WaitWithDefaultTimeout()
Expect(save.ExitCode()).To(Equal(0)) Expect(save.ExitCode()).To(Equal(0))
compress := podmanTest.SystemExec("gzip", []string{outfile}) compress := SystemExec("gzip", []string{outfile})
compress.WaitWithDefaultTimeout() compress.WaitWithDefaultTimeout()
outfile = outfile + ".gz" outfile = outfile + ".gz"
@ -253,7 +254,7 @@ var _ = Describe("Podman load", func() {
save := podmanTest.Podman([]string{"save", "-o", outfile, BB}) save := podmanTest.Podman([]string{"save", "-o", outfile, BB})
save.WaitWithDefaultTimeout() save.WaitWithDefaultTimeout()
Expect(save.ExitCode()).To(Equal(0)) Expect(save.ExitCode()).To(Equal(0))
session := podmanTest.SystemExec("xz", []string{outfile}) session := SystemExec("xz", []string{outfile})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman logs", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman logs", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman mount", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman mount", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman namespaces", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman namespaces", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pause", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
pausedState := "Paused" pausedState := "Paused"
@ -23,7 +24,7 @@ var _ = Describe("Podman pause", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod create", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod create", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"strconv" "strconv"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman pod create", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman pod create", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
podmanTest.RestoreArtifact(infra) podmanTest.RestoreArtifact(infra)
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod inspect", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod inspect", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod kill", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod kill", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod pause", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
pausedState := "Paused" pausedState := "Paused"
@ -22,7 +23,7 @@ var _ = Describe("Podman pod pause", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod create", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod create", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
podmanTest.RestoreArtifact(infra) podmanTest.RestoreArtifact(infra)
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"sort" "sort"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman ps", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman ps", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod restart", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod restart", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod rm", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod rm", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod start", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod start", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod stats", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod stats", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman pod stop", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman pod stop", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman top", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman top", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"strings" "strings"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman port", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman port", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -6,6 +6,7 @@ import (
"regexp" "regexp"
"sort" "sort"
. "github.com/containers/libpod/test/utils"
"github.com/docker/go-units" "github.com/docker/go-units"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
@ -15,7 +16,7 @@ var _ = Describe("Podman ps", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -23,7 +24,7 @@ var _ = Describe("Podman ps", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"os" "os"
"fmt" "fmt"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"strings" "strings"
@ -13,7 +14,7 @@ var _ = Describe("Podman pull", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman pull", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -101,7 +102,7 @@ var _ = Describe("Podman pull", func() {
session = podmanTest.Podman([]string{"rmi", "alpine"}) session = podmanTest.Podman([]string{"rmi", "alpine"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp.tar"}) clean := SystemExec("rm", []string{"/tmp/alp.tar"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })
@ -119,12 +120,12 @@ var _ = Describe("Podman pull", func() {
session = podmanTest.Podman([]string{"rmi", "alpine"}) session = podmanTest.Podman([]string{"rmi", "alpine"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"/tmp/oci-alp.tar"}) clean := SystemExec("rm", []string{"/tmp/oci-alp.tar"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
}) })
It("podman pull from local directory", func() { It("podman pull from local directory", func() {
setup := podmanTest.SystemExec("mkdir", []string{"-p", "/tmp/podmantestdir"}) setup := SystemExec("mkdir", []string{"-p", "/tmp/podmantestdir"})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
session := podmanTest.Podman([]string{"push", "alpine", "dir:/tmp/podmantestdir"}) session := podmanTest.Podman([]string{"push", "alpine", "dir:/tmp/podmantestdir"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
@ -139,7 +140,7 @@ var _ = Describe("Podman pull", func() {
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"-fr", "/tmp/podmantestdir"}) clean := SystemExec("rm", []string{"-fr", "/tmp/podmantestdir"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
}) })

View File

@ -6,6 +6,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -14,7 +15,7 @@ var _ = Describe("Podman push", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -22,7 +23,7 @@ var _ = Describe("Podman push", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -52,7 +53,7 @@ var _ = Describe("Podman push", func() {
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"-fr", "/tmp/busybox"}) clean := SystemExec("rm", []string{"-fr", "/tmp/busybox"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })
@ -66,7 +67,7 @@ var _ = Describe("Podman push", func() {
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
@ -82,20 +83,20 @@ var _ = Describe("Podman push", func() {
authPath := filepath.Join(podmanTest.TempDir, "auth") authPath := filepath.Join(podmanTest.TempDir, "auth")
os.Mkdir(authPath, os.ModePerm) os.Mkdir(authPath, os.ModePerm)
os.MkdirAll("/etc/containers/certs.d/localhost:5000", os.ModePerm) os.MkdirAll("/etc/containers/certs.d/localhost:5000", os.ModePerm)
debug := podmanTest.SystemExec("ls", []string{"-l", podmanTest.TempDir}) debug := SystemExec("ls", []string{"-l", podmanTest.TempDir})
debug.WaitWithDefaultTimeout() debug.WaitWithDefaultTimeout()
cwd, _ := os.Getwd() cwd, _ := os.Getwd()
certPath := filepath.Join(cwd, "../", "certs") certPath := filepath.Join(cwd, "../", "certs")
if IsCommandAvailable("getenforce") { if IsCommandAvailable("getenforce") {
ge := podmanTest.SystemExec("getenforce", []string{}) ge := SystemExec("getenforce", []string{})
ge.WaitWithDefaultTimeout() ge.WaitWithDefaultTimeout()
if ge.OutputToString() == "Enforcing" { if ge.OutputToString() == "Enforcing" {
se := podmanTest.SystemExec("setenforce", []string{"0"}) se := SystemExec("setenforce", []string{"0"})
se.WaitWithDefaultTimeout() se.WaitWithDefaultTimeout()
defer podmanTest.SystemExec("setenforce", []string{"1"}) defer SystemExec("setenforce", []string{"1"})
} }
} }
podmanTest.RestoreArtifact(registry) podmanTest.RestoreArtifact(registry)
@ -108,7 +109,7 @@ var _ = Describe("Podman push", func() {
f.WriteString(session.OutputToString()) f.WriteString(session.OutputToString())
f.Sync() f.Sync()
debug = podmanTest.SystemExec("cat", []string{filepath.Join(authPath, "htpasswd")}) debug = SystemExec("cat", []string{filepath.Join(authPath, "htpasswd")})
debug.WaitWithDefaultTimeout() debug.WaitWithDefaultTimeout()
session = podmanTest.Podman([]string{"run", "-d", "-p", "5000:5000", "--name", "registry", "-v", session = podmanTest.Podman([]string{"run", "-d", "-p", "5000:5000", "--name", "registry", "-v",
@ -119,7 +120,7 @@ var _ = Describe("Podman push", func() {
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
@ -134,7 +135,7 @@ var _ = Describe("Podman push", func() {
push.WaitWithDefaultTimeout() push.WaitWithDefaultTimeout()
Expect(push.ExitCode()).To(Equal(0)) Expect(push.ExitCode()).To(Equal(0))
setup := podmanTest.SystemExec("cp", []string{filepath.Join(certPath, "domain.crt"), "/etc/containers/certs.d/localhost:5000/ca.crt"}) setup := SystemExec("cp", []string{filepath.Join(certPath, "domain.crt"), "/etc/containers/certs.d/localhost:5000/ca.crt"})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
defer os.RemoveAll("/etc/containers/certs.d/localhost:5000") defer os.RemoveAll("/etc/containers/certs.d/localhost:5000")
@ -155,20 +156,20 @@ var _ = Describe("Podman push", func() {
session := podmanTest.Podman([]string{"push", ALPINE, "docker-archive:/tmp/alp:latest"}) session := podmanTest.Podman([]string{"push", ALPINE, "docker-archive:/tmp/alp:latest"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp"}) clean := SystemExec("rm", []string{"/tmp/alp"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })
It("podman push to docker daemon", func() { It("podman push to docker daemon", func() {
setup := podmanTest.SystemExec("bash", []string{"-c", "systemctl status docker 2>&1"}) setup := SystemExec("bash", []string{"-c", "systemctl status docker 2>&1"})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
if setup.LineInOutputContains("Active: inactive") { if setup.LineInOutputContains("Active: inactive") {
setup = podmanTest.SystemExec("systemctl", []string{"start", "docker"}) setup = SystemExec("systemctl", []string{"start", "docker"})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
defer podmanTest.SystemExec("systemctl", []string{"stop", "docker"}) defer SystemExec("systemctl", []string{"stop", "docker"})
} else if setup.ExitCode() != 0 { } else if setup.ExitCode() != 0 {
Skip("Docker is not available") Skip("Docker is not available")
} }
@ -177,12 +178,12 @@ var _ = Describe("Podman push", func() {
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
check := podmanTest.SystemExec("docker", []string{"images", "--format", "{{.Repository}}:{{.Tag}}"}) check := SystemExec("docker", []string{"images", "--format", "{{.Repository}}:{{.Tag}}"})
check.WaitWithDefaultTimeout() check.WaitWithDefaultTimeout()
Expect(check.ExitCode()).To(Equal(0)) Expect(check.ExitCode()).To(Equal(0))
Expect(check.OutputToString()).To(ContainSubstring("alpine:podmantest")) Expect(check.OutputToString()).To(ContainSubstring("alpine:podmantest"))
clean := podmanTest.SystemExec("docker", []string{"rmi", "alpine:podmantest"}) clean := SystemExec("docker", []string{"rmi", "alpine:podmantest"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })
@ -191,7 +192,7 @@ var _ = Describe("Podman push", func() {
session := podmanTest.Podman([]string{"push", ALPINE, "oci-archive:/tmp/alp.tar:latest"}) session := podmanTest.Podman([]string{"push", ALPINE, "oci-archive:/tmp/alp.tar:latest"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp.tar"}) clean := SystemExec("rm", []string{"/tmp/alp.tar"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })
@ -204,14 +205,14 @@ var _ = Describe("Podman push", func() {
ostreePath := filepath.Join(podmanTest.TempDir, "ostree/repo") ostreePath := filepath.Join(podmanTest.TempDir, "ostree/repo")
os.MkdirAll(ostreePath, os.ModePerm) os.MkdirAll(ostreePath, os.ModePerm)
setup := podmanTest.SystemExec("ostree", []string{strings.Join([]string{"--repo=", ostreePath}, ""), "init"}) setup := SystemExec("ostree", []string{strings.Join([]string{"--repo=", ostreePath}, ""), "init"})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
session := podmanTest.Podman([]string{"push", ALPINE, strings.Join([]string{"ostree:alp@", ostreePath}, "")}) session := podmanTest.Podman([]string{"push", ALPINE, strings.Join([]string{"ostree:alp@", ostreePath}, "")})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"-rf", ostreePath}) clean := SystemExec("rm", []string{"-rf", ostreePath})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })
@ -220,7 +221,7 @@ var _ = Describe("Podman push", func() {
session := podmanTest.Podman([]string{"push", ALPINE, "docker-archive:/tmp/alp"}) session := podmanTest.Podman([]string{"push", ALPINE, "docker-archive:/tmp/alp"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp"}) clean := SystemExec("rm", []string{"/tmp/alp"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })
@ -229,7 +230,7 @@ var _ = Describe("Podman push", func() {
session := podmanTest.Podman([]string{"push", ALPINE, "oci-archive:/tmp/alp-oci"}) session := podmanTest.Podman([]string{"push", ALPINE, "oci-archive:/tmp/alp-oci"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp-oci"}) clean := SystemExec("rm", []string{"/tmp/alp-oci"})
clean.WaitWithDefaultTimeout() clean.WaitWithDefaultTimeout()
Expect(clean.ExitCode()).To(Equal(0)) Expect(clean.ExitCode()).To(Equal(0))
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"time" "time"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman refresh", func() {
var ( var (
tmpdir string tmpdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman refresh", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tmpdir) podmanTest = PodmanTestCreate(tmpdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -43,13 +44,13 @@ var _ = Describe("Podman refresh", func() {
createSession.WaitWithDefaultTimeout() createSession.WaitWithDefaultTimeout()
Expect(createSession.ExitCode()).To(Equal(0)) Expect(createSession.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainers()).To(Equal(1)) Expect(podmanTest.NumberOfContainers()).To(Equal(1))
Expect(podmanTest.NumberOfRunningContainers()).To(Equal(0)) Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
refreshSession := podmanTest.Podman([]string{"container", "refresh"}) refreshSession := podmanTest.Podman([]string{"container", "refresh"})
refreshSession.WaitWithDefaultTimeout() refreshSession.WaitWithDefaultTimeout()
Expect(refreshSession.ExitCode()).To(Equal(0)) Expect(refreshSession.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainers()).To(Equal(1)) Expect(podmanTest.NumberOfContainers()).To(Equal(1))
Expect(podmanTest.NumberOfRunningContainers()).To(Equal(0)) Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
}) })
Specify("Refresh with running container restarts container", func() { Specify("Refresh with running container restarts container", func() {
@ -57,7 +58,7 @@ var _ = Describe("Podman refresh", func() {
createSession.WaitWithDefaultTimeout() createSession.WaitWithDefaultTimeout()
Expect(createSession.ExitCode()).To(Equal(0)) Expect(createSession.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainers()).To(Equal(1)) Expect(podmanTest.NumberOfContainers()).To(Equal(1))
Expect(podmanTest.NumberOfRunningContainers()).To(Equal(1)) Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
// HACK: ensure container starts before we move on // HACK: ensure container starts before we move on
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
@ -66,6 +67,6 @@ var _ = Describe("Podman refresh", func() {
refreshSession.WaitWithDefaultTimeout() refreshSession.WaitWithDefaultTimeout()
Expect(refreshSession.ExitCode()).To(Equal(0)) Expect(refreshSession.ExitCode()).To(Equal(0))
Expect(podmanTest.NumberOfContainers()).To(Equal(1)) Expect(podmanTest.NumberOfContainers()).To(Equal(1))
Expect(podmanTest.NumberOfRunningContainers()).To(Equal(1)) Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
}) })
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"time" "time"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman restart", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman restart", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -74,7 +75,7 @@ var _ = Describe("Podman restart", func() {
It("Podman restart running container", func() { It("Podman restart running container", func() {
_ = podmanTest.RunTopContainer("test1") _ = podmanTest.RunTopContainer("test1")
ok := WaitForContainer(&podmanTest) ok := WaitForContainer(podmanTest)
Expect(ok).To(BeTrue()) Expect(ok).To(BeTrue())
startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1"}) startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1"})
startTime.WaitWithDefaultTimeout() startTime.WaitWithDefaultTimeout()

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman rm", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman rm", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman rmi", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman rmi", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -9,6 +9,7 @@ import (
"runtime" "runtime"
"syscall" "syscall"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -30,7 +31,7 @@ var _ = Describe("Podman rootless", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -38,7 +39,7 @@ var _ = Describe("Podman rootless", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.CgroupManager = "cgroupfs" podmanTest.CgroupManager = "cgroupfs"
podmanTest.StorageOptions = ROOTLESS_STORAGE_OPTIONS podmanTest.StorageOptions = ROOTLESS_STORAGE_OPTIONS
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
@ -68,7 +69,7 @@ var _ = Describe("Podman rootless", func() {
return os.Lchown(p, 1000, 1000) return os.Lchown(p, 1000, 1000)
} }
type rootlessCB func(test PodmanTest, xdgRuntimeDir string, home string, mountPath string) type rootlessCB func(test *PodmanTestIntegration, xdgRuntimeDir string, home string, mountPath string)
runInRootlessContext := func(cb rootlessCB) { runInRootlessContext := func(cb rootlessCB) {
// Check if we can create an user namespace // Check if we can create an user namespace
@ -91,7 +92,7 @@ var _ = Describe("Podman rootless", func() {
tempdir, err := CreateTempDirInTempDir() tempdir, err := CreateTempDirInTempDir()
Expect(err).To(BeNil()) Expect(err).To(BeNil())
rootlessTest := PodmanCreate(tempdir) rootlessTest := PodmanTestCreate(tempdir)
rootlessTest.CgroupManager = "cgroupfs" rootlessTest.CgroupManager = "cgroupfs"
rootlessTest.StorageOptions = ROOTLESS_STORAGE_OPTIONS rootlessTest.StorageOptions = ROOTLESS_STORAGE_OPTIONS
err = filepath.Walk(tempdir, chownFunc) err = filepath.Walk(tempdir, chownFunc)
@ -116,7 +117,7 @@ var _ = Describe("Podman rootless", func() {
} }
It("podman rootless pod", func() { It("podman rootless pod", func() {
f := func(rootlessTest PodmanTest, xdgRuntimeDir string, home string, mountPath string) { f := func(rootlessTest *PodmanTestIntegration, xdgRuntimeDir string, home string, mountPath string) {
env := os.Environ() env := os.Environ()
env = append(env, fmt.Sprintf("XDG_RUNTIME_DIR=%s", xdgRuntimeDir)) env = append(env, fmt.Sprintf("XDG_RUNTIME_DIR=%s", xdgRuntimeDir))
env = append(env, fmt.Sprintf("HOME=%s", home)) env = append(env, fmt.Sprintf("HOME=%s", home))
@ -157,7 +158,7 @@ var _ = Describe("Podman rootless", func() {
}) })
runRootlessHelper := func(args []string) { runRootlessHelper := func(args []string) {
f := func(rootlessTest PodmanTest, xdgRuntimeDir string, home string, mountPath string) { f := func(rootlessTest *PodmanTestIntegration, xdgRuntimeDir string, home string, mountPath string) {
runtime.LockOSThread() runtime.LockOSThread()
defer runtime.UnlockOSThread() defer runtime.UnlockOSThread()
env := os.Environ() env := os.Environ()

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreArtifact(fedoraMinimal) podmanTest.RestoreArtifact(fedoraMinimal)
}) })
@ -32,7 +33,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
}) })
Specify("valid --cgroup-parent using cgroupfs", func() { Specify("valid --cgroup-parent using cgroupfs", func() {
if !containerized() { if !Containerized() {
Skip("Must be containerized to run this test.") Skip("Must be containerized to run this test.")
} }
cgroup := "/zzz" cgroup := "/zzz"
@ -45,7 +46,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
Specify("no --cgroup-parent", func() { Specify("no --cgroup-parent", func() {
cgroup := "/libpod_parent" cgroup := "/libpod_parent"
if !containerized() && podmanTest.CgroupManager != "cgroupfs" { if !Containerized() && podmanTest.CgroupManager != "cgroupfs" {
cgroup = "/machine.slice" cgroup = "/machine.slice"
} }
run := podmanTest.Podman([]string{"run", fedoraMinimal, "cat", "/proc/self/cgroup"}) run := podmanTest.Podman([]string{"run", fedoraMinimal, "cat", "/proc/self/cgroup"})
@ -56,7 +57,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
}) })
Specify("valid --cgroup-parent using slice", func() { Specify("valid --cgroup-parent using slice", func() {
if containerized() || podmanTest.CgroupManager == "cgroupfs" { if Containerized() || podmanTest.CgroupManager == "cgroupfs" {
Skip("Requires Systemd cgroup manager support") Skip("Requires Systemd cgroup manager support")
} }
cgroup := "aaaa.slice" cgroup := "aaaa.slice"

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run exit", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run exit", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -32,14 +33,14 @@ var _ = Describe("Podman run exit", func() {
}) })
It("podman run -d mount cleanup test", func() { It("podman run -d mount cleanup test", func() {
mount := podmanTest.SystemExec("mount", nil) mount := SystemExec("mount", nil)
mount.WaitWithDefaultTimeout() mount.WaitWithDefaultTimeout()
out1 := mount.OutputToString() out1 := mount.OutputToString()
result := podmanTest.Podman([]string{"create", "-dt", ALPINE, "echo", "hello"}) result := podmanTest.Podman([]string{"create", "-dt", ALPINE, "echo", "hello"})
result.WaitWithDefaultTimeout() result.WaitWithDefaultTimeout()
Expect(result.ExitCode()).To(Equal(0)) Expect(result.ExitCode()).To(Equal(0))
mount = podmanTest.SystemExec("mount", nil) mount = SystemExec("mount", nil)
mount.WaitWithDefaultTimeout() mount.WaitWithDefaultTimeout()
out2 := mount.OutputToString() out2 := mount.OutputToString()
Expect(out1).To(Equal(out2)) Expect(out1).To(Equal(out2))

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run cpu", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run cpu", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run device", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run device", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run dns", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run dns", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run entrypoint", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run entrypoint", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreArtifact(ALPINE) podmanTest.RestoreArtifact(ALPINE)
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run exit", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run exit", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run memory", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run memory", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman rmi", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
hostname, _ = os.Hostname() hostname, _ = os.Hostname()
) )
@ -21,7 +22,7 @@ var _ = Describe("Podman rmi", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -54,7 +55,7 @@ var _ = Describe("Podman rmi", func() {
session := podmanTest.Podman([]string{"run", "-dt", "--expose", "222-223", "-P", ALPINE, "/bin/sh"}) session := podmanTest.Podman([]string{"run", "-dt", "--expose", "222-223", "-P", ALPINE, "/bin/sh"})
session.Wait(30) session.Wait(30)
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
results := podmanTest.SystemExec("iptables", []string{"-t", "nat", "-L"}) results := SystemExec("iptables", []string{"-t", "nat", "-L"})
results.Wait(30) results.Wait(30)
Expect(results.ExitCode()).To(Equal(0)) Expect(results.ExitCode()).To(Equal(0))
Expect(results.OutputToString()).To(ContainSubstring("222")) Expect(results.OutputToString()).To(ContainSubstring("222"))
@ -65,12 +66,12 @@ var _ = Describe("Podman rmi", func() {
session := podmanTest.Podman([]string{"run", "-dt", "-p", "80:8000", ALPINE, "/bin/sh"}) session := podmanTest.Podman([]string{"run", "-dt", "-p", "80:8000", ALPINE, "/bin/sh"})
session.Wait(30) session.Wait(30)
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
results := podmanTest.SystemExec("iptables", []string{"-t", "nat", "-L"}) results := SystemExec("iptables", []string{"-t", "nat", "-L"})
results.Wait(30) results.Wait(30)
Expect(results.ExitCode()).To(Equal(0)) Expect(results.ExitCode()).To(Equal(0))
Expect(results.OutputToString()).To(ContainSubstring("8000")) Expect(results.OutputToString()).To(ContainSubstring("8000"))
ncBusy := podmanTest.SystemExec("nc", []string{"-l", "-p", "80"}) ncBusy := SystemExec("nc", []string{"-l", "-p", "80"})
ncBusy.Wait(10) ncBusy.Wait(10)
Expect(ncBusy.ExitCode()).ToNot(Equal(0)) Expect(ncBusy.ExitCode()).ToNot(Equal(0))
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"strings" "strings"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman run ns", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman run ns", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreArtifact(fedoraMinimal) podmanTest.RestoreArtifact(fedoraMinimal)
}) })
@ -49,7 +50,7 @@ var _ = Describe("Podman run ns", func() {
}) })
It("podman run ipcns test", func() { It("podman run ipcns test", func() {
setup := podmanTest.SystemExec("ls", []string{"--inode", "-d", "/dev/shm"}) setup := SystemExec("ls", []string{"--inode", "-d", "/dev/shm"})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0)) Expect(setup.ExitCode()).To(Equal(0))
hostShm := setup.OutputToString() hostShm := setup.OutputToString()
@ -61,7 +62,7 @@ var _ = Describe("Podman run ns", func() {
}) })
It("podman run ipcns ipcmk host test", func() { It("podman run ipcns ipcmk host test", func() {
setup := podmanTest.SystemExec("ipcmk", []string{"-M", "1024"}) setup := SystemExec("ipcmk", []string{"-M", "1024"})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0)) Expect(setup.ExitCode()).To(Equal(0))
output := strings.Split(setup.OutputToString(), " ") output := strings.Split(setup.OutputToString(), " ")
@ -70,7 +71,7 @@ var _ = Describe("Podman run ns", func() {
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
setup = podmanTest.SystemExec("ipcrm", []string{"-m", ipc}) setup = SystemExec("ipcrm", []string{"-m", ipc})
setup.WaitWithDefaultTimeout() setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0)) Expect(setup.ExitCode()).To(Equal(0))
}) })

View File

@ -4,6 +4,7 @@ import (
"os" "os"
"fmt" "fmt"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run passwd", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run passwd", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"strings" "strings"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman privileged container tests", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman privileged container tests", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -42,7 +43,7 @@ var _ = Describe("Podman privileged container tests", func() {
}) })
It("podman privileged CapEff", func() { It("podman privileged CapEff", func() {
cap := podmanTest.SystemExec("grep", []string{"CapEff", "/proc/self/status"}) cap := SystemExec("grep", []string{"CapEff", "/proc/self/status"})
cap.WaitWithDefaultTimeout() cap.WaitWithDefaultTimeout()
Expect(cap.ExitCode()).To(Equal(0)) Expect(cap.ExitCode()).To(Equal(0))
@ -53,7 +54,7 @@ var _ = Describe("Podman privileged container tests", func() {
}) })
It("podman cap-add CapEff", func() { It("podman cap-add CapEff", func() {
cap := podmanTest.SystemExec("grep", []string{"CapEff", "/proc/self/status"}) cap := SystemExec("grep", []string{"CapEff", "/proc/self/status"})
cap.WaitWithDefaultTimeout() cap.WaitWithDefaultTimeout()
Expect(cap.ExitCode()).To(Equal(0)) Expect(cap.ExitCode()).To(Equal(0))
@ -87,13 +88,13 @@ var _ = Describe("Podman privileged container tests", func() {
It("run no-new-privileges test", func() { It("run no-new-privileges test", func() {
// Check if our kernel is new enough // Check if our kernel is new enough
k, err := IsKernelNewThan("4.14") k, err := IsKernelNewerThan("4.14")
Expect(err).To(BeNil()) Expect(err).To(BeNil())
if !k { if !k {
Skip("Kernel is not new enough to test this feature") Skip("Kernel is not new enough to test this feature")
} }
cap := podmanTest.SystemExec("grep", []string{"NoNewPrivs", "/proc/self/status"}) cap := SystemExec("grep", []string{"NoNewPrivs", "/proc/self/status"})
cap.WaitWithDefaultTimeout() cap.WaitWithDefaultTimeout()
if cap.ExitCode() != 0 { if cap.ExitCode() != 0 {
Skip("Can't determine NoNewPrivs") Skip("Can't determine NoNewPrivs")

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run restart containers", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run restart containers", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -43,7 +44,7 @@ var _ = Describe("Podman run restart containers", func() {
It("Podman start after signal kill", func() { It("Podman start after signal kill", func() {
_ = podmanTest.RunTopContainer("test1") _ = podmanTest.RunTopContainer("test1")
ok := WaitForContainer(&podmanTest) ok := WaitForContainer(podmanTest)
Expect(ok).To(BeTrue()) Expect(ok).To(BeTrue())
killSession := podmanTest.Podman([]string{"kill", "-s", "9", "test1"}) killSession := podmanTest.Podman([]string{"kill", "-s", "9", "test1"})

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"github.com/opencontainers/selinux/go-selinux" "github.com/opencontainers/selinux/go-selinux"
@ -13,7 +14,7 @@ var _ = Describe("Podman run", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman run", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
if !selinux.GetEnabled() { if !selinux.GetEnabled() {
Skip("SELinux not enabled") Skip("SELinux not enabled")

View File

@ -4,39 +4,24 @@ import (
"fmt" "fmt"
"io" "io"
"os" "os"
"os/exec"
"path/filepath" "path/filepath"
"strings" "strings"
"syscall" "syscall"
"time" "time"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
) )
// PodmanPID execs podman and returns its PID
func (p *PodmanTest) PodmanPID(args []string) (*PodmanSession, int) {
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}, command.Process.Pid
}
const sigCatch = "trap \"echo FOO >> /h/fifo \" 8; echo READY >> /h/fifo; while :; do sleep 0.25; done" const sigCatch = "trap \"echo FOO >> /h/fifo \" 8; echo READY >> /h/fifo; while :; do sleep 0.25; done"
var _ = Describe("Podman run with --sig-proxy", func() { var _ = Describe("Podman run with --sig-proxy", func() {
var ( var (
tmpdir string tmpdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -44,7 +29,7 @@ var _ = Describe("Podman run with --sig-proxy", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tmpdir) podmanTest = PodmanTestCreate(tmpdir)
podmanTest.RestoreArtifact(fedoraMinimal) podmanTest.RestoreArtifact(fedoraMinimal)
}) })
@ -122,7 +107,7 @@ var _ = Describe("Podman run with --sig-proxy", func() {
signal := syscall.SIGPOLL signal := syscall.SIGPOLL
session, pid := podmanTest.PodmanPID([]string{"run", "--name", "test2", "--sig-proxy=false", fedoraMinimal, "bash", "-c", sigCatch}) session, pid := podmanTest.PodmanPID([]string{"run", "--name", "test2", "--sig-proxy=false", fedoraMinimal, "bash", "-c", sigCatch})
ok := WaitForContainer(&podmanTest) ok := WaitForContainer(podmanTest)
Expect(ok).To(BeTrue()) Expect(ok).To(BeTrue())
// Kill with given signal // Kill with given signal

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman run with --ip flag", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman run with --ip flag", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -7,6 +7,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
. "github.com/containers/libpod/test/utils"
"github.com/mrunalp/fileutils" "github.com/mrunalp/fileutils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
@ -16,7 +17,7 @@ var _ = Describe("Podman run", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -24,7 +25,7 @@ var _ = Describe("Podman run", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -355,7 +356,7 @@ var _ = Describe("Podman run", func() {
keyFile := filepath.Join(targetDir, "key.pem") keyFile := filepath.Join(targetDir, "key.pem")
err = ioutil.WriteFile(keyFile, []byte(mountString), 0755) err = ioutil.WriteFile(keyFile, []byte(mountString), 0755)
Expect(err).To(BeNil()) Expect(err).To(BeNil())
execSession := podmanTest.SystemExec("ln", []string{"-s", targetDir, filepath.Join(secretsDir, "mysymlink")}) execSession := SystemExec("ln", []string{"-s", targetDir, filepath.Join(secretsDir, "mysymlink")})
execSession.WaitWithDefaultTimeout() execSession.WaitWithDefaultTimeout()
Expect(execSession.ExitCode()).To(Equal(0)) Expect(execSession.ExitCode()).To(Equal(0))

View File

@ -4,6 +4,7 @@ import (
"os" "os"
"fmt" "fmt"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman UserNS support", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman UserNS support", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -20,7 +21,7 @@ var _ = Describe("podman container runlabel", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -28,7 +29,7 @@ var _ = Describe("podman container runlabel", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman save", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -21,7 +22,7 @@ var _ = Describe("Podman save", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"strconv" "strconv"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -13,7 +14,7 @@ var _ = Describe("Podman search", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
const regFileContents = ` const regFileContents = `
[registries.search] [registries.search]
@ -40,7 +41,7 @@ var _ = Describe("Podman search", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })
@ -136,7 +137,7 @@ var _ = Describe("Podman search", func() {
fakereg.WaitWithDefaultTimeout() fakereg.WaitWithDefaultTimeout()
Expect(fakereg.ExitCode()).To(Equal(0)) Expect(fakereg.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
@ -159,7 +160,7 @@ var _ = Describe("Podman search", func() {
registry.WaitWithDefaultTimeout() registry.WaitWithDefaultTimeout()
Expect(registry.ExitCode()).To(Equal(0)) Expect(registry.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry3", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry3", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
@ -182,7 +183,7 @@ var _ = Describe("Podman search", func() {
registry.WaitWithDefaultTimeout() registry.WaitWithDefaultTimeout()
Expect(registry.ExitCode()).To(Equal(0)) Expect(registry.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry4", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry4", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
@ -214,7 +215,7 @@ var _ = Describe("Podman search", func() {
registry.WaitWithDefaultTimeout() registry.WaitWithDefaultTimeout()
Expect(registry.ExitCode()).To(Equal(0)) Expect(registry.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry5", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry5", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"}) push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
@ -245,7 +246,7 @@ var _ = Describe("Podman search", func() {
registry.WaitWithDefaultTimeout() registry.WaitWithDefaultTimeout()
Expect(registry.ExitCode()).To(Equal(0)) Expect(registry.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry6", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry6", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"}) push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:5000/my-alpine"})
@ -276,7 +277,7 @@ var _ = Describe("Podman search", func() {
registryLocal.WaitWithDefaultTimeout() registryLocal.WaitWithDefaultTimeout()
Expect(registryLocal.ExitCode()).To(Equal(0)) Expect(registryLocal.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry7", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry7", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
@ -284,7 +285,7 @@ var _ = Describe("Podman search", func() {
registryLocal.WaitWithDefaultTimeout() registryLocal.WaitWithDefaultTimeout()
Expect(registryLocal.ExitCode()).To(Equal(0)) Expect(registryLocal.ExitCode()).To(Equal(0))
if !WaitContainerReady(&podmanTest, "registry8", "listening on", 20, 1) { if !WaitContainerReady(podmanTest, "registry8", "listening on", 20, 1) {
Skip("Can not start docker registry.") Skip("Can not start docker registry.")
} }
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:6000/my-alpine"}) push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:6000/my-alpine"})

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman start", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman start", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman stats", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman stats", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman stop", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman stop", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman tag", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman tag", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman top", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman top", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman version", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman version", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
}) })
AfterEach(func() { AfterEach(func() {

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
@ -12,7 +13,7 @@ var _ = Describe("Podman wait", func() {
var ( var (
tempdir string tempdir string
err error err error
podmanTest PodmanTest podmanTest *PodmanTestIntegration
) )
BeforeEach(func() { BeforeEach(func() {
@ -20,7 +21,7 @@ var _ = Describe("Podman wait", func() {
if err != nil { if err != nil {
os.Exit(1) os.Exit(1)
} }
podmanTest = PodmanCreate(tempdir) podmanTest = PodmanTestCreate(tempdir)
podmanTest.RestoreAllArtifacts() podmanTest.RestoreAllArtifacts()
}) })

29
test/goecho/goecho.go Normal file
View File

@ -0,0 +1,29 @@
package main
import (
"fmt"
"os"
"strconv"
"time"
)
func main() {
args := os.Args[1:]
exitCode := 0
for i := 0; i < len(args); i++ {
fmt.Fprintln(os.Stdout, args[i])
fmt.Fprintln(os.Stderr, args[i])
}
if len(args) > 1 {
num, _ := strconv.Atoi(args[1])
if args[0] == "exitcode" {
exitCode = num
}
if args[0] == "sleep" {
time.Sleep(time.Duration(num) * time.Second)
}
}
os.Exit(exitCode)
}

View File

@ -0,0 +1,150 @@
package utils_test
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"reflect"
"strings"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo"
. "github.com/onsi/ginkgo/extensions/table"
. "github.com/onsi/gomega"
)
var _ = Describe("Common functions test", func() {
var defaultOSPath string
var defaultCgroupPath string
BeforeEach(func() {
defaultOSPath = OSReleasePath
defaultCgroupPath = ProcessOneCgroupPath
})
AfterEach(func() {
OSReleasePath = defaultOSPath
ProcessOneCgroupPath = defaultCgroupPath
})
It("Test CreateTempDirInTempDir", func() {
tmpDir, _ := CreateTempDirInTempDir()
_, err := os.Stat(tmpDir)
Expect(os.IsNotExist(err)).ShouldNot(BeTrue(), "Directory is not created as expect")
})
It("Test SystemExec", func() {
session := SystemExec(GoechoPath, []string{})
Expect(session.Command.Process).ShouldNot(BeNil(), "SystemExec can not start a process")
})
It("Test StringInSlice", func() {
testSlice := []string{"apple", "peach", "pear"}
Expect(StringInSlice("apple", testSlice)).To(BeTrue(), "apple should in ['apple', 'peach', 'pear']")
Expect(StringInSlice("banana", testSlice)).ShouldNot(BeTrue(), "banana should not in ['apple', 'peach', 'pear']")
Expect(StringInSlice("anything", []string{})).ShouldNot(BeTrue(), "anything should not in empty slice")
})
DescribeTable("Test GetHostDistributionInfo",
func(path, id, ver string, empty bool) {
txt := fmt.Sprintf("ID=%s\nVERSION_ID=%s", id, ver)
if !empty {
f, _ := os.Create(path)
f.WriteString(txt)
f.Close()
}
OSReleasePath = path
host := GetHostDistributionInfo()
if empty {
Expect(host).To(Equal(HostOS{}), "HostOs should be empty.")
} else {
Expect(host.Distribution).To(Equal(strings.Trim(id, "\"")))
Expect(host.Version).To(Equal(strings.Trim(ver, "\"")))
}
},
Entry("Configure file is not exist.", "/tmp/notexist", "", "", true),
Entry("Item value with and without \"", "/tmp/os-release.test", "fedora", "\"28\"", false),
Entry("Item empty with and without \"", "/tmp/os-release.test", "", "\"\"", false),
)
DescribeTable("Test IsKernelNewerThan",
func(kv string, expect, isNil bool) {
newer, err := IsKernelNewerThan(kv)
Expect(newer).To(Equal(expect), "Version compare results is not as expect.")
Expect(err == nil).To(Equal(isNil), "Error is not as expect.")
},
Entry("Invlid kernel version: 0", "0", false, false),
Entry("Older kernel version:0.0", "0.0", true, true),
Entry("Newer kernel version: 100.17.14", "100.17.14", false, true),
Entry("Invlid kernel version: I am not a kernel version", "I am not a kernel version", false, false),
)
DescribeTable("Test TestIsCommandAvailable",
func(cmd string, expect bool) {
cmdExist := IsCommandAvailable(cmd)
Expect(cmdExist).To(Equal(expect))
},
Entry("Command exist", GoechoPath, true),
Entry("Command exist", "Fakecmd", false),
)
It("Test WriteJsonFile", func() {
type testJson struct {
Item1 int
Item2 []string
}
compareData := &testJson{}
testData := &testJson{
Item1: 5,
Item2: []string{"test"},
}
testByte, _ := json.Marshal(testData)
err := WriteJsonFile(testByte, "/tmp/testJson")
Expect(err).To(BeNil(), "Failed to write JSON to file.")
read, err := os.Open("/tmp/testJson")
defer read.Close()
Expect(err).To(BeNil(), "Can not find the JSON file after we write it.")
bytes, _ := ioutil.ReadAll(read)
json.Unmarshal(bytes, compareData)
Expect(reflect.DeepEqual(testData, compareData)).To(BeTrue(), "Data chaned after we store it to file.")
})
DescribeTable("Test Containerized",
func(path string, setEnv, createFile, expect bool) {
if setEnv && (os.Getenv("container") == "") {
os.Setenv("container", "test")
defer os.Setenv("container", "")
}
if !setEnv && (os.Getenv("container") != "") {
containerized := os.Getenv("container")
os.Setenv("container", "")
defer os.Setenv("container", containerized)
}
txt := "1:test:/"
if expect {
txt = "2:docker:/"
}
if createFile {
f, _ := os.Create(path)
f.WriteString(txt)
f.Close()
}
ProcessOneCgroupPath = path
Expect(Containerized()).To(Equal(expect))
},
Entry("Set container in env", "", true, false, true),
Entry("Can not read from file", "/tmp/notexist", false, false, false),
Entry("Docker in cgroup file", "/tmp/cgroup.test", false, true, true),
Entry("Docker not in cgroup file", "/tmp/cgroup.test", false, true, false),
)
})

View File

@ -0,0 +1,90 @@
package utils_test
import (
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("PodmanSession test", func() {
var session *PodmanSession
BeforeEach(func() {
session = StartFakeCmdSession([]string{"PodmanSession", "test", "Podman Session"})
session.WaitWithDefaultTimeout()
})
It("Test OutputToString", func() {
Expect(session.OutputToString()).To(Equal("PodmanSession test Podman Session"))
})
It("Test OutputToStringArray", func() {
Expect(session.OutputToStringArray()).To(Equal([]string{"PodmanSession", "test", "Podman Session"}))
})
It("Test ErrorToString", func() {
Expect(session.ErrorToString()).To(Equal("PodmanSession test Podman Session"))
})
It("Test ErrorToStringArray", func() {
Expect(session.ErrorToStringArray()).To(Equal([]string{"PodmanSession", "test", "Podman Session", ""}))
})
It("Test GrepString", func() {
match, backStr := session.GrepString("Session")
Expect(match).To(BeTrue())
Expect(backStr).To(Equal([]string{"PodmanSession", "Podman Session"}))
match, backStr = session.GrepString("I am not here")
Expect(match).To(Not(BeTrue()))
Expect(backStr).To(BeNil())
})
It("Test ErrorGrepString", func() {
match, backStr := session.ErrorGrepString("Session")
Expect(match).To(BeTrue())
Expect(backStr).To(Equal([]string{"PodmanSession", "Podman Session"}))
match, backStr = session.ErrorGrepString("I am not here")
Expect(match).To(Not(BeTrue()))
Expect(backStr).To(BeNil())
})
It("Test LineInOutputStartsWith", func() {
Expect(session.LineInOuputStartsWith("Podman")).To(BeTrue())
Expect(session.LineInOuputStartsWith("Session")).To(Not(BeTrue()))
})
It("Test LineInOutputContains", func() {
Expect(session.LineInOutputContains("Podman")).To(BeTrue())
Expect(session.LineInOutputContains("Session")).To(BeTrue())
Expect(session.LineInOutputContains("I am not here")).To(Not(BeTrue()))
})
It("Test LineInOutputContainsTag", func() {
session = StartFakeCmdSession([]string{"HEAD LINE", "docker.io/library/busybox latest e1ddd7948a1c 5 weeks ago 1.38MB"})
session.WaitWithDefaultTimeout()
Expect(session.LineInOutputContainsTag("docker.io/library/busybox", "latest")).To(BeTrue())
Expect(session.LineInOutputContainsTag("busybox", "latest")).To(Not(BeTrue()))
})
It("Test IsJSONOutputValid", func() {
session = StartFakeCmdSession([]string{`{"page":1,"fruits":["apple","peach","pear"]}`})
session.WaitWithDefaultTimeout()
Expect(session.IsJSONOutputValid()).To(BeTrue())
session = StartFakeCmdSession([]string{"I am not JSON"})
session.WaitWithDefaultTimeout()
Expect(session.IsJSONOutputValid()).To(Not(BeTrue()))
})
It("Test WaitWithDefaultTimeout", func() {
session = StartFakeCmdSession([]string{"sleep", "2"})
Expect(session.ExitCode()).Should(Equal(-1))
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).Should(Equal(0))
})
})

View File

@ -0,0 +1,74 @@
package utils_test
import (
"os"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("PodmanTest test", func() {
var podmanTest *FakePodmanTest
BeforeEach(func() {
podmanTest = FakePodmanTestCreate()
})
AfterEach(func() {
FakeOutputs = make(map[string][]string)
})
It("Test PodmanAsUser", func() {
FakeOutputs["check"] = []string{"check"}
os.Setenv("HOOK_OPTION", "hook_option")
env := os.Environ()
session := podmanTest.PodmanAsUser([]string{"check"}, 1000, 1000, env)
os.Unsetenv("HOOK_OPTION")
session.WaitWithDefaultTimeout()
Expect(session.Command.Process).ShouldNot(BeNil())
})
It("Test NumberOfContainersRunning", func() {
FakeOutputs["ps -q"] = []string{"one", "two"}
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
})
It("Test NumberOfContainers", func() {
FakeOutputs["ps -aq"] = []string{"one", "two"}
Expect(podmanTest.NumberOfContainers()).To(Equal(2))
})
It("Test NumberOfPods", func() {
FakeOutputs["pod ps -q"] = []string{"one", "two"}
Expect(podmanTest.NumberOfPods()).To(Equal(2))
})
It("Test WaitForContainer", func() {
FakeOutputs["ps -q"] = []string{"one", "two"}
Expect(WaitForContainer(podmanTest)).To(BeTrue())
FakeOutputs["ps -q"] = []string{"one"}
Expect(WaitForContainer(podmanTest)).To(BeTrue())
FakeOutputs["ps -q"] = []string{""}
Expect(WaitForContainer(podmanTest)).To(Not(BeTrue()))
})
It("Test GetContainerStatus", func() {
FakeOutputs["ps --all --format={{.Status}}"] = []string{"Need func update"}
Expect(podmanTest.GetContainerStatus()).To(Equal("Need func update"))
})
It("Test WaitContainerReady", func() {
FakeOutputs["logs testimage"] = []string{""}
Expect(WaitContainerReady(podmanTest, "testimage", "ready", 2, 1)).To(Not(BeTrue()))
FakeOutputs["logs testimage"] = []string{"I am ready"}
Expect(WaitContainerReady(podmanTest, "testimage", "am ready", 2, 1)).To(BeTrue())
FakeOutputs["logs testimage"] = []string{"I am ready"}
Expect(WaitContainerReady(podmanTest, "testimage", "", 2, 1)).To(BeTrue())
})
})

431
test/utils/utils.go Normal file
View File

@ -0,0 +1,431 @@
package utils
import (
"bufio"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"os/exec"
"strings"
"time"
"github.com/containers/storage/pkg/parsers/kernel"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
)
var (
defaultWaitTimeout = 90
OSReleasePath = "/etc/os-release"
ProcessOneCgroupPath = "/proc/1/cgroup"
)
// PodmanTestCommon contains common functions will be updated later in
// the inheritance structs
type PodmanTestCommon interface {
MakeOptions(args []string) []string
WaitForContainer() bool
WaitContainerReady(id string, expStr string, timeout int, step int) bool
}
// PodmanTest struct for command line options
type PodmanTest struct {
PodmanMakeOptions func(args []string) []string
PodmanBinary string
ArtifactPath string
TempDir string
}
// PodmanSession wraps the gexec.session so we can extend it
type PodmanSession struct {
*gexec.Session
}
// HostOS is a simple struct for the test os
type HostOS struct {
Distribution string
Version string
Arch string
}
// MakeOptions assembles all podman options
func (p *PodmanTest) MakeOptions(args []string) []string {
return p.PodmanMakeOptions(args)
}
// PodmanAsUser exec podman as user. uid and gid is set for credentials useage. env is used
// to record the env for debugging
func (p *PodmanTest) PodmanAsUser(args []string, uid, gid uint32, env []string) *PodmanSession {
var command *exec.Cmd
podmanOptions := p.MakeOptions(args)
if env == nil {
fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
} else {
fmt.Printf("Running: (env: %v) %s %s\n", env, p.PodmanBinary, strings.Join(podmanOptions, " "))
}
if uid != 0 || gid != 0 {
nsEnterOpts := append([]string{"--userspec", fmt.Sprintf("%d:%d", uid, gid), "/", p.PodmanBinary}, podmanOptions...)
command = exec.Command("chroot", nsEnterOpts...)
} else {
command = exec.Command(p.PodmanBinary, podmanOptions...)
}
if env != nil {
command.Env = env
}
session, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)
if err != nil {
Fail(fmt.Sprintf("unable to run podman command: %s\n%v", strings.Join(podmanOptions, " "), err))
}
return &PodmanSession{session}
}
// PodmanBase exec podman with default env.
func (p *PodmanTest) PodmanBase(args []string) *PodmanSession {
return p.PodmanAsUser(args, 0, 0, nil)
}
// WaitForContainer waits on a started container
func (p *PodmanTest) WaitForContainer() bool {
for i := 0; i < 10; i++ {
if p.NumberOfContainersRunning() > 0 {
return true
}
time.Sleep(1 * time.Second)
}
return false
}
// NumberOfContainersRunning returns an int of how many
// containers are currently running.
func (p *PodmanTest) NumberOfContainersRunning() int {
var containers []string
ps := p.PodmanBase([]string{"ps", "-q"})
ps.WaitWithDefaultTimeout()
Expect(ps.ExitCode()).To(Equal(0))
for _, i := range ps.OutputToStringArray() {
if i != "" {
containers = append(containers, i)
}
}
return len(containers)
}
// NumberOfContainers returns an int of how many
// containers are currently defined.
func (p *PodmanTest) NumberOfContainers() int {
var containers []string
ps := p.PodmanBase([]string{"ps", "-aq"})
ps.WaitWithDefaultTimeout()
Expect(ps.ExitCode()).To(Equal(0))
for _, i := range ps.OutputToStringArray() {
if i != "" {
containers = append(containers, i)
}
}
return len(containers)
}
// NumberOfPods returns an int of how many
// pods are currently defined.
func (p *PodmanTest) NumberOfPods() int {
var pods []string
ps := p.PodmanBase([]string{"pod", "ps", "-q"})
ps.WaitWithDefaultTimeout()
Expect(ps.ExitCode()).To(Equal(0))
for _, i := range ps.OutputToStringArray() {
if i != "" {
pods = append(pods, i)
}
}
return len(pods)
}
// GetContainerStatus returns the containers state.
// This function assumes only one container is active.
func (p *PodmanTest) GetContainerStatus() string {
var podmanArgs = []string{"ps"}
podmanArgs = append(podmanArgs, "--all", "--format={{.Status}}")
session := p.PodmanBase(podmanArgs)
session.WaitWithDefaultTimeout()
return session.OutputToString()
}
// WaitContainerReady waits process or service inside container start, and ready to be used.
func (p *PodmanTest) WaitContainerReady(id string, expStr string, timeout int, step int) bool {
startTime := time.Now()
s := p.PodmanBase([]string{"logs", id})
s.WaitWithDefaultTimeout()
for {
if time.Since(startTime) >= time.Duration(timeout)*time.Second {
fmt.Printf("Container %s is not ready in %ds", id, timeout)
return false
}
if strings.Contains(s.OutputToString(), expStr) {
return true
}
time.Sleep(time.Duration(step) * time.Second)
s = p.PodmanBase([]string{"logs", id})
s.WaitWithDefaultTimeout()
}
}
// WaitForContainer is a wrapper function for accept inheritance PodmanTest struct.
func WaitForContainer(p PodmanTestCommon) bool {
return p.WaitForContainer()
}
// WaitForContainerReady is a wrapper function for accept inheritance PodmanTest struct.
func WaitContainerReady(p PodmanTestCommon, id string, expStr string, timeout int, step int) bool {
return p.WaitContainerReady(id, expStr, timeout, step)
}
// OutputToString formats session output to string
func (s *PodmanSession) OutputToString() string {
fields := strings.Fields(fmt.Sprintf("%s", s.Out.Contents()))
return strings.Join(fields, " ")
}
// OutputToStringArray returns the output as a []string
// where each array item is a line split by newline
func (s *PodmanSession) OutputToStringArray() []string {
var results []string
output := fmt.Sprintf("%s", s.Out.Contents())
for _, line := range strings.Split(output, "\n") {
if line != "" {
results = append(results, line)
}
}
return results
}
// ErrorToString formats session stderr to string
func (s *PodmanSession) ErrorToString() string {
fields := strings.Fields(fmt.Sprintf("%s", s.Err.Contents()))
return strings.Join(fields, " ")
}
// ErrorToStringArray returns the stderr output as a []string
// where each array item is a line split by newline
func (s *PodmanSession) ErrorToStringArray() []string {
output := fmt.Sprintf("%s", s.Err.Contents())
return strings.Split(output, "\n")
}
// 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 s.OutputToStringArray() {
if strings.Contains(line, term) {
matches = true
greps = append(greps, line)
}
}
return matches, greps
}
// ErrorGrepString takes session stderr output and behaves like grep. it returns a bool
// if successful and an array of strings on positive matches
func (s *PodmanSession) ErrorGrepString(term string) (bool, []string) {
var (
greps []string
matches bool
)
for _, line := range s.ErrorToStringArray() {
if strings.Contains(line, term) {
matches = true
greps = append(greps, line)
}
}
return matches, greps
}
//LineInOutputStartsWith returns true if a line in a
// session output starts with the supplied string
func (s *PodmanSession) LineInOuputStartsWith(term string) bool {
for _, i := range s.OutputToStringArray() {
if strings.HasPrefix(i, term) {
return true
}
}
return false
}
//LineInOutputContains returns true if a line in a
// session output starts with the supplied string
func (s *PodmanSession) LineInOutputContains(term string) bool {
for _, i := range s.OutputToStringArray() {
if strings.Contains(i, term) {
return true
}
}
return false
}
//LineInOutputContainsTag returns true if a line in the
// session's output contains the repo-tag pair as returned
// by podman-images(1).
func (s *PodmanSession) LineInOutputContainsTag(repo, tag string) bool {
tagMap := tagOutputToMap(s.OutputToStringArray())
for r, t := range tagMap {
if repo == r && tag == t {
return true
}
}
return false
}
// IsJSONOutputValid attempts to unmarshal 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)
return false
}
return true
}
// WaitWithDefaultTimeout waits for process finished with defaultWaitTimeout
func (s *PodmanSession) WaitWithDefaultTimeout() {
s.Wait(defaultWaitTimeout)
fmt.Println("output:", s.OutputToString())
}
// CreateTempDirinTempDir create a temp dir with prefix podman_test
func CreateTempDirInTempDir() (string, error) {
return ioutil.TempDir("", "podman_test")
}
// SystemExec is used to exec a system command to check its exit code or output
func 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}
}
// StringInSlice determines if a string is in a string slice, returns bool
func StringInSlice(s string, sl []string) bool {
for _, i := range sl {
if i == s {
return true
}
}
return false
}
//tagOutPutToMap parses each string in imagesOutput and returns
// a map of repo:tag pairs. Notice, the first array item will
// be skipped as it's considered to be the header.
func tagOutputToMap(imagesOutput []string) map[string]string {
m := make(map[string]string)
// iterate over output but skip the header
for _, i := range imagesOutput[1:] {
tmp := []string{}
for _, x := range strings.Split(i, " ") {
if x != "" {
tmp = append(tmp, x)
}
}
// podman-images(1) return a list like output
// in the format of "Repository Tag [...]"
if len(tmp) < 2 {
continue
}
m[tmp[0]] = tmp[1]
}
return m
}
//GetHostDistributionInfo returns a struct with its distribution name and version
func GetHostDistributionInfo() HostOS {
f, err := os.Open(OSReleasePath)
defer f.Close()
if err != nil {
return HostOS{}
}
l := bufio.NewScanner(f)
host := HostOS{}
host.Arch = runtime.GOARCH
for l.Scan() {
if strings.HasPrefix(l.Text(), "ID=") {
host.Distribution = strings.Replace(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "", -1)
}
if strings.HasPrefix(l.Text(), "VERSION_ID=") {
host.Version = strings.Replace(strings.TrimSpace(strings.Join(strings.Split(l.Text(), "=")[1:], "")), "\"", "", -1)
}
}
return host
}
// IsKernelNewerThan compares the current kernel version to one provided. If
// the kernel is equal to or greater, returns true
func IsKernelNewerThan(version string) (bool, error) {
inputVersion, err := kernel.ParseRelease(version)
if err != nil {
return false, err
}
kv, err := kernel.GetKernelVersion()
if err != nil {
return false, err
}
// CompareKernelVersion compares two kernel.VersionInfo structs.
// Returns -1 if a < b, 0 if a == b, 1 it a > b
result := kernel.CompareKernelVersion(*kv, *inputVersion)
if result >= 0 {
return true, nil
}
return false, nil
}
//IsCommandAvaible check if command exist
func IsCommandAvailable(command string) bool {
check := exec.Command("bash", "-c", strings.Join([]string{"command -v", command}, " "))
err := check.Run()
if err != nil {
return false
}
return true
}
// WriteJsonFile write json format data to a json file
func WriteJsonFile(data []byte, filePath string) error {
var jsonData map[string]interface{}
json.Unmarshal(data, &jsonData)
formatJson, _ := json.MarshalIndent(jsonData, "", " ")
return ioutil.WriteFile(filePath, formatJson, 0644)
}
// Containerized check the podman command run inside container
func Containerized() bool {
container := os.Getenv("container")
if container != "" {
return true
}
b, err := ioutil.ReadFile(ProcessOneCgroupPath)
if err != nil {
// shrug, if we cannot read that file, return false
return false
}
if strings.Index(string(b), "docker") > -1 {
return true
}
return false
}

View File

@ -0,0 +1,52 @@
package utils_test
import (
"fmt"
"io"
"os/exec"
"strings"
"testing"
. "github.com/containers/libpod/test/utils"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
)
var FakeOutputs map[string][]string
var GoechoPath = "../goecho/goecho"
type FakePodmanTest struct {
PodmanTest
}
func FakePodmanTestCreate() *FakePodmanTest {
FakeOutputs = make(map[string][]string)
p := &FakePodmanTest{
PodmanTest: PodmanTest{
PodmanBinary: GoechoPath,
},
}
p.PodmanMakeOptions = p.makeOptions
return p
}
func (p *FakePodmanTest) makeOptions(args []string) []string {
return FakeOutputs[strings.Join(args, " ")]
}
func StartFakeCmdSession(args []string) *PodmanSession {
var outWriter, errWriter io.Writer
command := exec.Command(GoechoPath, args...)
session, err := gexec.Start(command, outWriter, errWriter)
if err != nil {
fmt.Println(err)
}
return &PodmanSession{session}
}
func TestUtils(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Unit test for test utils package")
}