mirror of
https://github.com/containers/podman.git
synced 2025-06-24 11:28:24 +08:00
Add port forwarding and gvproxy machine test
Added a test that checks that gvproxy properly starts and stops when running podman machine, and that containers properly forward ports to the host when running podman using machine. Signed-off-by: Ashley Cui <acui@redhat.com>
This commit is contained in:
@ -1,6 +1,13 @@
|
|||||||
package e2e_test
|
package e2e_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os/exec"
|
||||||
|
"time"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo/v2"
|
. "github.com/onsi/ginkgo/v2"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
. "github.com/onsi/gomega/gexec"
|
. "github.com/onsi/gomega/gexec"
|
||||||
@ -49,4 +56,65 @@ var _ = Describe("run basic podman commands", func() {
|
|||||||
Expect(rmCon).To(Exit(0))
|
Expect(rmCon).To(Exit(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("Podman ops with port forwarding and gvproxy", func() {
|
||||||
|
name := randomString()
|
||||||
|
i := new(initMachine)
|
||||||
|
session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath).withNow()).run()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(session).To(Exit(0))
|
||||||
|
|
||||||
|
bm := basicMachine{}
|
||||||
|
runAlp, err := mb.setCmd(bm.withPodmanCommand([]string{"run", "-dt", "-p", "62544:80", "quay.io/libpod/alpine_nginx"})).run()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(runAlp).To(Exit(0))
|
||||||
|
testHTTPServer("62544", false, "podman rulez")
|
||||||
|
|
||||||
|
out, err := exec.Command("pgrep", "gvproxy").Output()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(string(out)).ToNot(BeEmpty())
|
||||||
|
|
||||||
|
rmCon, err := mb.setCmd(bm.withPodmanCommand([]string{"rm", "-af"})).run()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(rmCon).To(Exit(0))
|
||||||
|
testHTTPServer("62544", true, "")
|
||||||
|
|
||||||
|
stop := new(stopMachine)
|
||||||
|
stopSession, err := mb.setCmd(stop).run()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(stopSession).To(Exit(0))
|
||||||
|
|
||||||
|
// gxproxy should exit after machine is stopped
|
||||||
|
_, err = exec.Command("pgrep", "gvproxy").Output()
|
||||||
|
Expect(err).To(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
func testHTTPServer(port string, shouldErr bool, expectedResponse string) {
|
||||||
|
address := url.URL{
|
||||||
|
Scheme: "http",
|
||||||
|
Host: net.JoinHostPort("localhost", port),
|
||||||
|
}
|
||||||
|
|
||||||
|
interval := 250 * time.Millisecond
|
||||||
|
var err error
|
||||||
|
var resp *http.Response
|
||||||
|
for i := 0; i < 6; i++ {
|
||||||
|
resp, err = http.Get(address.String())
|
||||||
|
if err != nil && shouldErr {
|
||||||
|
Expect(err.Error()).To(ContainSubstring(expectedResponse))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
defer resp.Body.Close()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(interval)
|
||||||
|
interval *= 2
|
||||||
|
}
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
body, err := io.ReadAll(resp.Body)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(string(body)).Should(Equal(expectedResponse))
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user