mirror of
https://github.com/containers/podman.git
synced 2025-11-29 01:28:22 +08:00
add test to verify init reuse hvsock entries for hyperv machines
Signed-off-by: lstocchi <lstocchi@redhat.com>
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"github.com/Microsoft/go-winio/vhd"
|
||||
"github.com/containers/libhvee/pkg/hypervctl"
|
||||
"github.com/containers/podman/v6/pkg/machine/define"
|
||||
"github.com/containers/podman/v6/pkg/machine/hyperv/vsock"
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
. "github.com/onsi/gomega/gexec"
|
||||
@@ -125,4 +126,106 @@ var _ = Describe("podman machine init - windows only", func() {
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(checkSession).To(Exit(125))
|
||||
})
|
||||
|
||||
It("init should create hvsock entries if they do not exist, otherwise should reuse existing ones", func() {
|
||||
skipIfNotVmtype(define.HyperVVirt, "HyperV test only")
|
||||
|
||||
name := randomString()
|
||||
|
||||
// Ensure no HVSock entries exist before we start
|
||||
networkHvSocks, err := vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Network)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(networkHvSocks).To(BeEmpty())
|
||||
|
||||
readySocks, err := vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Events)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(readySocks).To(BeEmpty())
|
||||
|
||||
fileServerVsocks, err := vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Fileserver)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(fileServerVsocks).To(BeEmpty())
|
||||
|
||||
// Execute init for the first machine. This should create new HVSock entries
|
||||
i := new(initMachine)
|
||||
session, err := mb.setName(name).setCmd(i.withImage(mb.imagePath)).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session).To(Exit(0))
|
||||
|
||||
// Check that the HVSock entries were created
|
||||
networkHvSocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Network)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(networkHvSocks).To(HaveLen(1))
|
||||
|
||||
readySocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Events)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(readySocks).To(HaveLen(1))
|
||||
|
||||
fileServerVsocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Fileserver)
|
||||
countFileServerVsocks := len(fileServerVsocks)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
// check that many file server vsock was created
|
||||
Expect(countFileServerVsocks).To(BeNumerically(">", 1))
|
||||
|
||||
// Execute init for another machine. This should reuse the existing HVSock entries created above
|
||||
otherName := randomString()
|
||||
i = new(initMachine)
|
||||
session, err = mb.setName(otherName).setCmd(i.withImage(mb.imagePath)).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session).To(Exit(0))
|
||||
|
||||
newNetworkHvSocks, err := vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Network)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(newNetworkHvSocks).To(HaveLen(1))
|
||||
Expect(newNetworkHvSocks[0].Port).To(Equal(networkHvSocks[0].Port))
|
||||
|
||||
newReadySocks, err := vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Events)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(newReadySocks).To(HaveLen(1))
|
||||
Expect(newReadySocks[0].Port).To(Equal(readySocks[0].Port))
|
||||
|
||||
newFileServerVsocks, err := vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Fileserver)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(newFileServerVsocks).To(HaveLen(countFileServerVsocks))
|
||||
for i := 0; i < countFileServerVsocks; i++ {
|
||||
Expect(newFileServerVsocks[i].Port).To(Equal(fileServerVsocks[i].Port))
|
||||
}
|
||||
|
||||
// remove first created machine
|
||||
rm := rmMachine{}
|
||||
removeSession, err := mb.setName(name).setCmd(rm.withForce()).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(removeSession).To(Exit(0))
|
||||
|
||||
// Check that HVSock entries still exist after removing one machine
|
||||
networkHvSocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Network)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(networkHvSocks).To(HaveLen(1))
|
||||
|
||||
readySocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Events)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(readySocks).To(HaveLen(1))
|
||||
|
||||
fileServerVsocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Fileserver)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(fileServerVsocks).To(HaveLen(countFileServerVsocks))
|
||||
|
||||
// remove second created machine
|
||||
rm = rmMachine{}
|
||||
removeSession, err = mb.setName(otherName).setCmd(rm.withForce()).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(removeSession).To(Exit(0))
|
||||
|
||||
// Verify all hvsock entries created during the test were removed
|
||||
networkHvSocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Network)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(networkHvSocks).To(BeEmpty())
|
||||
|
||||
readySocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Events)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(readySocks).To(BeEmpty())
|
||||
|
||||
fileServerVsocks, err = vsock.LoadAllHVSockRegistryEntriesByPurpose(vsock.Fileserver)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(fileServerVsocks).To(BeEmpty())
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user