mirror of https://github.com/containers/podman.git
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:
parent
236408bbbc
commit
74bcfc2f96
10
Makefile
10
Makefile
|
@ -31,7 +31,7 @@ BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions
|
|||
OCIUMOUNTINSTALLDIR=$(PREFIX)/share/oci-umount/oci-umount.d
|
||||
|
||||
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)
|
||||
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)
|
||||
$(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)
|
||||
$(GO) build -i -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/podman
|
||||
|
||||
|
@ -130,6 +133,7 @@ clean:
|
|||
test/bin2img/bin2img \
|
||||
test/checkseccomp/checkseccomp \
|
||||
test/copyimg/copyimg \
|
||||
test/goecho/goecho \
|
||||
test/testdata/redis-image \
|
||||
cmd/podman/varlink/iopodman.go \
|
||||
libpod/container_ffjson.go \
|
||||
|
@ -166,7 +170,7 @@ shell: 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
|
||||
|
||||
localunit: varlink_generate
|
||||
localunit: test/goecho/goecho varlink_generate
|
||||
$(GO) test -tags "$(BUILDTAGS)" -cover $(PACKAGES)
|
||||
|
||||
ginkgo:
|
||||
|
@ -183,7 +187,7 @@ vagrant-check:
|
|||
|
||||
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 ?= $(MANPAGES_MD:%.md=%)
|
||||
|
|
|
@ -1,8 +1,33 @@
|
|||

|
||||
# 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
|
||||
[Ginkgo](https://github.com/onsi/ginkgo) BDD testing framework. This allows
|
||||
* `PodmanSession`: Store execution session data and related *methods*. Such like get command
|
||||
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
|
||||
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/...
|
||||
```
|
||||
|
||||
### 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:
|
||||
|
||||
```
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman attach", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman attach", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
|
||||
"github.com/containers/libpod/pkg/criu"
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman checkpoint", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman checkpoint", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
if !criu.CheckForCriu() {
|
||||
Skip("CRIU is missing or too old.")
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman commit", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman commit", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman create", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman create", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"sort"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman diff", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman diff", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman exec", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman exec", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman export", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman export", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman history", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman history", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"sort"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
"github.com/docker/go-units"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
|
@ -14,7 +15,7 @@ var _ = Describe("Podman images", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -22,7 +23,7 @@ var _ = Describe("Podman images", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman import", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman import", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman Info", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman Info", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman inspect", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman inspect", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman kill", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman kill", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -1,22 +1,18 @@
|
|||
package integration
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod"
|
||||
"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/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
|
@ -35,14 +31,9 @@ var (
|
|||
defaultWaitTimeout = 90
|
||||
)
|
||||
|
||||
// PodmanSession wrapps the gexec.session so we can extend it
|
||||
type PodmanSession struct {
|
||||
*gexec.Session
|
||||
}
|
||||
|
||||
// PodmanTest struct for command line options
|
||||
type PodmanTest struct {
|
||||
PodmanBinary string
|
||||
// PodmanTestIntegration struct for command line options
|
||||
type PodmanTestIntegration struct {
|
||||
PodmanTest
|
||||
ConmonBinary string
|
||||
CrioRoot string
|
||||
CNIConfigDir string
|
||||
|
@ -50,17 +41,13 @@ type PodmanTest struct {
|
|||
RunRoot string
|
||||
StorageOptions string
|
||||
SignaturePolicyPath string
|
||||
ArtifactPath string
|
||||
TempDir string
|
||||
CgroupManager string
|
||||
Host HostOS
|
||||
}
|
||||
|
||||
// HostOS is a simple struct for the test os
|
||||
type HostOS struct {
|
||||
Distribution string
|
||||
Version string
|
||||
Arch string
|
||||
// PodmanSessionIntegration sturct for command line session
|
||||
type PodmanSessionIntegration struct {
|
||||
*PodmanSession
|
||||
}
|
||||
|
||||
// TestLibpod ginkgo master function
|
||||
|
@ -80,7 +67,7 @@ var _ = BeforeSuite(func() {
|
|||
//Cache images
|
||||
cwd, _ := os.Getwd()
|
||||
INTEGRATION_ROOT = filepath.Join(cwd, "../../")
|
||||
podman := PodmanCreate("/tmp")
|
||||
podman := PodmanTestCreate("/tmp")
|
||||
podman.ArtifactPath = ARTIFACT_DIR
|
||||
if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) {
|
||||
if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil {
|
||||
|
@ -110,13 +97,8 @@ var _ = BeforeSuite(func() {
|
|||
}
|
||||
})
|
||||
|
||||
// CreateTempDirin
|
||||
func CreateTempDirInTempDir() (string, error) {
|
||||
return ioutil.TempDir("", "podman_test")
|
||||
}
|
||||
|
||||
// PodmanCreate creates a PodmanTest instance for the tests
|
||||
func PodmanCreate(tempDir string) PodmanTest {
|
||||
// PodmanTestCreate creates a PodmanTestIntegration instance for the tests
|
||||
func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
|
||||
|
||||
host := GetHostDistributionInfo()
|
||||
cwd, _ := os.Getwd()
|
||||
|
@ -157,8 +139,12 @@ func PodmanCreate(tempDir string) PodmanTest {
|
|||
|
||||
CNIConfigDir := "/etc/cni/net.d"
|
||||
|
||||
p := PodmanTest{
|
||||
PodmanBinary: podmanBinary,
|
||||
p := &PodmanTestIntegration{
|
||||
PodmanTest: PodmanTest{
|
||||
PodmanBinary: podmanBinary,
|
||||
ArtifactPath: ARTIFACT_DIR,
|
||||
TempDir: tempDir,
|
||||
},
|
||||
ConmonBinary: conmonBinary,
|
||||
CrioRoot: filepath.Join(tempDir, "crio"),
|
||||
CNIConfigDir: CNIConfigDir,
|
||||
|
@ -166,73 +152,50 @@ func PodmanCreate(tempDir string) PodmanTest {
|
|||
RunRoot: filepath.Join(tempDir, "crio-run"),
|
||||
StorageOptions: storageOptions,
|
||||
SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
|
||||
ArtifactPath: ARTIFACT_DIR,
|
||||
TempDir: tempDir,
|
||||
CgroupManager: cgroupManager,
|
||||
Host: host,
|
||||
}
|
||||
|
||||
// Setup registries.conf ENV variable
|
||||
p.setDefaultRegistriesConfigEnv()
|
||||
// Rewrite the PodmanAsUser function
|
||||
p.PodmanMakeOptions = p.makeOptions
|
||||
return p
|
||||
}
|
||||
|
||||
//MakeOptions assembles all the podman main options
|
||||
func (p *PodmanTest) MakeOptions() []string {
|
||||
return strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s",
|
||||
func (p *PodmanTestIntegration) makeOptions(args []string) []string {
|
||||
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), " ")
|
||||
}
|
||||
|
||||
// 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") != "" {
|
||||
podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
|
||||
}
|
||||
podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
|
||||
podmanOptions = append(podmanOptions, 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, " "))
|
||||
}
|
||||
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}
|
||||
return podmanOptions
|
||||
}
|
||||
|
||||
// Podman is the exec call to podman on the filesystem
|
||||
func (p *PodmanTest) Podman(args []string) *PodmanSession {
|
||||
return p.PodmanAsUser(args, 0, 0, nil)
|
||||
func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
|
||||
podmanSession := p.PodmanBase(args)
|
||||
return &PodmanSessionIntegration{podmanSession}
|
||||
}
|
||||
|
||||
//WaitForContainer waits on a started container
|
||||
func WaitForContainer(p *PodmanTest) bool {
|
||||
for i := 0; i < 10; i++ {
|
||||
if p.NumberOfRunningContainers() == 1 {
|
||||
return true
|
||||
}
|
||||
time.Sleep(1 * time.Second)
|
||||
// PodmanPID execs podman and returns its PID
|
||||
func (p *PodmanTestIntegration) PodmanPID(args []string) (*PodmanSessionIntegration, int) {
|
||||
podmanOptions := p.MakeOptions(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 false
|
||||
podmanSession := &PodmanSession{session}
|
||||
return &PodmanSessionIntegration{podmanSession}, command.Process.Pid
|
||||
}
|
||||
|
||||
// Cleanup cleans up the temporary store
|
||||
func (p *PodmanTest) Cleanup() {
|
||||
func (p *PodmanTestIntegration) Cleanup() {
|
||||
// Remove all containers
|
||||
stopall := p.Podman([]string{"stop", "-a", "--timeout", "0"})
|
||||
stopall.WaitWithDefaultTimeout()
|
||||
|
@ -248,7 +211,7 @@ func (p *PodmanTest) Cleanup() {
|
|||
}
|
||||
|
||||
// CleanupPod cleans up the temporary store
|
||||
func (p *PodmanTest) CleanupPod() {
|
||||
func (p *PodmanTestIntegration) CleanupPod() {
|
||||
// Remove all containers
|
||||
session := p.Podman([]string{"pod", "rm", "-fa"})
|
||||
session.Wait(90)
|
||||
|
@ -258,103 +221,26 @@ func (p *PodmanTest) CleanupPod() {
|
|||
}
|
||||
}
|
||||
|
||||
// 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 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 {
|
||||
// PullImages pulls multiple images
|
||||
func (p *PodmanTestIntegration) PullImages(images []string) error {
|
||||
for _, i := range images {
|
||||
p.PullImage(i)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Pull Image a single image
|
||||
// PullImage pulls a single image
|
||||
// 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.Wait(60)
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
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
|
||||
// container and returns json
|
||||
func (s *PodmanSession) InspectContainerToJSON() []inspect.ContainerData {
|
||||
func (s *PodmanSessionIntegration) InspectContainerToJSON() []inspect.ContainerData {
|
||||
var i []inspect.ContainerData
|
||||
err := json.Unmarshal(s.Out.Contents(), &i)
|
||||
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
|
||||
func (s *PodmanSession) InspectPodToJSON() libpod.PodInspect {
|
||||
func (s *PodmanSessionIntegration) InspectPodToJSON() libpod.PodInspect {
|
||||
var i libpod.PodInspect
|
||||
err := json.Unmarshal(s.Out.Contents(), &i)
|
||||
Expect(err).To(BeNil())
|
||||
|
@ -371,30 +257,15 @@ func (s *PodmanSession) InspectPodToJSON() libpod.PodInspect {
|
|||
|
||||
// InspectImageJSON takes the session output of an inspect
|
||||
// image and returns json
|
||||
func (s *PodmanSession) InspectImageJSON() []inspect.ImageData {
|
||||
func (s *PodmanSessionIntegration) InspectImageJSON() []inspect.ImageData {
|
||||
var i []inspect.ImageData
|
||||
err := json.Unmarshal(s.Out.Contents(), &i)
|
||||
Expect(err).To(BeNil())
|
||||
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
|
||||
func (p *PodmanTest) CreateArtifact(image string) error {
|
||||
func (p *PodmanTestIntegration) CreateArtifact(image string) error {
|
||||
if os.Getenv("NO_TEST_CACHE") != "" {
|
||||
return nil
|
||||
}
|
||||
|
@ -415,7 +286,7 @@ func (p *PodmanTest) CreateArtifact(image string) error {
|
|||
}
|
||||
|
||||
// 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)
|
||||
dest := strings.Split(image, "/")
|
||||
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
|
||||
func (p *PodmanTest) RestoreAllArtifacts() error {
|
||||
func (p *PodmanTestIntegration) RestoreAllArtifacts() error {
|
||||
if os.Getenv("NO_TEST_CACHE") != "" {
|
||||
return nil
|
||||
}
|
||||
|
@ -439,7 +310,7 @@ func (p *PodmanTest) RestoreAllArtifacts() error {
|
|||
|
||||
// CreatePod creates a pod with no infra container
|
||||
// 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", ""}
|
||||
if 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
|
||||
// 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"}
|
||||
if name != "" {
|
||||
podmanArgs = append(podmanArgs, "--name", name)
|
||||
|
@ -460,7 +331,7 @@ func (p *PodmanTest) RunTopContainer(name string) *PodmanSession {
|
|||
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}
|
||||
if 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
|
||||
// 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"}
|
||||
if 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()
|
||||
}
|
||||
|
||||
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}
|
||||
if 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()
|
||||
}
|
||||
|
||||
//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
|
||||
// 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")
|
||||
err := ioutil.WriteFile(dockerfilePath, []byte(dockerfile), 0755)
|
||||
Expect(err).To(BeNil())
|
||||
|
@ -642,34 +375,12 @@ func (p *PodmanTest) BuildImage(dockerfile, imageName string, layers string) {
|
|||
Expect(session.ExitCode()).To(Equal(0))
|
||||
}
|
||||
|
||||
//GetHostDistributionInfo returns a struct with its distribution name and version
|
||||
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() {
|
||||
func (p *PodmanTestIntegration) setDefaultRegistriesConfigEnv() {
|
||||
defaultFile := filepath.Join(INTEGRATION_ROOT, "test/registries.conf")
|
||||
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")
|
||||
os.Setenv("REGISTRIES_CONFIG_PATH", outfile)
|
||||
ioutil.WriteFile(outfile, b, 0644)
|
||||
|
@ -678,81 +389,3 @@ func (p *PodmanTest) setRegistriesConfigEnv(b []byte) {
|
|||
func resetRegistriesConfigEnv() {
|
||||
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
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman load", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman load", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -55,7 +56,7 @@ var _ = Describe("Podman load", func() {
|
|||
save.WaitWithDefaultTimeout()
|
||||
Expect(save.ExitCode()).To(Equal(0))
|
||||
|
||||
compress := podmanTest.SystemExec("gzip", []string{outfile})
|
||||
compress := SystemExec("gzip", []string{outfile})
|
||||
compress.WaitWithDefaultTimeout()
|
||||
outfile = outfile + ".gz"
|
||||
|
||||
|
@ -253,7 +254,7 @@ var _ = Describe("Podman load", func() {
|
|||
save := podmanTest.Podman([]string{"save", "-o", outfile, BB})
|
||||
save.WaitWithDefaultTimeout()
|
||||
Expect(save.ExitCode()).To(Equal(0))
|
||||
session := podmanTest.SystemExec("xz", []string{outfile})
|
||||
session := SystemExec("xz", []string{outfile})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman logs", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman logs", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman mount", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman mount", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman namespaces", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman namespaces", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pause", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
pausedState := "Paused"
|
||||
|
@ -23,7 +24,7 @@ var _ = Describe("Podman pause", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod create", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod create", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"strconv"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman pod create", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman pod create", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
podmanTest.RestoreArtifact(infra)
|
||||
})
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod inspect", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod inspect", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod kill", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod kill", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod pause", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
pausedState := "Paused"
|
||||
|
@ -22,7 +23,7 @@ var _ = Describe("Podman pod pause", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod create", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod create", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
podmanTest.RestoreArtifact(infra)
|
||||
})
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"sort"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman ps", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman ps", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod restart", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod restart", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod rm", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod rm", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod start", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod start", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod stats", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod stats", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman pod stop", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman pod stop", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman top", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman top", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman port", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman port", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"regexp"
|
||||
"sort"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
"github.com/docker/go-units"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
|
@ -15,7 +16,7 @@ var _ = Describe("Podman ps", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -23,7 +24,7 @@ var _ = Describe("Podman ps", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"os"
|
||||
|
||||
"fmt"
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
"strings"
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman pull", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman pull", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -101,7 +102,7 @@ var _ = Describe("Podman pull", func() {
|
|||
session = podmanTest.Podman([]string{"rmi", "alpine"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp.tar"})
|
||||
clean := SystemExec("rm", []string{"/tmp/alp.tar"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
Expect(clean.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
@ -119,12 +120,12 @@ var _ = Describe("Podman pull", func() {
|
|||
session = podmanTest.Podman([]string{"rmi", "alpine"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
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()
|
||||
})
|
||||
|
||||
It("podman pull from local directory", func() {
|
||||
setup := podmanTest.SystemExec("mkdir", []string{"-p", "/tmp/podmantestdir"})
|
||||
setup := SystemExec("mkdir", []string{"-p", "/tmp/podmantestdir"})
|
||||
setup.WaitWithDefaultTimeout()
|
||||
session := podmanTest.Podman([]string{"push", "alpine", "dir:/tmp/podmantestdir"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
|
@ -139,7 +140,7 @@ var _ = Describe("Podman pull", func() {
|
|||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
clean := podmanTest.SystemExec("rm", []string{"-fr", "/tmp/podmantestdir"})
|
||||
clean := SystemExec("rm", []string{"-fr", "/tmp/podmantestdir"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
})
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -14,7 +15,7 @@ var _ = Describe("Podman push", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -22,7 +23,7 @@ var _ = Describe("Podman push", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -52,7 +53,7 @@ var _ = Describe("Podman push", func() {
|
|||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
clean := podmanTest.SystemExec("rm", []string{"-fr", "/tmp/busybox"})
|
||||
clean := SystemExec("rm", []string{"-fr", "/tmp/busybox"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
Expect(clean.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
@ -66,7 +67,7 @@ var _ = Describe("Podman push", func() {
|
|||
session.WaitWithDefaultTimeout()
|
||||
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.")
|
||||
}
|
||||
|
||||
|
@ -82,20 +83,20 @@ var _ = Describe("Podman push", func() {
|
|||
authPath := filepath.Join(podmanTest.TempDir, "auth")
|
||||
os.Mkdir(authPath, 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()
|
||||
|
||||
cwd, _ := os.Getwd()
|
||||
certPath := filepath.Join(cwd, "../", "certs")
|
||||
|
||||
if IsCommandAvailable("getenforce") {
|
||||
ge := podmanTest.SystemExec("getenforce", []string{})
|
||||
ge := SystemExec("getenforce", []string{})
|
||||
ge.WaitWithDefaultTimeout()
|
||||
if ge.OutputToString() == "Enforcing" {
|
||||
se := podmanTest.SystemExec("setenforce", []string{"0"})
|
||||
se := SystemExec("setenforce", []string{"0"})
|
||||
se.WaitWithDefaultTimeout()
|
||||
|
||||
defer podmanTest.SystemExec("setenforce", []string{"1"})
|
||||
defer SystemExec("setenforce", []string{"1"})
|
||||
}
|
||||
}
|
||||
podmanTest.RestoreArtifact(registry)
|
||||
|
@ -108,7 +109,7 @@ var _ = Describe("Podman push", func() {
|
|||
|
||||
f.WriteString(session.OutputToString())
|
||||
f.Sync()
|
||||
debug = podmanTest.SystemExec("cat", []string{filepath.Join(authPath, "htpasswd")})
|
||||
debug = SystemExec("cat", []string{filepath.Join(authPath, "htpasswd")})
|
||||
debug.WaitWithDefaultTimeout()
|
||||
|
||||
session = podmanTest.Podman([]string{"run", "-d", "-p", "5000:5000", "--name", "registry", "-v",
|
||||
|
@ -119,7 +120,7 @@ var _ = Describe("Podman push", func() {
|
|||
session.WaitWithDefaultTimeout()
|
||||
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.")
|
||||
}
|
||||
|
||||
|
@ -134,7 +135,7 @@ var _ = Describe("Podman push", func() {
|
|||
push.WaitWithDefaultTimeout()
|
||||
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()
|
||||
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.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp"})
|
||||
clean := SystemExec("rm", []string{"/tmp/alp"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
Expect(clean.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
||||
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()
|
||||
|
||||
if setup.LineInOutputContains("Active: inactive") {
|
||||
setup = podmanTest.SystemExec("systemctl", []string{"start", "docker"})
|
||||
setup = SystemExec("systemctl", []string{"start", "docker"})
|
||||
setup.WaitWithDefaultTimeout()
|
||||
|
||||
defer podmanTest.SystemExec("systemctl", []string{"stop", "docker"})
|
||||
defer SystemExec("systemctl", []string{"stop", "docker"})
|
||||
} else if setup.ExitCode() != 0 {
|
||||
Skip("Docker is not available")
|
||||
}
|
||||
|
@ -177,12 +178,12 @@ var _ = Describe("Podman push", func() {
|
|||
session.WaitWithDefaultTimeout()
|
||||
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()
|
||||
Expect(check.ExitCode()).To(Equal(0))
|
||||
Expect(check.OutputToString()).To(ContainSubstring("alpine:podmantest"))
|
||||
|
||||
clean := podmanTest.SystemExec("docker", []string{"rmi", "alpine:podmantest"})
|
||||
clean := SystemExec("docker", []string{"rmi", "alpine:podmantest"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
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.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp.tar"})
|
||||
clean := SystemExec("rm", []string{"/tmp/alp.tar"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
Expect(clean.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
@ -204,14 +205,14 @@ var _ = Describe("Podman push", func() {
|
|||
ostreePath := filepath.Join(podmanTest.TempDir, "ostree/repo")
|
||||
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()
|
||||
|
||||
session := podmanTest.Podman([]string{"push", ALPINE, strings.Join([]string{"ostree:alp@", ostreePath}, "")})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
clean := podmanTest.SystemExec("rm", []string{"-rf", ostreePath})
|
||||
clean := SystemExec("rm", []string{"-rf", ostreePath})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
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.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp"})
|
||||
clean := SystemExec("rm", []string{"/tmp/alp"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
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.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
clean := podmanTest.SystemExec("rm", []string{"/tmp/alp-oci"})
|
||||
clean := SystemExec("rm", []string{"/tmp/alp-oci"})
|
||||
clean.WaitWithDefaultTimeout()
|
||||
Expect(clean.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"time"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman refresh", func() {
|
|||
var (
|
||||
tmpdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman refresh", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tmpdir)
|
||||
podmanTest = PodmanTestCreate(tmpdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -43,13 +44,13 @@ var _ = Describe("Podman refresh", func() {
|
|||
createSession.WaitWithDefaultTimeout()
|
||||
Expect(createSession.ExitCode()).To(Equal(0))
|
||||
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.WaitWithDefaultTimeout()
|
||||
Expect(refreshSession.ExitCode()).To(Equal(0))
|
||||
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() {
|
||||
|
@ -57,7 +58,7 @@ var _ = Describe("Podman refresh", func() {
|
|||
createSession.WaitWithDefaultTimeout()
|
||||
Expect(createSession.ExitCode()).To(Equal(0))
|
||||
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
|
||||
time.Sleep(1 * time.Second)
|
||||
|
@ -66,6 +67,6 @@ var _ = Describe("Podman refresh", func() {
|
|||
refreshSession.WaitWithDefaultTimeout()
|
||||
Expect(refreshSession.ExitCode()).To(Equal(0))
|
||||
Expect(podmanTest.NumberOfContainers()).To(Equal(1))
|
||||
Expect(podmanTest.NumberOfRunningContainers()).To(Equal(1))
|
||||
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
|
||||
})
|
||||
})
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"time"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman restart", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman restart", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -74,7 +75,7 @@ var _ = Describe("Podman restart", func() {
|
|||
|
||||
It("Podman restart running container", func() {
|
||||
_ = podmanTest.RunTopContainer("test1")
|
||||
ok := WaitForContainer(&podmanTest)
|
||||
ok := WaitForContainer(podmanTest)
|
||||
Expect(ok).To(BeTrue())
|
||||
startTime := podmanTest.Podman([]string{"inspect", "--format='{{.State.StartedAt}}'", "test1"})
|
||||
startTime.WaitWithDefaultTimeout()
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman rm", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman rm", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman rmi", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman rmi", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"runtime"
|
||||
"syscall"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -30,7 +31,7 @@ var _ = Describe("Podman rootless", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -38,7 +39,7 @@ var _ = Describe("Podman rootless", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.CgroupManager = "cgroupfs"
|
||||
podmanTest.StorageOptions = ROOTLESS_STORAGE_OPTIONS
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
|
@ -68,7 +69,7 @@ var _ = Describe("Podman rootless", func() {
|
|||
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) {
|
||||
// Check if we can create an user namespace
|
||||
|
@ -91,7 +92,7 @@ var _ = Describe("Podman rootless", func() {
|
|||
|
||||
tempdir, err := CreateTempDirInTempDir()
|
||||
Expect(err).To(BeNil())
|
||||
rootlessTest := PodmanCreate(tempdir)
|
||||
rootlessTest := PodmanTestCreate(tempdir)
|
||||
rootlessTest.CgroupManager = "cgroupfs"
|
||||
rootlessTest.StorageOptions = ROOTLESS_STORAGE_OPTIONS
|
||||
err = filepath.Walk(tempdir, chownFunc)
|
||||
|
@ -116,7 +117,7 @@ var _ = Describe("Podman rootless", 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 = append(env, fmt.Sprintf("XDG_RUNTIME_DIR=%s", xdgRuntimeDir))
|
||||
env = append(env, fmt.Sprintf("HOME=%s", home))
|
||||
|
@ -157,7 +158,7 @@ var _ = Describe("Podman rootless", func() {
|
|||
})
|
||||
|
||||
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()
|
||||
defer runtime.UnlockOSThread()
|
||||
env := os.Environ()
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreArtifact(fedoraMinimal)
|
||||
})
|
||||
|
||||
|
@ -32,7 +33,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
|
|||
})
|
||||
|
||||
Specify("valid --cgroup-parent using cgroupfs", func() {
|
||||
if !containerized() {
|
||||
if !Containerized() {
|
||||
Skip("Must be containerized to run this test.")
|
||||
}
|
||||
cgroup := "/zzz"
|
||||
|
@ -45,7 +46,7 @@ var _ = Describe("Podman run with --cgroup-parent", func() {
|
|||
|
||||
Specify("no --cgroup-parent", func() {
|
||||
cgroup := "/libpod_parent"
|
||||
if !containerized() && podmanTest.CgroupManager != "cgroupfs" {
|
||||
if !Containerized() && podmanTest.CgroupManager != "cgroupfs" {
|
||||
cgroup = "/machine.slice"
|
||||
}
|
||||
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() {
|
||||
if containerized() || podmanTest.CgroupManager == "cgroupfs" {
|
||||
if Containerized() || podmanTest.CgroupManager == "cgroupfs" {
|
||||
Skip("Requires Systemd cgroup manager support")
|
||||
}
|
||||
cgroup := "aaaa.slice"
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run exit", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run exit", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -32,14 +33,14 @@ var _ = Describe("Podman run exit", func() {
|
|||
})
|
||||
|
||||
It("podman run -d mount cleanup test", func() {
|
||||
mount := podmanTest.SystemExec("mount", nil)
|
||||
mount := SystemExec("mount", nil)
|
||||
mount.WaitWithDefaultTimeout()
|
||||
out1 := mount.OutputToString()
|
||||
result := podmanTest.Podman([]string{"create", "-dt", ALPINE, "echo", "hello"})
|
||||
result.WaitWithDefaultTimeout()
|
||||
Expect(result.ExitCode()).To(Equal(0))
|
||||
|
||||
mount = podmanTest.SystemExec("mount", nil)
|
||||
mount = SystemExec("mount", nil)
|
||||
mount.WaitWithDefaultTimeout()
|
||||
out2 := mount.OutputToString()
|
||||
Expect(out1).To(Equal(out2))
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run cpu", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run cpu", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run device", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run device", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run dns", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run dns", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run entrypoint", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run entrypoint", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreArtifact(ALPINE)
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run exit", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run exit", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run memory", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run memory", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman rmi", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
hostname, _ = os.Hostname()
|
||||
)
|
||||
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman rmi", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
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.Wait(30)
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
results := podmanTest.SystemExec("iptables", []string{"-t", "nat", "-L"})
|
||||
results := SystemExec("iptables", []string{"-t", "nat", "-L"})
|
||||
results.Wait(30)
|
||||
Expect(results.ExitCode()).To(Equal(0))
|
||||
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.Wait(30)
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
results := podmanTest.SystemExec("iptables", []string{"-t", "nat", "-L"})
|
||||
results := SystemExec("iptables", []string{"-t", "nat", "-L"})
|
||||
results.Wait(30)
|
||||
Expect(results.ExitCode()).To(Equal(0))
|
||||
Expect(results.OutputToString()).To(ContainSubstring("8000"))
|
||||
|
||||
ncBusy := podmanTest.SystemExec("nc", []string{"-l", "-p", "80"})
|
||||
ncBusy := SystemExec("nc", []string{"-l", "-p", "80"})
|
||||
ncBusy.Wait(10)
|
||||
Expect(ncBusy.ExitCode()).ToNot(Equal(0))
|
||||
})
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman run ns", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman run ns", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreArtifact(fedoraMinimal)
|
||||
})
|
||||
|
||||
|
@ -49,7 +50,7 @@ var _ = Describe("Podman run ns", 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()
|
||||
Expect(setup.ExitCode()).To(Equal(0))
|
||||
hostShm := setup.OutputToString()
|
||||
|
@ -61,7 +62,7 @@ var _ = Describe("Podman run ns", func() {
|
|||
})
|
||||
|
||||
It("podman run ipcns ipcmk host test", func() {
|
||||
setup := podmanTest.SystemExec("ipcmk", []string{"-M", "1024"})
|
||||
setup := SystemExec("ipcmk", []string{"-M", "1024"})
|
||||
setup.WaitWithDefaultTimeout()
|
||||
Expect(setup.ExitCode()).To(Equal(0))
|
||||
output := strings.Split(setup.OutputToString(), " ")
|
||||
|
@ -70,7 +71,7 @@ var _ = Describe("Podman run ns", func() {
|
|||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
setup = podmanTest.SystemExec("ipcrm", []string{"-m", ipc})
|
||||
setup = SystemExec("ipcrm", []string{"-m", ipc})
|
||||
setup.WaitWithDefaultTimeout()
|
||||
Expect(setup.ExitCode()).To(Equal(0))
|
||||
})
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"os"
|
||||
|
||||
"fmt"
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run passwd", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run passwd", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman privileged container tests", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman privileged container tests", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -42,7 +43,7 @@ var _ = Describe("Podman privileged container tests", 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()
|
||||
Expect(cap.ExitCode()).To(Equal(0))
|
||||
|
||||
|
@ -53,7 +54,7 @@ var _ = Describe("Podman privileged container tests", 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()
|
||||
Expect(cap.ExitCode()).To(Equal(0))
|
||||
|
||||
|
@ -87,13 +88,13 @@ var _ = Describe("Podman privileged container tests", func() {
|
|||
|
||||
It("run no-new-privileges test", func() {
|
||||
// Check if our kernel is new enough
|
||||
k, err := IsKernelNewThan("4.14")
|
||||
k, err := IsKernelNewerThan("4.14")
|
||||
Expect(err).To(BeNil())
|
||||
if !k {
|
||||
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()
|
||||
if cap.ExitCode() != 0 {
|
||||
Skip("Can't determine NoNewPrivs")
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run restart containers", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run restart containers", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -43,7 +44,7 @@ var _ = Describe("Podman run restart containers", func() {
|
|||
|
||||
It("Podman start after signal kill", func() {
|
||||
_ = podmanTest.RunTopContainer("test1")
|
||||
ok := WaitForContainer(&podmanTest)
|
||||
ok := WaitForContainer(podmanTest)
|
||||
Expect(ok).To(BeTrue())
|
||||
|
||||
killSession := podmanTest.Podman([]string{"kill", "-s", "9", "test1"})
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
"github.com/opencontainers/selinux/go-selinux"
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman run", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman run", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
if !selinux.GetEnabled() {
|
||||
Skip("SELinux not enabled")
|
||||
|
|
|
@ -4,39 +4,24 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
"github.com/onsi/gomega/gexec"
|
||||
"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"
|
||||
|
||||
var _ = Describe("Podman run with --sig-proxy", func() {
|
||||
var (
|
||||
tmpdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -44,7 +29,7 @@ var _ = Describe("Podman run with --sig-proxy", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tmpdir)
|
||||
podmanTest = PodmanTestCreate(tmpdir)
|
||||
podmanTest.RestoreArtifact(fedoraMinimal)
|
||||
})
|
||||
|
||||
|
@ -122,7 +107,7 @@ var _ = Describe("Podman run with --sig-proxy", func() {
|
|||
signal := syscall.SIGPOLL
|
||||
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())
|
||||
|
||||
// Kill with given signal
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman run with --ip flag", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman run with --ip flag", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
"github.com/mrunalp/fileutils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
|
@ -16,7 +17,7 @@ var _ = Describe("Podman run", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -24,7 +25,7 @@ var _ = Describe("Podman run", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -355,7 +356,7 @@ var _ = Describe("Podman run", func() {
|
|||
keyFile := filepath.Join(targetDir, "key.pem")
|
||||
err = ioutil.WriteFile(keyFile, []byte(mountString), 0755)
|
||||
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()
|
||||
Expect(execSession.ExitCode()).To(Equal(0))
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"os"
|
||||
|
||||
"fmt"
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman UserNS support", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman UserNS support", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("podman container runlabel", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -28,7 +29,7 @@ var _ = Describe("podman container runlabel", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman save", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -21,7 +22,7 @@ var _ = Describe("Podman save", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"strconv"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -13,7 +14,7 @@ var _ = Describe("Podman search", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
const regFileContents = `
|
||||
[registries.search]
|
||||
|
@ -40,7 +41,7 @@ var _ = Describe("Podman search", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
@ -136,7 +137,7 @@ var _ = Describe("Podman search", func() {
|
|||
fakereg.WaitWithDefaultTimeout()
|
||||
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.")
|
||||
}
|
||||
|
||||
|
@ -159,7 +160,7 @@ var _ = Describe("Podman search", func() {
|
|||
registry.WaitWithDefaultTimeout()
|
||||
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.")
|
||||
}
|
||||
|
||||
|
@ -182,7 +183,7 @@ var _ = Describe("Podman search", func() {
|
|||
registry.WaitWithDefaultTimeout()
|
||||
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.")
|
||||
}
|
||||
|
||||
|
@ -214,7 +215,7 @@ var _ = Describe("Podman search", func() {
|
|||
registry.WaitWithDefaultTimeout()
|
||||
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.")
|
||||
}
|
||||
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()
|
||||
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.")
|
||||
}
|
||||
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()
|
||||
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.")
|
||||
}
|
||||
|
||||
|
@ -284,7 +285,7 @@ var _ = Describe("Podman search", func() {
|
|||
registryLocal.WaitWithDefaultTimeout()
|
||||
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.")
|
||||
}
|
||||
push := podmanTest.Podman([]string{"push", "--tls-verify=false", "--remove-signatures", ALPINE, "localhost:6000/my-alpine"})
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman start", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman start", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman stats", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman stats", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman stop", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman stop", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman tag", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman tag", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman top", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman top", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman version", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman version", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
. "github.com/containers/libpod/test/utils"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
@ -12,7 +13,7 @@ var _ = Describe("Podman wait", func() {
|
|||
var (
|
||||
tempdir string
|
||||
err error
|
||||
podmanTest PodmanTest
|
||||
podmanTest *PodmanTestIntegration
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
|
@ -20,7 +21,7 @@ var _ = Describe("Podman wait", func() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
podmanTest = PodmanCreate(tempdir)
|
||||
podmanTest = PodmanTestCreate(tempdir)
|
||||
podmanTest.RestoreAllArtifacts()
|
||||
})
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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),
|
||||
)
|
||||
|
||||
})
|
|
@ -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))
|
||||
})
|
||||
|
||||
})
|
|
@ -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())
|
||||
})
|
||||
|
||||
})
|
|
@ -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
|
||||
}
|
|
@ -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")
|
||||
}
|
Loading…
Reference in New Issue