mirror of
https://github.com/containers/podman.git
synced 2026-05-30 19:35:32 -04:00
Generated by go1.26.3 fix ./test/e2e/... Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
97 lines
3.8 KiB
Go
97 lines
3.8 KiB
Go
//go:build windows
|
|
|
|
package integration
|
|
|
|
import (
|
|
"os/exec"
|
|
"os/user"
|
|
"strings"
|
|
|
|
"go.podman.io/podman/v6/pkg/machine/hyperv/vsock"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
. "go.podman.io/podman/v6/test/utils"
|
|
)
|
|
|
|
var _ = Describe("podman system hyperv-prep", func() {
|
|
It("rejects incompatible flags together", func() {
|
|
session := podmanTest.Podman([]string{"system", "hyperv-prep", "--status", "--reset"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).To(ExitWithError(125, "none of the others can be"))
|
|
session = podmanTest.Podman([]string{"system", "hyperv-prep", "--status", "--mounts", "1"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).To(ExitWithError(125, "none of the others can be"))
|
|
session = podmanTest.Podman([]string{"system", "hyperv-prep", "--reset", "--mounts", "1"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).To(ExitWithError(125, "none of the others can be"))
|
|
})
|
|
|
|
It("creates registry entries and resets them", func() {
|
|
skipIfNotAdmin("test requires an elevated (admin) terminal")
|
|
|
|
// Preconditions: no existing registry entries and user not in Hyper-V Administrators group
|
|
Expect(vsock.CheckIfHVSockRegistryEntriesExist(1)).To(BeFalse(),
|
|
"vsock registry entries already exist, cannot run test")
|
|
Expect(isCurrentUserHyperVAdmin()).To(BeFalse(),
|
|
"user is already a member of the Hyper-V Administrators group, cannot run test")
|
|
|
|
// Run `--status` a first time to check that it reports correctly that:
|
|
// - No vsock registry keys exist
|
|
// - User isn't a member of the Hyper-V Administrators group
|
|
session := podmanTest.Podman([]string{"system", "hyperv-prep", "--status"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(ExitCleanly())
|
|
Expect(session.OutputToString()).To(ContainSubstring("No vsock registry entries found"))
|
|
Expect(session.OutputToString()).To(ContainSubstring("Current user is NOT a member"))
|
|
|
|
// Run hyperv-prep to create registry entries
|
|
session = podmanTest.Podman([]string{"system", "hyperv-prep"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(ExitCleanly())
|
|
Expect(session.OutputToString()).To(ContainSubstring("Network"))
|
|
Expect(session.OutputToString()).To(ContainSubstring("Events"))
|
|
Expect(session.OutputToString()).To(ContainSubstring("Fileserver"))
|
|
|
|
// Check that running hyperv-prep worked:
|
|
// - The registry entries for vsock have been created (for 2 mounts)
|
|
// - The user is a member of the Hyper-V Administrators group
|
|
Expect(vsock.CheckIfHVSockRegistryEntriesExist(2)).To(BeTrue(),
|
|
"vsock registry entries don't exist after running hyperv-prep")
|
|
Expect(isCurrentUserHyperVAdmin()).To(BeTrue(),
|
|
"user isn't a member of the Hyper-V Administrators group after running hyperv-prep")
|
|
|
|
// Run --status a second time to shows the created entries
|
|
session = podmanTest.Podman([]string{"system", "hyperv-prep", "--status"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(ExitCleanly())
|
|
Expect(session.OutputToString()).To(ContainSubstring("Network"))
|
|
Expect(session.OutputToString()).To(ContainSubstring("Events"))
|
|
Expect(session.OutputToString()).To(ContainSubstring("Fileserver"))
|
|
|
|
// Reset the entries to clean up
|
|
session = podmanTest.Podman([]string{"system", "hyperv-prep", "--reset", "--force"})
|
|
session.WaitWithDefaultTimeout()
|
|
Expect(session).Should(ExitCleanly())
|
|
Expect(session.OutputToString()).To(ContainSubstring("Successfully removed"))
|
|
})
|
|
})
|
|
|
|
func isCurrentUserHyperVAdmin() bool {
|
|
u, err := user.Current()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
out, err := exec.Command("powershell", "-NoProfile", "-Command",
|
|
`Get-LocalGroupMember -Name "Hyper-V Administrators"`).Output()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
for line := range strings.SplitSeq(string(out), "\n") {
|
|
if strings.Contains(line, u.Username) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|