summaryrefslogtreecommitdiff
path: root/test/e2e
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2019-01-14 13:23:13 -0600
committerbaude <bbaude@redhat.com>2019-01-14 14:51:32 -0600
commitb30a56c15613428c80033b97e81db7d3d8ed84e6 (patch)
treea9aac949e6b94cd46557fa82f29ca30aa7bdedff /test/e2e
parent30f115a96034275fc7136b1ec576d57ec2cf099e (diff)
downloadpodman-b30a56c15613428c80033b97e81db7d3d8ed84e6.tar.gz
podman-b30a56c15613428c80033b97e81db7d3d8ed84e6.tar.bz2
podman-b30a56c15613428c80033b97e81db7d3d8ed84e6.zip
Run integrations test with remote-client
Add the ability to run the integration (ginkgo) suite using the remote client. Only the images_test.go file is run right now; all the rest are isolated with a // +build !remotelinux. As more content is developed for the remote client, we can unblock the files and just block single tests as needed. Signed-off-by: baude <bbaude@redhat.com>
Diffstat (limited to 'test/e2e')
-rw-r--r--test/e2e/attach_test.go2
-rw-r--r--test/e2e/checkpoint_test.go2
-rw-r--r--test/e2e/commit_test.go2
-rw-r--r--test/e2e/common_test.go229
-rw-r--r--test/e2e/create_staticip_test.go2
-rw-r--r--test/e2e/create_test.go2
-rw-r--r--test/e2e/diff_test.go2
-rw-r--r--test/e2e/exec_test.go2
-rw-r--r--test/e2e/exists_test.go3
-rw-r--r--test/e2e/export_test.go2
-rw-r--r--test/e2e/generate_kube_test.go2
-rw-r--r--test/e2e/history_test.go2
-rw-r--r--test/e2e/images_test.go15
-rw-r--r--test/e2e/import_test.go2
-rw-r--r--test/e2e/info_test.go2
-rw-r--r--test/e2e/inspect_test.go2
-rw-r--r--test/e2e/kill_test.go2
-rw-r--r--test/e2e/libpod_suite_remoteclient_test.go153
-rw-r--r--test/e2e/libpod_suite_test.go211
-rw-r--r--test/e2e/load_test.go2
-rw-r--r--test/e2e/logs_test.go2
-rw-r--r--test/e2e/mount_test.go2
-rw-r--r--test/e2e/namespace_test.go2
-rw-r--r--test/e2e/pause_test.go2
-rw-r--r--test/e2e/pod_create_test.go2
-rw-r--r--test/e2e/pod_infra_container_test.go2
-rw-r--r--test/e2e/pod_inspect_test.go2
-rw-r--r--test/e2e/pod_kill_test.go2
-rw-r--r--test/e2e/pod_pause_test.go2
-rw-r--r--test/e2e/pod_pod_namespaces.go2
-rw-r--r--test/e2e/pod_ps_test.go2
-rw-r--r--test/e2e/pod_restart_test.go2
-rw-r--r--test/e2e/pod_rm_test.go2
-rw-r--r--test/e2e/pod_start_test.go2
-rw-r--r--test/e2e/pod_stats_test.go2
-rw-r--r--test/e2e/pod_stop_test.go2
-rw-r--r--test/e2e/pod_top_test.go2
-rw-r--r--test/e2e/port_test.go2
-rw-r--r--test/e2e/prune_test.go2
-rw-r--r--test/e2e/ps_test.go2
-rw-r--r--test/e2e/pull_test.go2
-rw-r--r--test/e2e/push_test.go2
-rw-r--r--test/e2e/refresh_test.go2
-rw-r--r--test/e2e/restart_test.go2
-rw-r--r--test/e2e/rm_test.go2
-rw-r--r--test/e2e/rmi_test.go2
-rw-r--r--test/e2e/rootless_test.go2
-rw-r--r--test/e2e/run_cgroup_parent_test.go2
-rw-r--r--test/e2e/run_cleanup_test.go2
-rw-r--r--test/e2e/run_cpu_test.go2
-rw-r--r--test/e2e/run_device_test.go2
-rw-r--r--test/e2e/run_dns_test.go2
-rw-r--r--test/e2e/run_entrypoint_test.go2
-rw-r--r--test/e2e/run_exit_test.go2
-rw-r--r--test/e2e/run_memory_test.go2
-rw-r--r--test/e2e/run_networking_test.go2
-rw-r--r--test/e2e/run_ns_test.go2
-rw-r--r--test/e2e/run_passwd_test.go2
-rw-r--r--test/e2e/run_privileged_test.go2
-rw-r--r--test/e2e/run_restart_test.go2
-rw-r--r--test/e2e/run_selinux_test.go2
-rw-r--r--test/e2e/run_signal_test.go2
-rw-r--r--test/e2e/run_staticip_test.go2
-rw-r--r--test/e2e/run_test.go2
-rw-r--r--test/e2e/run_userns_test.go2
-rw-r--r--test/e2e/runlabel_test.go2
-rw-r--r--test/e2e/save_test.go2
-rw-r--r--test/e2e/search_test.go2
-rw-r--r--test/e2e/start_test.go2
-rw-r--r--test/e2e/stats_test.go2
-rw-r--r--test/e2e/stop_test.go2
-rw-r--r--test/e2e/systemd_test.go2
-rw-r--r--test/e2e/tag_test.go2
-rw-r--r--test/e2e/top_test.go2
-rw-r--r--test/e2e/trust_test.go2
-rw-r--r--test/e2e/version_test.go2
-rw-r--r--test/e2e/volume_create_test.go2
-rw-r--r--test/e2e/volume_inspect_test.go2
-rw-r--r--test/e2e/volume_ls_test.go2
-rw-r--r--test/e2e/volume_prune_test.go2
-rw-r--r--test/e2e/volume_rm_test.go2
-rw-r--r--test/e2e/wait_test.go2
82 files changed, 563 insertions, 202 deletions
diff --git a/test/e2e/attach_test.go b/test/e2e/attach_test.go
index 6bc576461..42866d5a1 100644
--- a/test/e2e/attach_test.go
+++ b/test/e2e/attach_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/checkpoint_test.go b/test/e2e/checkpoint_test.go
index ca2f35fc9..fda6eb085 100644
--- a/test/e2e/checkpoint_test.go
+++ b/test/e2e/checkpoint_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/commit_test.go b/test/e2e/commit_test.go
index 18771c09e..34b218621 100644
--- a/test/e2e/commit_test.go
+++ b/test/e2e/commit_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go
new file mode 100644
index 000000000..e00a59b7f
--- /dev/null
+++ b/test/e2e/common_test.go
@@ -0,0 +1,229 @@
+package integration
+
+import (
+ "fmt"
+ . "github.com/containers/libpod/test/utils"
+ "os"
+ "os/exec"
+
+ "github.com/containers/storage/pkg/reexec"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+ "path/filepath"
+ "strings"
+ "testing"
+)
+
+var (
+ PODMAN_BINARY string
+ CONMON_BINARY string
+ CNI_CONFIG_DIR string
+ RUNC_BINARY string
+ INTEGRATION_ROOT string
+ CGROUP_MANAGER = "systemd"
+ ARTIFACT_DIR = "/tmp/.artifacts"
+ RESTORE_IMAGES = []string{ALPINE, BB}
+ defaultWaitTimeout = 90
+)
+
+// PodmanTestIntegration struct for command line options
+type PodmanTestIntegration struct {
+ PodmanTest
+ ConmonBinary string
+ CrioRoot string
+ CNIConfigDir string
+ RunCBinary string
+ RunRoot string
+ StorageOptions string
+ SignaturePolicyPath string
+ CgroupManager string
+ Host HostOS
+}
+
+// PodmanSessionIntegration sturct for command line session
+type PodmanSessionIntegration struct {
+ *PodmanSession
+}
+
+// TestLibpod ginkgo master function
+func TestLibpod(t *testing.T) {
+ if reexec.Init() {
+ os.Exit(1)
+ }
+ if os.Getenv("NOCACHE") == "1" {
+ CACHE_IMAGES = []string{}
+ RESTORE_IMAGES = []string{}
+ }
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "Libpod Suite")
+}
+
+var _ = BeforeSuite(func() {
+ //Cache images
+ cwd, _ := os.Getwd()
+ INTEGRATION_ROOT = filepath.Join(cwd, "../../")
+ 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 {
+ fmt.Printf("%q\n", err)
+ os.Exit(1)
+ }
+ }
+ for _, image := range CACHE_IMAGES {
+ if err := podman.CreateArtifact(image); err != nil {
+ fmt.Printf("%q\n", err)
+ os.Exit(1)
+ }
+ }
+ host := GetHostDistributionInfo()
+ if host.Distribution == "rhel" && strings.HasPrefix(host.Version, "7") {
+ f, err := os.OpenFile("/proc/sys/user/max_user_namespaces", os.O_WRONLY, 0644)
+ if err != nil {
+ fmt.Println("Unable to enable userspace on RHEL 7")
+ os.Exit(1)
+ }
+ _, err = f.WriteString("15000")
+ if err != nil {
+ fmt.Println("Unable to enable userspace on RHEL 7")
+ os.Exit(1)
+ }
+ f.Close()
+ }
+})
+
+// PodmanTestCreate creates a PodmanTestIntegration instance for the tests
+func PodmanTestCreateUtil(tempDir string, remote bool) *PodmanTestIntegration {
+ var (
+ podmanRemoteBinary string
+ )
+
+ host := GetHostDistributionInfo()
+ cwd, _ := os.Getwd()
+
+ podmanBinary := filepath.Join(cwd, "../../bin/podman")
+ if os.Getenv("PODMAN_BINARY") != "" {
+ podmanBinary = os.Getenv("PODMAN_BINARY")
+ }
+
+ if remote {
+ podmanRemoteBinary = filepath.Join(cwd, "../../bin/podman-remote")
+ if os.Getenv("PODMAN_REMOTE_BINARY") != "" {
+ podmanRemoteBinary = os.Getenv("PODMAN_REMOTE_BINARY")
+ }
+ }
+ conmonBinary := filepath.Join("/usr/libexec/podman/conmon")
+ altConmonBinary := "/usr/libexec/crio/conmon"
+ if _, err := os.Stat(conmonBinary); os.IsNotExist(err) {
+ conmonBinary = altConmonBinary
+ }
+ if os.Getenv("CONMON_BINARY") != "" {
+ conmonBinary = os.Getenv("CONMON_BINARY")
+ }
+ storageOptions := STORAGE_OPTIONS
+ if os.Getenv("STORAGE_OPTIONS") != "" {
+ storageOptions = os.Getenv("STORAGE_OPTIONS")
+ }
+ cgroupManager := CGROUP_MANAGER
+ if os.Getenv("CGROUP_MANAGER") != "" {
+ cgroupManager = os.Getenv("CGROUP_MANAGER")
+ }
+
+ // Ubuntu doesn't use systemd cgroups
+ if host.Distribution == "ubuntu" {
+ cgroupManager = "cgroupfs"
+ }
+
+ runCBinary, err := exec.LookPath("runc")
+ // If we cannot find the runc binary, setting to something static as we have no way
+ // to return an error. The tests will fail and point out that the runc binary could
+ // not be found nicely.
+ if err != nil {
+ runCBinary = "/usr/bin/runc"
+ }
+
+ CNIConfigDir := "/etc/cni/net.d"
+
+ p := &PodmanTestIntegration{
+ PodmanTest: PodmanTest{
+ PodmanBinary: podmanBinary,
+ ArtifactPath: ARTIFACT_DIR,
+ TempDir: tempDir,
+ RemoteTest: remote,
+ },
+ ConmonBinary: conmonBinary,
+ CrioRoot: filepath.Join(tempDir, "crio"),
+ CNIConfigDir: CNIConfigDir,
+ RunCBinary: runCBinary,
+ RunRoot: filepath.Join(tempDir, "crio-run"),
+ StorageOptions: storageOptions,
+ SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
+ CgroupManager: cgroupManager,
+ Host: host,
+ }
+ if remote {
+ p.PodmanTest.RemotePodmanBinary = podmanRemoteBinary
+ }
+
+ // 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 *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), " ")
+ if os.Getenv("HOOK_OPTION") != "" {
+ podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
+ }
+ podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
+ podmanOptions = append(podmanOptions, args...)
+ return podmanOptions
+}
+
+// RestoreArtifact puts the cached image into our test store
+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))
+ restore := p.Podman([]string{"load", "-q", "-i", destName})
+ restore.Wait(90)
+ return nil
+}
+
+// RestoreAllArtifacts unpacks all cached images
+func (p *PodmanTestIntegration) RestoreAllArtifacts() error {
+ if os.Getenv("NO_TEST_CACHE") != "" {
+ return nil
+ }
+ for _, image := range RESTORE_IMAGES {
+ if err := p.RestoreArtifact(image); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// CreateArtifact creates a cached image in the artifact dir
+func (p *PodmanTestIntegration) CreateArtifact(image string) error {
+ if os.Getenv("NO_TEST_CACHE") != "" {
+ return nil
+ }
+ fmt.Printf("Caching %s...", image)
+ dest := strings.Split(image, "/")
+ destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
+ if _, err := os.Stat(destName); os.IsNotExist(err) {
+ pull := p.Podman([]string{"pull", image})
+ pull.Wait(90)
+
+ save := p.Podman([]string{"save", "-o", destName, image})
+ save.Wait(90)
+ fmt.Printf("\n")
+ } else {
+ fmt.Printf(" already exists.\n")
+ }
+ return nil
+}
diff --git a/test/e2e/create_staticip_test.go b/test/e2e/create_staticip_test.go
index 17ac5cb40..9bdc30342 100644
--- a/test/e2e/create_staticip_test.go
+++ b/test/e2e/create_staticip_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/create_test.go b/test/e2e/create_test.go
index 684a7cd88..b28a0c428 100644
--- a/test/e2e/create_test.go
+++ b/test/e2e/create_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/diff_test.go b/test/e2e/diff_test.go
index 2c0060dd5..94e150467 100644
--- a/test/e2e/diff_test.go
+++ b/test/e2e/diff_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/exec_test.go b/test/e2e/exec_test.go
index a181501a5..5839b364d 100644
--- a/test/e2e/exec_test.go
+++ b/test/e2e/exec_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/exists_test.go b/test/e2e/exists_test.go
index d9652de4b..b5c91cc8d 100644
--- a/test/e2e/exists_test.go
+++ b/test/e2e/exists_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -32,6 +34,7 @@ var _ = Describe("Podman image|container exists", func() {
GinkgoWriter.Write([]byte(timedResult))
})
+
It("podman image exists in local storage by fq name", func() {
session := podmanTest.Podman([]string{"image", "exists", ALPINE})
session.WaitWithDefaultTimeout()
diff --git a/test/e2e/export_test.go b/test/e2e/export_test.go
index 42ea45041..de3f23667 100644
--- a/test/e2e/export_test.go
+++ b/test/e2e/export_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/generate_kube_test.go b/test/e2e/generate_kube_test.go
index 0ee078455..94e02dc55 100644
--- a/test/e2e/generate_kube_test.go
+++ b/test/e2e/generate_kube_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/history_test.go b/test/e2e/history_test.go
index 9bec9ad13..921dcaea0 100644
--- a/test/e2e/history_test.go
+++ b/test/e2e/history_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/images_test.go b/test/e2e/images_test.go
index af32c032b..595084403 100644
--- a/test/e2e/images_test.go
+++ b/test/e2e/images_test.go
@@ -106,6 +106,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images filter before image", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
dockerfile := `FROM docker.io/library/alpine:latest
`
podmanTest.BuildImage(dockerfile, "foobar.com/before:latest", "false")
@@ -116,6 +119,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images filter after image", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
rmi := podmanTest.Podman([]string{"rmi", "busybox"})
rmi.WaitWithDefaultTimeout()
Expect(rmi.ExitCode()).To(Equal(0))
@@ -130,6 +136,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images filter dangling", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
dockerfile := `FROM docker.io/library/alpine:latest
`
podmanTest.BuildImage(dockerfile, "foobar.com/before:latest", "false")
@@ -141,6 +150,9 @@ var _ = Describe("Podman images", func() {
})
It("podman check for image with sha256: prefix", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
session := podmanTest.Podman([]string{"inspect", "--format=json", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
@@ -175,6 +187,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images --all flag", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
dockerfile := `FROM docker.io/library/alpine:latest
RUN mkdir hello
RUN touch test.txt
diff --git a/test/e2e/import_test.go b/test/e2e/import_test.go
index 6f132fd93..dc7451f7b 100644
--- a/test/e2e/import_test.go
+++ b/test/e2e/import_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/info_test.go b/test/e2e/info_test.go
index e972c86c8..2022dff1b 100644
--- a/test/e2e/info_test.go
+++ b/test/e2e/info_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/inspect_test.go b/test/e2e/inspect_test.go
index 87c4db935..38c50da14 100644
--- a/test/e2e/inspect_test.go
+++ b/test/e2e/inspect_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/kill_test.go b/test/e2e/kill_test.go
index 913a843cb..5f1f5f4c1 100644
--- a/test/e2e/kill_test.go
+++ b/test/e2e/kill_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/libpod_suite_remoteclient_test.go b/test/e2e/libpod_suite_remoteclient_test.go
new file mode 100644
index 000000000..211fc1ebc
--- /dev/null
+++ b/test/e2e/libpod_suite_remoteclient_test.go
@@ -0,0 +1,153 @@
+// +build remoteclient
+
+package integration
+
+import (
+ "fmt"
+ "github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/pkg/inspect"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+)
+
+// Cleanup cleans up the temporary store
+func (p *PodmanTestIntegration) Cleanup() {
+ p.StopVarlink()
+ // TODO
+ // Stop all containers
+ // Rm all containers
+ // Rm all images
+
+ if err := os.RemoveAll(p.TempDir); err != nil {
+ fmt.Printf("%q\n", err)
+ }
+
+ // Clean up the registries configuration file ENV variable set in Create
+ resetRegistriesConfigEnv()
+}
+
+// Podman is the exec call to podman on the filesystem
+func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
+ podmanSession := p.PodmanBase(args)
+ return &PodmanSessionIntegration{podmanSession}
+}
+
+//RunTopContainer runs a simple container in the background that
+// runs top. If the name passed != "", it will have a name
+func (p *PodmanTestIntegration) RunTopContainer(name string) *PodmanSessionIntegration {
+ // TODO
+ return nil
+}
+
+//RunLsContainer runs a simple container in the background that
+// simply runs ls. If the name passed != "", it will have a name
+func (p *PodmanTestIntegration) RunLsContainer(name string) (*PodmanSessionIntegration, int, string) {
+ // TODO
+ return nil, 0, ""
+}
+
+// InspectImageJSON takes the session output of an inspect
+// image and returns json
+func (s *PodmanSessionIntegration) InspectImageJSON() []inspect.ImageData {
+ // TODO
+ return nil
+}
+
+func (p *PodmanTestIntegration) setDefaultRegistriesConfigEnv() {
+ defaultFile := filepath.Join(INTEGRATION_ROOT, "test/registries.conf")
+ os.Setenv("REGISTRIES_CONFIG_PATH", defaultFile)
+}
+
+func (p *PodmanTestIntegration) setRegistriesConfigEnv(b []byte) {
+ outfile := filepath.Join(p.TempDir, "registries.conf")
+ os.Setenv("REGISTRIES_CONFIG_PATH", outfile)
+ ioutil.WriteFile(outfile, b, 0644)
+}
+
+func resetRegistriesConfigEnv() {
+ os.Setenv("REGISTRIES_CONFIG_PATH", "")
+}
+
+// InspectContainerToJSON takes the session output of an inspect
+// container and returns json
+func (s *PodmanSessionIntegration) InspectContainerToJSON() []inspect.ContainerData {
+ // TODO
+ return nil
+}
+
+// CreatePod creates a pod with no infra container
+// it optionally takes a pod name
+func (p *PodmanTestIntegration) CreatePod(name string) (*PodmanSessionIntegration, int, string) {
+ // TODO
+ return nil, 0, ""
+}
+
+func (p *PodmanTestIntegration) RunTopContainerInPod(name, pod string) *PodmanSessionIntegration {
+ // TODO
+ return nil
+}
+
+// BuildImage uses podman build and buildah to build an image
+// called imageName based on a string dockerfile
+func (p *PodmanTestIntegration) BuildImage(dockerfile, imageName string, layers string) {
+ // TODO
+}
+
+// CleanupPod cleans up the temporary store
+func (p *PodmanTestIntegration) CleanupPod() {
+ // TODO
+}
+
+// InspectPodToJSON takes the sessions output from a pod inspect and returns json
+func (s *PodmanSessionIntegration) InspectPodToJSON() libpod.PodInspect {
+ // TODO
+ return libpod.PodInspect{}
+}
+func (p *PodmanTestIntegration) RunLsContainerInPod(name, pod string) (*PodmanSessionIntegration, int, string) {
+ // TODO
+ return nil, 0, ""
+}
+
+// PullImages pulls multiple images
+func (p *PodmanTestIntegration) PullImages(images []string) error {
+ // TODO
+ return libpod.ErrNotImplemented
+}
+
+// PodmanPID execs podman and returns its PID
+func (p *PodmanTestIntegration) PodmanPID(args []string) (*PodmanSessionIntegration, int) {
+ // TODO
+ return nil, 0
+}
+
+// CleanupVolume cleans up the temporary store
+func (p *PodmanTestIntegration) CleanupVolume() {
+ // TODO
+}
+
+func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
+ pti := PodmanTestCreateUtil(tempDir, true)
+ pti.StartVarlink()
+ return pti
+}
+
+func (p *PodmanTestIntegration) StartVarlink() {
+ if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
+ os.MkdirAll("/run/podman", 0755)
+ }
+ args := []string{"varlink", "--timeout", "0", "unix:/run/podman/io.podman"}
+ podmanOptions := p.MakeOptions(args)
+ command := exec.Command(p.PodmanBinary, podmanOptions...)
+ fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
+ command.Start()
+ p.VarlinkSession = command.Process
+}
+
+func (p *PodmanTestIntegration) StopVarlink() {
+ varlinkSession := p.VarlinkSession
+ varlinkSession.Kill()
+ varlinkSession.Wait()
+}
diff --git a/test/e2e/libpod_suite_test.go b/test/e2e/libpod_suite_test.go
index d312124ab..429700bed 100644
--- a/test/e2e/libpod_suite_test.go
+++ b/test/e2e/libpod_suite_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -8,173 +10,15 @@ import (
"os/exec"
"path/filepath"
"strings"
- "testing"
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/pkg/inspect"
. "github.com/containers/libpod/test/utils"
- "github.com/containers/storage/pkg/reexec"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
)
-var (
- PODMAN_BINARY string
- CONMON_BINARY string
- CNI_CONFIG_DIR string
- RUNC_BINARY string
- INTEGRATION_ROOT string
- CGROUP_MANAGER = "systemd"
- ARTIFACT_DIR = "/tmp/.artifacts"
- RESTORE_IMAGES = []string{ALPINE, BB}
- defaultWaitTimeout = 90
-)
-
-// PodmanTestIntegration struct for command line options
-type PodmanTestIntegration struct {
- PodmanTest
- ConmonBinary string
- CrioRoot string
- CNIConfigDir string
- RunCBinary string
- RunRoot string
- StorageOptions string
- SignaturePolicyPath string
- CgroupManager string
- Host HostOS
-}
-
-// PodmanSessionIntegration sturct for command line session
-type PodmanSessionIntegration struct {
- *PodmanSession
-}
-
-// TestLibpod ginkgo master function
-func TestLibpod(t *testing.T) {
- if reexec.Init() {
- os.Exit(1)
- }
- if os.Getenv("NOCACHE") == "1" {
- CACHE_IMAGES = []string{}
- RESTORE_IMAGES = []string{}
- }
- RegisterFailHandler(Fail)
- RunSpecs(t, "Libpod Suite")
-}
-
-var _ = BeforeSuite(func() {
- //Cache images
- cwd, _ := os.Getwd()
- INTEGRATION_ROOT = filepath.Join(cwd, "../../")
- 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 {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
- }
- for _, image := range CACHE_IMAGES {
- if err := podman.CreateArtifact(image); err != nil {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
- }
- host := GetHostDistributionInfo()
- if host.Distribution == "rhel" && strings.HasPrefix(host.Version, "7") {
- f, err := os.OpenFile("/proc/sys/user/max_user_namespaces", os.O_WRONLY, 0644)
- if err != nil {
- fmt.Println("Unable to enable userspace on RHEL 7")
- os.Exit(1)
- }
- _, err = f.WriteString("15000")
- if err != nil {
- fmt.Println("Unable to enable userspace on RHEL 7")
- os.Exit(1)
- }
- f.Close()
- }
-})
-
-// PodmanTestCreate creates a PodmanTestIntegration instance for the tests
-func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
-
- host := GetHostDistributionInfo()
- cwd, _ := os.Getwd()
-
- podmanBinary := filepath.Join(cwd, "../../bin/podman")
- if os.Getenv("PODMAN_BINARY") != "" {
- podmanBinary = os.Getenv("PODMAN_BINARY")
- }
- conmonBinary := filepath.Join("/usr/libexec/podman/conmon")
- altConmonBinary := "/usr/libexec/crio/conmon"
- if _, err := os.Stat(conmonBinary); os.IsNotExist(err) {
- conmonBinary = altConmonBinary
- }
- if os.Getenv("CONMON_BINARY") != "" {
- conmonBinary = os.Getenv("CONMON_BINARY")
- }
- storageOptions := STORAGE_OPTIONS
- if os.Getenv("STORAGE_OPTIONS") != "" {
- storageOptions = os.Getenv("STORAGE_OPTIONS")
- }
- cgroupManager := CGROUP_MANAGER
- if os.Getenv("CGROUP_MANAGER") != "" {
- cgroupManager = os.Getenv("CGROUP_MANAGER")
- }
-
- // Ubuntu doesn't use systemd cgroups
- if host.Distribution == "ubuntu" {
- cgroupManager = "cgroupfs"
- }
-
- runCBinary, err := exec.LookPath("runc")
- // If we cannot find the runc binary, setting to something static as we have no way
- // to return an error. The tests will fail and point out that the runc binary could
- // not be found nicely.
- if err != nil {
- runCBinary = "/usr/bin/runc"
- }
-
- CNIConfigDir := "/etc/cni/net.d"
-
- p := &PodmanTestIntegration{
- PodmanTest: PodmanTest{
- PodmanBinary: podmanBinary,
- ArtifactPath: ARTIFACT_DIR,
- TempDir: tempDir,
- },
- ConmonBinary: conmonBinary,
- CrioRoot: filepath.Join(tempDir, "crio"),
- CNIConfigDir: CNIConfigDir,
- RunCBinary: runCBinary,
- RunRoot: filepath.Join(tempDir, "crio-run"),
- StorageOptions: storageOptions,
- SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
- 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 *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), " ")
- if os.Getenv("HOOK_OPTION") != "" {
- podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
- }
- podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
- podmanOptions = append(podmanOptions, args...)
- return podmanOptions
-}
-
// Podman is the exec call to podman on the filesystem
func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
podmanSession := p.PodmanBase(args)
@@ -281,50 +125,6 @@ func (s *PodmanSessionIntegration) InspectImageJSON() []inspect.ImageData {
return i
}
-// CreateArtifact creates a cached image in the artifact dir
-func (p *PodmanTestIntegration) CreateArtifact(image string) error {
- if os.Getenv("NO_TEST_CACHE") != "" {
- return nil
- }
- fmt.Printf("Caching %s...", image)
- dest := strings.Split(image, "/")
- destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
- if _, err := os.Stat(destName); os.IsNotExist(err) {
- pull := p.Podman([]string{"pull", image})
- pull.Wait(90)
-
- save := p.Podman([]string{"save", "-o", destName, image})
- save.Wait(90)
- fmt.Printf("\n")
- } else {
- fmt.Printf(" already exists.\n")
- }
- return nil
-}
-
-// RestoreArtifact puts the cached image into our test store
-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))
- restore := p.Podman([]string{"load", "-q", "-i", destName})
- restore.Wait(90)
- return nil
-}
-
-// RestoreAllArtifacts unpacks all cached images
-func (p *PodmanTestIntegration) RestoreAllArtifacts() error {
- if os.Getenv("NO_TEST_CACHE") != "" {
- return nil
- }
- for _, image := range RESTORE_IMAGES {
- if err := p.RestoreArtifact(image); err != nil {
- return err
- }
- }
- return nil
-}
-
// CreatePod creates a pod with no infra container
// it optionally takes a pod name
func (p *PodmanTestIntegration) CreatePod(name string) (*PodmanSessionIntegration, int, string) {
@@ -406,3 +206,10 @@ func (p *PodmanTestIntegration) setRegistriesConfigEnv(b []byte) {
func resetRegistriesConfigEnv() {
os.Setenv("REGISTRIES_CONFIG_PATH", "")
}
+
+func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
+ return PodmanTestCreateUtil(tempDir, false)
+}
+
+//func (p *PodmanTestIntegration) StartVarlink() {}
+//func (p *PodmanTestIntegration) StopVarlink() {}
diff --git a/test/e2e/load_test.go b/test/e2e/load_test.go
index 4d7007191..423f99ac8 100644
--- a/test/e2e/load_test.go
+++ b/test/e2e/load_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/logs_test.go b/test/e2e/logs_test.go
index 236ddb221..d3c4fb802 100644
--- a/test/e2e/logs_test.go
+++ b/test/e2e/logs_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/mount_test.go b/test/e2e/mount_test.go
index a93a0aa4a..94218e6a9 100644
--- a/test/e2e/mount_test.go
+++ b/test/e2e/mount_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/namespace_test.go b/test/e2e/namespace_test.go
index ebce09f54..a0b6e6187 100644
--- a/test/e2e/namespace_test.go
+++ b/test/e2e/namespace_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pause_test.go b/test/e2e/pause_test.go
index e109bc077..f1ea17ead 100644
--- a/test/e2e/pause_test.go
+++ b/test/e2e/pause_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_create_test.go b/test/e2e/pod_create_test.go
index 5abf9613b..cb2b0e7b0 100644
--- a/test/e2e/pod_create_test.go
+++ b/test/e2e/pod_create_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_infra_container_test.go b/test/e2e/pod_infra_container_test.go
index 8c7c09c97..161bf7f9c 100644
--- a/test/e2e/pod_infra_container_test.go
+++ b/test/e2e/pod_infra_container_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_inspect_test.go b/test/e2e/pod_inspect_test.go
index 51e95f788..457acb373 100644
--- a/test/e2e/pod_inspect_test.go
+++ b/test/e2e/pod_inspect_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_kill_test.go b/test/e2e/pod_kill_test.go
index d9cec2cad..419a3a777 100644
--- a/test/e2e/pod_kill_test.go
+++ b/test/e2e/pod_kill_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_pause_test.go b/test/e2e/pod_pause_test.go
index 8f766d3db..a5192f84b 100644
--- a/test/e2e/pod_pause_test.go
+++ b/test/e2e/pod_pause_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_pod_namespaces.go b/test/e2e/pod_pod_namespaces.go
index b1d5abb1c..9815e37ef 100644
--- a/test/e2e/pod_pod_namespaces.go
+++ b/test/e2e/pod_pod_namespaces.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_ps_test.go b/test/e2e/pod_ps_test.go
index 9e816bcfa..3b7198861 100644
--- a/test/e2e/pod_ps_test.go
+++ b/test/e2e/pod_ps_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_restart_test.go b/test/e2e/pod_restart_test.go
index d0964e8de..e8acfd2ec 100644
--- a/test/e2e/pod_restart_test.go
+++ b/test/e2e/pod_restart_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_rm_test.go b/test/e2e/pod_rm_test.go
index 48767b33f..f63d2c8aa 100644
--- a/test/e2e/pod_rm_test.go
+++ b/test/e2e/pod_rm_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_start_test.go b/test/e2e/pod_start_test.go
index 346346425..77e8b586d 100644
--- a/test/e2e/pod_start_test.go
+++ b/test/e2e/pod_start_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_stats_test.go b/test/e2e/pod_stats_test.go
index d7b9a8f48..43d089a24 100644
--- a/test/e2e/pod_stats_test.go
+++ b/test/e2e/pod_stats_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_stop_test.go b/test/e2e/pod_stop_test.go
index 6c5319a3d..b3d7df252 100644
--- a/test/e2e/pod_stop_test.go
+++ b/test/e2e/pod_stop_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_top_test.go b/test/e2e/pod_top_test.go
index 3dc80ddfb..507d723b4 100644
--- a/test/e2e/pod_top_test.go
+++ b/test/e2e/pod_top_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/port_test.go b/test/e2e/port_test.go
index 09f3ab53a..fa633c379 100644
--- a/test/e2e/port_test.go
+++ b/test/e2e/port_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/prune_test.go b/test/e2e/prune_test.go
index 6679a676c..50a279232 100644
--- a/test/e2e/prune_test.go
+++ b/test/e2e/prune_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/ps_test.go b/test/e2e/ps_test.go
index 9caa6e7f1..bff2427d5 100644
--- a/test/e2e/ps_test.go
+++ b/test/e2e/ps_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pull_test.go b/test/e2e/pull_test.go
index ad8742984..bfae15152 100644
--- a/test/e2e/pull_test.go
+++ b/test/e2e/pull_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/push_test.go b/test/e2e/push_test.go
index 3447cd57e..42aefd1f7 100644
--- a/test/e2e/push_test.go
+++ b/test/e2e/push_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/refresh_test.go b/test/e2e/refresh_test.go
index bf8fff105..de331bf88 100644
--- a/test/e2e/refresh_test.go
+++ b/test/e2e/refresh_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/restart_test.go b/test/e2e/restart_test.go
index 30801c272..3c77444d8 100644
--- a/test/e2e/restart_test.go
+++ b/test/e2e/restart_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/rm_test.go b/test/e2e/rm_test.go
index c6a2b61ee..bc1431bce 100644
--- a/test/e2e/rm_test.go
+++ b/test/e2e/rm_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/rmi_test.go b/test/e2e/rmi_test.go
index 22bfbbe8c..81895f439 100644
--- a/test/e2e/rmi_test.go
+++ b/test/e2e/rmi_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/rootless_test.go b/test/e2e/rootless_test.go
index 8e9f9fc8d..daf8b8c32 100644
--- a/test/e2e/rootless_test.go
+++ b/test/e2e/rootless_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_cgroup_parent_test.go b/test/e2e/run_cgroup_parent_test.go
index 57b3aa6b1..efc9a7009 100644
--- a/test/e2e/run_cgroup_parent_test.go
+++ b/test/e2e/run_cgroup_parent_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_cleanup_test.go b/test/e2e/run_cleanup_test.go
index 5b60efa86..aa823b4e6 100644
--- a/test/e2e/run_cleanup_test.go
+++ b/test/e2e/run_cleanup_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_cpu_test.go b/test/e2e/run_cpu_test.go
index 343fe656c..f74d3ed84 100644
--- a/test/e2e/run_cpu_test.go
+++ b/test/e2e/run_cpu_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_device_test.go b/test/e2e/run_device_test.go
index 7f1f7b2d0..4f26ac8ee 100644
--- a/test/e2e/run_device_test.go
+++ b/test/e2e/run_device_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_dns_test.go b/test/e2e/run_dns_test.go
index 444c568e0..6c649cdbc 100644
--- a/test/e2e/run_dns_test.go
+++ b/test/e2e/run_dns_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_entrypoint_test.go b/test/e2e/run_entrypoint_test.go
index 227037f92..a33e16b63 100644
--- a/test/e2e/run_entrypoint_test.go
+++ b/test/e2e/run_entrypoint_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_exit_test.go b/test/e2e/run_exit_test.go
index 788cbd8dd..03072f598 100644
--- a/test/e2e/run_exit_test.go
+++ b/test/e2e/run_exit_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_memory_test.go b/test/e2e/run_memory_test.go
index 91a311e85..e9262d4f0 100644
--- a/test/e2e/run_memory_test.go
+++ b/test/e2e/run_memory_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_networking_test.go b/test/e2e/run_networking_test.go
index 68b1f06de..1c09a4d0b 100644
--- a/test/e2e/run_networking_test.go
+++ b/test/e2e/run_networking_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_ns_test.go b/test/e2e/run_ns_test.go
index e4dcc5adc..9962185f2 100644
--- a/test/e2e/run_ns_test.go
+++ b/test/e2e/run_ns_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_passwd_test.go b/test/e2e/run_passwd_test.go
index 891f4fbd8..fcb81fb77 100644
--- a/test/e2e/run_passwd_test.go
+++ b/test/e2e/run_passwd_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_privileged_test.go b/test/e2e/run_privileged_test.go
index 770ea3e6b..0c0de30c5 100644
--- a/test/e2e/run_privileged_test.go
+++ b/test/e2e/run_privileged_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_restart_test.go b/test/e2e/run_restart_test.go
index 018c66b45..2659d2b11 100644
--- a/test/e2e/run_restart_test.go
+++ b/test/e2e/run_restart_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_selinux_test.go b/test/e2e/run_selinux_test.go
index 418382e16..57e488abc 100644
--- a/test/e2e/run_selinux_test.go
+++ b/test/e2e/run_selinux_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_signal_test.go b/test/e2e/run_signal_test.go
index 8f7894db8..9be8e7810 100644
--- a/test/e2e/run_signal_test.go
+++ b/test/e2e/run_signal_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_staticip_test.go b/test/e2e/run_staticip_test.go
index 749835b47..bf50e5eb7 100644
--- a/test/e2e/run_staticip_test.go
+++ b/test/e2e/run_staticip_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
index 1e7f4f0f4..22a36bb6c 100644
--- a/test/e2e/run_test.go
+++ b/test/e2e/run_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_userns_test.go b/test/e2e/run_userns_test.go
index b1f3d08b4..254897e70 100644
--- a/test/e2e/run_userns_test.go
+++ b/test/e2e/run_userns_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/runlabel_test.go b/test/e2e/runlabel_test.go
index 93a19ba30..9b4f584b0 100644
--- a/test/e2e/runlabel_test.go
+++ b/test/e2e/runlabel_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/save_test.go b/test/e2e/save_test.go
index 9f64e49a7..b354492b8 100644
--- a/test/e2e/save_test.go
+++ b/test/e2e/save_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/search_test.go b/test/e2e/search_test.go
index 0167e9062..1438fd97b 100644
--- a/test/e2e/search_test.go
+++ b/test/e2e/search_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/start_test.go b/test/e2e/start_test.go
index 9d7ac145c..c4ed6f545 100644
--- a/test/e2e/start_test.go
+++ b/test/e2e/start_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/stats_test.go b/test/e2e/stats_test.go
index be00d68b2..e7b0b5f6e 100644
--- a/test/e2e/stats_test.go
+++ b/test/e2e/stats_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/stop_test.go b/test/e2e/stop_test.go
index 5c229b9b4..8fffedbb9 100644
--- a/test/e2e/stop_test.go
+++ b/test/e2e/stop_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/systemd_test.go b/test/e2e/systemd_test.go
index ce67bb469..a7e7a1500 100644
--- a/test/e2e/systemd_test.go
+++ b/test/e2e/systemd_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/tag_test.go b/test/e2e/tag_test.go
index 53896d1a2..9f67eaf80 100644
--- a/test/e2e/tag_test.go
+++ b/test/e2e/tag_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/top_test.go b/test/e2e/top_test.go
index cfcf2a959..067358468 100644
--- a/test/e2e/top_test.go
+++ b/test/e2e/top_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/trust_test.go b/test/e2e/trust_test.go
index bbf09eca4..0d36266f6 100644
--- a/test/e2e/trust_test.go
+++ b/test/e2e/trust_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/version_test.go b/test/e2e/version_test.go
index 68a462bdb..8ae2eb9ca 100644
--- a/test/e2e/version_test.go
+++ b/test/e2e/version_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_create_test.go b/test/e2e/volume_create_test.go
index 50ee63f2a..9e525786e 100644
--- a/test/e2e/volume_create_test.go
+++ b/test/e2e/volume_create_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_inspect_test.go b/test/e2e/volume_inspect_test.go
index d0d5a601e..aacdbe8be 100644
--- a/test/e2e/volume_inspect_test.go
+++ b/test/e2e/volume_inspect_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_ls_test.go b/test/e2e/volume_ls_test.go
index 119d29d9b..d2ee558c1 100644
--- a/test/e2e/volume_ls_test.go
+++ b/test/e2e/volume_ls_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_prune_test.go b/test/e2e/volume_prune_test.go
index 8c0a10e77..008acc2a2 100644
--- a/test/e2e/volume_prune_test.go
+++ b/test/e2e/volume_prune_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_rm_test.go b/test/e2e/volume_rm_test.go
index cebb09467..295b290e4 100644
--- a/test/e2e/volume_rm_test.go
+++ b/test/e2e/volume_rm_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/wait_test.go b/test/e2e/wait_test.go
index a7e9b4c06..08da97aa0 100644
--- a/test/e2e/wait_test.go
+++ b/test/e2e/wait_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (