mirror of
https://github.com/containers/podman.git
synced 2025-11-29 09:37:38 +08:00
Implement publishing API UNIX socket on Windows platforms
gvproxy and win-sshproxy have capabilities to serve this type of enpoint. This change only adds one additional API enpoint publishing by appending proxy command lines. Signed-off-by: Arthur Sengileyev <arthur.sengileyev@gmail.com>
This commit is contained in:
96
pkg/machine/e2e/api_test.go
Normal file
96
pkg/machine/e2e/api_test.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package e2e_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/containers/podman/v5/pkg/machine"
|
||||
"github.com/docker/docker/client"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
. "github.com/onsi/gomega/gexec"
|
||||
)
|
||||
|
||||
const (
|
||||
NamedPipeProto = "npipe://"
|
||||
)
|
||||
|
||||
var _ = Describe("run podman API test calls", func() {
|
||||
|
||||
It("client connect to machine socket", func() {
|
||||
if runtime.GOOS == "windows" {
|
||||
Skip("Go docker client doesn't support unix socket on Windows")
|
||||
}
|
||||
name := randomString()
|
||||
i := new(initMachine)
|
||||
session, err := mb.setName(name).setCmd(i.withImage(mb.imagePath).withNow()).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session).To(Exit(0))
|
||||
|
||||
inspectJSON := new(inspectMachine)
|
||||
inspectSession, err := mb.setName(name).setCmd(inspectJSON).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(inspectSession).To(Exit(0))
|
||||
|
||||
var inspectInfo []machine.InspectInfo
|
||||
err = jsoniter.Unmarshal(inspectSession.Bytes(), &inspectInfo)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
sockPath := inspectInfo[0].ConnectionInfo.PodmanSocket.GetPath()
|
||||
|
||||
cli, err := client.NewClientWithOpts(client.WithHost("unix://" + sockPath))
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
_, err = cli.Ping(context.Background())
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
|
||||
It("client connect to machine named pipe", func() {
|
||||
if runtime.GOOS != "windows" {
|
||||
Skip("test is only supported on Windows")
|
||||
}
|
||||
name := randomString()
|
||||
i := new(initMachine)
|
||||
session, err := mb.setName(name).setCmd(i.withImage(mb.imagePath).withNow()).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session).To(Exit(0))
|
||||
|
||||
inspectJSON := new(inspectMachine)
|
||||
inspectSession, err := mb.setName(name).setCmd(inspectJSON).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(inspectSession).To(Exit(0))
|
||||
|
||||
var inspectInfo []machine.InspectInfo
|
||||
err = jsoniter.Unmarshal(inspectSession.Bytes(), &inspectInfo)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
pipePath := inspectInfo[0].ConnectionInfo.PodmanPipe.GetPath()
|
||||
|
||||
cli, err := client.NewClientWithOpts(client.WithHost(NamedPipeProto + filepath.ToSlash(pipePath)))
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
_, err = cli.Ping(context.Background())
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
|
||||
It("curl connect to machine socket", func() {
|
||||
name := randomString()
|
||||
i := new(initMachine)
|
||||
session, err := mb.setName(name).setCmd(i.withImage(mb.imagePath).withNow()).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session).To(Exit(0))
|
||||
|
||||
inspectJSON := new(inspectMachine)
|
||||
inspectSession, err := mb.setName(name).setCmd(inspectJSON).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(inspectSession).To(Exit(0))
|
||||
|
||||
var inspectInfo []machine.InspectInfo
|
||||
err = jsoniter.Unmarshal(inspectSession.Bytes(), &inspectInfo)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
sockPath := inspectInfo[0].ConnectionInfo.PodmanSocket.GetPath()
|
||||
|
||||
cmd := exec.Command("curl", "--unix-socket", sockPath, "http://d/v5.0.0/libpod/info")
|
||||
err = cmd.Run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user