From eeff3d2de8adfcda1971bdaba888b5e5123e388e Mon Sep 17 00:00:00 2001 From: Ashley Cui Date: Thu, 11 Jan 2024 11:42:54 -0500 Subject: [PATCH 1/2] Fix machine inspect test config Signed-off-by: Ashley Cui --- pkg/machine/e2e/config_inspect_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/machine/e2e/config_inspect_test.go b/pkg/machine/e2e/config_inspect_test.go index ffd74220f1..f0d4aa5bdd 100644 --- a/pkg/machine/e2e/config_inspect_test.go +++ b/pkg/machine/e2e/config_inspect_test.go @@ -13,7 +13,7 @@ func (i *inspectMachine) buildCmd(m *machineTestBuilder) []string { if len(i.format) > 0 { cmd = append(cmd, "--format", i.format) } - cmd = append(cmd, m.names...) + cmd = append(cmd, m.name) i.cmd = cmd return cmd } From f6107f631980ab91bd471a8768285ac740c0ab7b Mon Sep 17 00:00:00 2001 From: Ashley Cui Date: Wed, 10 Jan 2024 14:53:02 -0500 Subject: [PATCH 2/2] Assign separate ports for each appleHV machine Previously, every machine created using appleHV interacted with VFKit using port 8081. This meant that if multiple machines existed on the machine, starting one would start all the machines. This patch assigns a separate random port for each machine, so machine commands interact with just the specified machine. Signed-off-by: Ashley Cui --- pkg/machine/applehv/config.go | 6 +++--- pkg/machine/applehv/machine.go | 7 ++++++- pkg/machine/e2e/config_test.go | 2 +- pkg/machine/e2e/start_test.go | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/pkg/machine/applehv/config.go b/pkg/machine/applehv/config.go index eb11c93e3b..26fa74665a 100644 --- a/pkg/machine/applehv/config.go +++ b/pkg/machine/applehv/config.go @@ -12,16 +12,16 @@ import ( "github.com/containers/podman/v4/pkg/machine" "github.com/containers/podman/v4/pkg/machine/compression" "github.com/containers/podman/v4/pkg/machine/define" - "github.com/containers/podman/v4/pkg/machine/vmconfigs" "github.com/containers/podman/v4/pkg/machine/ignition" + "github.com/containers/podman/v4/pkg/machine/vmconfigs" vfConfig "github.com/crc-org/vfkit/pkg/config" "github.com/docker/go-units" "golang.org/x/sys/unix" ) const ( - defaultVFKitEndpoint = "http://localhost:8081" - ignitionSocketName = "ignition.sock" + localhostURI = "http://localhost" + ignitionSocketName = "ignition.sock" ) type AppleHVVirtualization struct { diff --git a/pkg/machine/applehv/machine.go b/pkg/machine/applehv/machine.go index 2ca843c83e..99f8d44896 100644 --- a/pkg/machine/applehv/machine.go +++ b/pkg/machine/applehv/machine.go @@ -116,7 +116,12 @@ func (m *MacMachine) setVfkitInfo(cfg *config.Config, readySocket define.VMFile) } m.Vfkit.VirtualMachine.Devices = defaultDevices - m.Vfkit.Endpoint = defaultVFKitEndpoint + randPort, err := utils.GetRandomPort() + if err != nil { + return err + } + + m.Vfkit.Endpoint = localhostURI + ":" + strconv.Itoa(randPort) m.Vfkit.VfkitBinaryPath = vfkitBinaryPath return nil diff --git a/pkg/machine/e2e/config_test.go b/pkg/machine/e2e/config_test.go index 354b3be742..9692bccc01 100644 --- a/pkg/machine/e2e/config_test.go +++ b/pkg/machine/e2e/config_test.go @@ -132,7 +132,7 @@ func (m *machineTestBuilder) setCmd(mc machineCommand) *machineTestBuilder { return m } -func (m *machineTestBuilder) setTimeout(timeout time.Duration) *machineTestBuilder { +func (m *machineTestBuilder) setTimeout(timeout time.Duration) *machineTestBuilder { //nolint: unparam m.timeout = timeout return m } diff --git a/pkg/machine/e2e/start_test.go b/pkg/machine/e2e/start_test.go index d1001a45d2..8c77bde6bc 100644 --- a/pkg/machine/e2e/start_test.go +++ b/pkg/machine/e2e/start_test.go @@ -1,6 +1,8 @@ package e2e_test import ( + "time" + "github.com/containers/podman/v4/pkg/machine/define" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -84,4 +86,36 @@ var _ = Describe("podman machine start", func() { Expect(startSession).To(Exit(125)) Expect(startSession.errorToString()).To(ContainSubstring("VM already running or starting")) }) + It("start only starts specified machine", func() { + i := initMachine{} + startme := randomString() + session, err := mb.setName(startme).setCmd(i.withImagePath(mb.imagePath)).run() + Expect(err).ToNot(HaveOccurred()) + Expect(session).To(Exit(0)) + + j := initMachine{} + dontstartme := randomString() + session2, err := mb.setName(dontstartme).setCmd(j.withImagePath(mb.imagePath)).run() + Expect(err).ToNot(HaveOccurred()) + Expect(session2).To(Exit(0)) + + s := startMachine{} + session3, err := mb.setName(startme).setCmd(s).setTimeout(time.Minute * 10).run() + Expect(err).ToNot(HaveOccurred()) + Expect(session3).Should(Exit(0)) + + inspect := new(inspectMachine) + inspect = inspect.withFormat("{{.State}}") + inspectSession, err := mb.setName(startme).setCmd(inspect).run() + Expect(err).ToNot(HaveOccurred()) + Expect(inspectSession).To(Exit(0)) + Expect(inspectSession.outputToString()).To(Equal(define.Running)) + + inspect2 := new(inspectMachine) + inspect2 = inspect2.withFormat("{{.State}}") + inspectSession2, err := mb.setName(dontstartme).setCmd(inspect2).run() + Expect(err).ToNot(HaveOccurred()) + Expect(inspectSession2).To(Exit(0)) + Expect(inspectSession2.outputToString()).To(Not(Equal(define.Running))) + }) })