From bc7b1ca03da88473c10e59197becd812cf341663 Mon Sep 17 00:00:00 2001 From: baude Date: Fri, 19 Apr 2019 08:33:18 -0500 Subject: enable integration tests for remote-client first pass at enabling a swath of integration tests for the remote-client. Signed-off-by: baude --- test/e2e/common_test.go | 7 ++- test/e2e/create_test.go | 2 - test/e2e/diff_test.go | 3 +- test/e2e/info_test.go | 1 + test/e2e/kill_test.go | 2 - test/e2e/libpod_suite_remoteclient_test.go | 74 ++++++++++++++++++++++++++---- test/e2e/libpod_suite_test.go | 3 +- test/e2e/logs_test.go | 2 - test/e2e/pod_create_test.go | 2 - test/e2e/pod_inspect_test.go | 2 - test/e2e/pod_kill_test.go | 2 - test/e2e/pod_pause_test.go | 2 - test/e2e/pod_prune_test.go | 2 - test/e2e/pod_ps_test.go | 2 - test/e2e/pod_restart_test.go | 2 - test/e2e/pod_rm_test.go | 2 - test/e2e/pod_start_test.go | 2 - test/e2e/pod_stop_test.go | 2 - test/e2e/ps_test.go | 2 - test/e2e/rm_test.go | 2 - test/e2e/run_test.go | 1 + test/e2e/save_test.go | 10 ++++ test/e2e/stop_test.go | 2 - test/e2e/tag_test.go | 2 - test/e2e/wait_test.go | 2 - test/utils/utils.go | 6 +-- 26 files changed, 89 insertions(+), 52 deletions(-) (limited to 'test') diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go index a6fc211f6..3c7675b35 100644 --- a/test/e2e/common_test.go +++ b/test/e2e/common_test.go @@ -264,9 +264,14 @@ func PodmanTestCreateUtil(tempDir string, remote bool) *PodmanTestIntegration { } if remote { p.PodmanTest.RemotePodmanBinary = podmanRemoteBinary + uuid := stringid.GenerateNonCryptoID() if !rootless.IsRootless() { - uuid := stringid.GenerateNonCryptoID() p.VarlinkEndpoint = fmt.Sprintf("unix:/run/podman/io.podman-%s", uuid) + } else { + runtimeDir := os.Getenv("XDG_RUNTIME_DIR") + socket := fmt.Sprintf("io.podman-%s", uuid) + fqpath := filepath.Join(runtimeDir, socket) + p.VarlinkEndpoint = fmt.Sprintf("unix:%s", fqpath) } } diff --git a/test/e2e/create_test.go b/test/e2e/create_test.go index 105cba37c..f3367337e 100644 --- a/test/e2e/create_test.go +++ b/test/e2e/create_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/diff_test.go b/test/e2e/diff_test.go index fba65823e..920b920c0 100644 --- a/test/e2e/diff_test.go +++ b/test/e2e/diff_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( @@ -63,6 +61,7 @@ var _ = Describe("Podman diff", func() { }) It("podman diff container and committed image", func() { + SkipIfRemote() session := podmanTest.Podman([]string{"run", "--name=diff-test", ALPINE, "touch", "/tmp/diff-test"}) session.WaitWithDefaultTimeout() Expect(session.ExitCode()).To(Equal(0)) diff --git a/test/e2e/info_test.go b/test/e2e/info_test.go index c960fb311..ca4012dde 100644 --- a/test/e2e/info_test.go +++ b/test/e2e/info_test.go @@ -24,6 +24,7 @@ var _ = Describe("Podman Info", func() { } podmanTest = PodmanTestCreate(tempdir) podmanTest.Setup() + podmanTest.DelayForVarlink() }) AfterEach(func() { diff --git a/test/e2e/kill_test.go b/test/e2e/kill_test.go index 618ca5aa0..3286180a4 100644 --- a/test/e2e/kill_test.go +++ b/test/e2e/kill_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/libpod_suite_remoteclient_test.go b/test/e2e/libpod_suite_remoteclient_test.go index 1e477fe2f..05c355711 100644 --- a/test/e2e/libpod_suite_remoteclient_test.go +++ b/test/e2e/libpod_suite_remoteclient_test.go @@ -3,13 +3,17 @@ package integration import ( + "bytes" "fmt" "github.com/containers/libpod/pkg/rootless" "io/ioutil" "os" "os/exec" "path/filepath" + "strconv" "strings" + "syscall" + "time" "github.com/onsi/ginkgo" ) @@ -50,33 +54,76 @@ func PodmanTestCreate(tempDir string) *PodmanTestIntegration { return pti } +func (p *PodmanTestIntegration) ResetVarlinkAddress() { + os.Unsetenv("PODMAN_VARLINK_ADDRESS") +} + +func (p *PodmanTestIntegration) SetVarlinkAddress(addr string) { + os.Setenv("PODMAN_VARLINK_ADDRESS", addr) +} + func (p *PodmanTestIntegration) StartVarlink() { if os.Geteuid() == 0 { os.MkdirAll("/run/podman", 0755) } varlinkEndpoint := p.VarlinkEndpoint - if addr := os.Getenv("PODMAN_VARLINK_ADDRESS"); addr != "" { - varlinkEndpoint = addr - } + p.SetVarlinkAddress(p.VarlinkEndpoint) args := []string{"varlink", "--timeout", "0", varlinkEndpoint} podmanOptions := getVarlinkOptions(p, args) command := exec.Command(p.PodmanBinary, podmanOptions...) fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " ")) command.Start() + command.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} + p.VarlinkCommand = command p.VarlinkSession = command.Process } func (p *PodmanTestIntegration) StopVarlink() { + var out bytes.Buffer + var pids []int varlinkSession := p.VarlinkSession - varlinkSession.Kill() - varlinkSession.Wait() if !rootless.IsRootless() { - socket := strings.Split(p.VarlinkEndpoint, ":")[1] - if err := os.Remove(socket); err != nil { - fmt.Println(err) + if err := varlinkSession.Kill(); err != nil { + fmt.Fprintf(os.Stderr, "error on varlink stop-kill %q", err) } + if _, err := varlinkSession.Wait(); err != nil { + fmt.Fprintf(os.Stderr, "error on varlink stop-wait %q", err) + } + + } else { + p.ResetVarlinkAddress() + parentPid := fmt.Sprintf("%d", p.VarlinkSession.Pid) + pgrep := exec.Command("pgrep", "-P", parentPid) + fmt.Printf("running: pgrep %s\n", parentPid) + pgrep.Stdout = &out + err := pgrep.Run() + if err != nil { + fmt.Fprint(os.Stderr, "unable to find varlink pid") + } + + for _, s := range strings.Split(out.String(), "\n") { + if len(s) == 0 { + continue + } + p, err := strconv.Atoi(s) + if err != nil { + fmt.Fprintf(os.Stderr, "unable to convert %s to int", s) + } + if p != 0 { + pids = append(pids, p) + } + } + + pids = append(pids, p.VarlinkSession.Pid) + for _, pid := range pids { + syscall.Kill(pid, syscall.SIGKILL) + } + } + socket := strings.Split(p.VarlinkEndpoint, ":")[1] + if err := os.Remove(socket); err != nil { + fmt.Println(err) } } @@ -110,3 +157,14 @@ func (p *PodmanTestIntegration) RestoreArtifact(image string) error { command.Wait() return nil } + +func (p *PodmanTestIntegration) DelayForVarlink() { + for i := 0; i < 5; i++ { + session := p.Podman([]string{"info"}) + session.WaitWithDefaultTimeout() + if session.ExitCode() == 0 || i == 4 { + break + } + time.Sleep(1 * time.Second) + } +} diff --git a/test/e2e/libpod_suite_test.go b/test/e2e/libpod_suite_test.go index 10ca9ac47..0a85c625d 100644 --- a/test/e2e/libpod_suite_test.go +++ b/test/e2e/libpod_suite_test.go @@ -79,4 +79,5 @@ func (p *PodmanTestIntegration) RestoreArtifact(image string) error { restore.Wait(90) return nil } -func (p *PodmanTestIntegration) StopVarlink() {} +func (p *PodmanTestIntegration) StopVarlink() {} +func (p *PodmanTestIntegration) DelayForVarlink() {} diff --git a/test/e2e/logs_test.go b/test/e2e/logs_test.go index d051e3dba..2c82182cf 100644 --- a/test/e2e/logs_test.go +++ b/test/e2e/logs_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_create_test.go b/test/e2e/pod_create_test.go index de0734e9f..84966f77b 100644 --- a/test/e2e/pod_create_test.go +++ b/test/e2e/pod_create_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_inspect_test.go b/test/e2e/pod_inspect_test.go index 671d203a6..d1a023153 100644 --- a/test/e2e/pod_inspect_test.go +++ b/test/e2e/pod_inspect_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_kill_test.go b/test/e2e/pod_kill_test.go index c1f7503e3..23a8ea97e 100644 --- a/test/e2e/pod_kill_test.go +++ b/test/e2e/pod_kill_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_pause_test.go b/test/e2e/pod_pause_test.go index 59a4da176..ab828853b 100644 --- a/test/e2e/pod_pause_test.go +++ b/test/e2e/pod_pause_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_prune_test.go b/test/e2e/pod_prune_test.go index c20f602ad..8a4ba2399 100644 --- a/test/e2e/pod_prune_test.go +++ b/test/e2e/pod_prune_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_ps_test.go b/test/e2e/pod_ps_test.go index 2fa26d7ad..8513c6c2e 100644 --- a/test/e2e/pod_ps_test.go +++ b/test/e2e/pod_ps_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_restart_test.go b/test/e2e/pod_restart_test.go index ffb6cb94c..7b19ecc94 100644 --- a/test/e2e/pod_restart_test.go +++ b/test/e2e/pod_restart_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_rm_test.go b/test/e2e/pod_rm_test.go index 5da3d563b..7417a1298 100644 --- a/test/e2e/pod_rm_test.go +++ b/test/e2e/pod_rm_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_start_test.go b/test/e2e/pod_start_test.go index de52af2a0..967fbc2da 100644 --- a/test/e2e/pod_start_test.go +++ b/test/e2e/pod_start_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/pod_stop_test.go b/test/e2e/pod_stop_test.go index fa285fa80..9fd9e3ef4 100644 --- a/test/e2e/pod_stop_test.go +++ b/test/e2e/pod_stop_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/ps_test.go b/test/e2e/ps_test.go index 957c69aa8..7edb350f3 100644 --- a/test/e2e/ps_test.go +++ b/test/e2e/ps_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/rm_test.go b/test/e2e/rm_test.go index 9bf742a63..29150d67c 100644 --- a/test/e2e/rm_test.go +++ b/test/e2e/rm_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go index 030722b47..0e1f0d865 100644 --- a/test/e2e/run_test.go +++ b/test/e2e/run_test.go @@ -273,6 +273,7 @@ var _ = Describe("Podman run", func() { }) It("podman run notify_socket", func() { + SkipIfRemote() host := GetHostDistributionInfo() if host.Distribution != "rhel" && host.Distribution != "centos" && host.Distribution != "fedora" { Skip("this test requires a working runc") diff --git a/test/e2e/save_test.go b/test/e2e/save_test.go index c3edc7c7e..ffb5182d6 100644 --- a/test/e2e/save_test.go +++ b/test/e2e/save_test.go @@ -4,6 +4,7 @@ import ( "os" "path/filepath" + "github.com/containers/libpod/pkg/rootless" . "github.com/containers/libpod/test/utils" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -75,6 +76,9 @@ var _ = Describe("Podman save", func() { }) It("podman save to directory with oci format", func() { + if rootless.IsRootless() && podmanTest.RemoteTest { + Skip("Requires a fix in containers image for chown/lchown") + } outdir := filepath.Join(podmanTest.TempDir, "save") save := podmanTest.Podman([]string{"save", "--format", "oci-dir", "-o", outdir, ALPINE}) @@ -83,6 +87,9 @@ var _ = Describe("Podman save", func() { }) It("podman save to directory with v2s2 docker format", func() { + if rootless.IsRootless() && podmanTest.RemoteTest { + Skip("Requires a fix in containers image for chown/lchown") + } outdir := filepath.Join(podmanTest.TempDir, "save") save := podmanTest.Podman([]string{"save", "--format", "docker-dir", "-o", outdir, ALPINE}) @@ -91,6 +98,9 @@ var _ = Describe("Podman save", func() { }) It("podman save to directory with docker format and compression", func() { + if rootless.IsRootless() && podmanTest.RemoteTest { + Skip("Requires a fix in containers image for chown/lchown") + } outdir := filepath.Join(podmanTest.TempDir, "save") save := podmanTest.Podman([]string{"save", "--compress", "--format", "docker-dir", "-o", outdir, ALPINE}) diff --git a/test/e2e/stop_test.go b/test/e2e/stop_test.go index 717eea441..e201204df 100644 --- a/test/e2e/stop_test.go +++ b/test/e2e/stop_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/tag_test.go b/test/e2e/tag_test.go index ff0ac31c4..26d6dfa75 100644 --- a/test/e2e/tag_test.go +++ b/test/e2e/tag_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/e2e/wait_test.go b/test/e2e/wait_test.go index 5bf0331e5..28a4c1e40 100644 --- a/test/e2e/wait_test.go +++ b/test/e2e/wait_test.go @@ -1,5 +1,3 @@ -// +build !remoteclient - package integration import ( diff --git a/test/utils/utils.go b/test/utils/utils.go index 1e0391d2e..beadab549 100644 --- a/test/utils/utils.go +++ b/test/utils/utils.go @@ -4,7 +4,6 @@ import ( "bufio" "encoding/json" "fmt" - "github.com/containers/libpod/pkg/rootless" "io/ioutil" "os" "os/exec" @@ -42,6 +41,7 @@ type PodmanTest struct { RemotePodmanBinary string VarlinkSession *os.Process VarlinkEndpoint string + VarlinkCommand *exec.Cmd } // PodmanSession wraps the gexec.session so we can extend it @@ -69,9 +69,7 @@ func (p *PodmanTest) PodmanAsUserBase(args []string, uid, gid uint32, cwd string podmanBinary := p.PodmanBinary if p.RemoteTest { podmanBinary = p.RemotePodmanBinary - if !rootless.IsRootless() { - env = append(env, fmt.Sprintf("PODMAN_VARLINK_ADDRESS=%s", p.VarlinkEndpoint)) - } + env = append(env, fmt.Sprintf("PODMAN_VARLINK_ADDRESS=%s", p.VarlinkEndpoint)) } if env == nil { -- cgit v1.2.3-54-g00ecf