fake images: windows hyperv

this pr is a follow on to #27493.  it adds support for hyperv "fake"
images and suggests a benefit in terms of test speed.  for hyperv, we
create a generic 4MB vhdx and stick it into the temp dir.  this saves us
from any image copy or compression.

i also followed up on a few comments Paul made about using windows|unix
instead of each platform.

Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
Brent Baude
2025-11-11 14:39:45 -06:00
parent 1afe2ce6d3
commit d58dddee66
6 changed files with 60 additions and 29 deletions

View File

@@ -2,15 +2,44 @@ package e2e_test
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"strings"
"github.com/containers/libhvee/pkg/hypervctl"
"github.com/containers/podman/v6/pkg/machine/define"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega/gexec"
)
const podmanBinary = "../../../bin/windows/podman.exe"
var fakeImagePath string = ""
func initPlatform() {
switch testProvider.VMType().String() {
case define.HyperVVirt.String():
vmm := hypervctl.NewVirtualMachineManager()
name := fmt.Sprintf("podman-hyperv-%s.vhdx", randomString())
fullFileName := filepath.Join(tmpDir, name)
if err := vmm.CreateVhdxFile(fullFileName, 15*1024*1024); err != nil {
Fail(fmt.Sprintf("Failed to create file %s %q", fullFileName, err))
}
fakeImagePath = fullFileName
fmt.Println("Created fake disk image: " + fakeImagePath)
case define.WSLVirt.String():
default:
Fail(fmt.Sprintf("unknown Windows provider: %q", testProvider.VMType().String()))
}
}
func cleanupPlatform() {
if err := os.Remove(fakeImagePath); err != nil {
fmt.Printf("Failed to remove %s image: %q\n", fakeImagePath, err)
}
}
// pgrep emulates the pgrep linux command
func pgrep(n string) (string, error) {
// add filter to find the process and do no display a header
@@ -41,7 +70,17 @@ func runWslCommand(cmdArgs []string) (*machineSession, error) {
return &ms, nil
}
func (i *initMachine) withFakeImage(_ *machineTestBuilder) *initMachine {
i.image = mb.imagePath
// withFakeImage should be used in tests where the machine is
// initialized (or not) but never started. It is intended
// to speed up CI by not processing our large machine files.
func (i *initMachine) withFakeImage(mb *machineTestBuilder) *initMachine {
switch testProvider.VMType() {
case define.HyperVVirt:
i.image = fakeImagePath
case define.WSLVirt:
i.image = mb.imagePath
default:
Fail(fmt.Sprintf("unknown Windows provider: %q", testProvider.VMType().String()))
}
return i
}