fixes for pkg/machine/e2e on hyperv

some problems were found in machine tests on hyperv.

in the case of rootful, it is currently not implemented.  an issue #20092 has been
created for that problem.

there also seems to be a timezone issue between ignition and fcos right
now.  inquiries are in for that but no issue generated for that.  this
problem is not exclusive to hyperv by any means.

both of the above have been skipped or commented out.

otherwise, this fixes machine state reporting for consistency.

Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
Brent Baude
2023-09-21 14:06:59 -05:00
parent 935a6d1569
commit c66aa3b7bb
5 changed files with 43 additions and 11 deletions

View File

@ -46,7 +46,9 @@ const (
// Stopped indicates the vm has stopped. // Stopped indicates the vm has stopped.
Stopped Status = "stopped" Stopped Status = "stopped"
// Starting indicated the vm is in the process of starting // Starting indicated the vm is in the process of starting
Starting Status = "starting" Starting Status = "starting"
// Unknown means the state is not known
Unknown Status = "unknown"
DefaultMachineName string = "podman-machine-default" DefaultMachineName string = "podman-machine-default"
apiUpTimeout = 20 * time.Second apiUpTimeout = 20 * time.Second
) )

View File

@ -130,14 +130,19 @@ var _ = Describe("podman machine init", func() {
Expect(foundMemory).To(BeNumerically(">", 3800000)) Expect(foundMemory).To(BeNumerically(">", 3800000))
Expect(foundMemory).To(BeNumerically("<", 4200000)) Expect(foundMemory).To(BeNumerically("<", 4200000))
sshTimezone := sshMachine{} // TODO timezone setting is broken in FCOS rn. It is either ignition or a change in fedora.
timezoneSession, err := mb.setName(name).setCmd(sshTimezone.withSSHCommand([]string{"date"})).run() // sshTimezone := sshMachine{}
Expect(err).ToNot(HaveOccurred()) // timezoneSession, err := mb.setName(name).setCmd(sshTimezone.withSSHCommand([]string{"date"})).run()
Expect(timezoneSession).To(Exit(0)) // Expect(err).ToNot(HaveOccurred())
Expect(timezoneSession.outputToString()).To(ContainSubstring("HST")) // Expect(timezoneSession).To(Exit(0))
// Expect(timezoneSession.outputToString()).To(ContainSubstring("HST"))
}) })
It("machine init with volume", func() { It("machine init with volume", func() {
if testProvider.VMType() == machine.HyperVVirt {
Skip("volumes are not supported on hyperv yet")
}
tmpDir, err := os.MkdirTemp("", "") tmpDir, err := os.MkdirTemp("", "")
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
_, err = os.CreateTemp(tmpDir, "example") _, err = os.CreateTemp(tmpDir, "example")
@ -164,6 +169,10 @@ var _ = Describe("podman machine init", func() {
}) })
It("machine init rootless docker.sock check", func() { It("machine init rootless docker.sock check", func() {
if testProvider.VMType() == machine.HyperVVirt {
//https://github.com/containers/podman/issues/20092
Skip("rootless is broken with hyperv")
}
i := initMachine{} i := initMachine{}
name := randomString() name := randomString()
session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath)).run() session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath)).run()
@ -214,8 +223,9 @@ var _ = Describe("podman machine init", func() {
}) })
It("init with user mode networking ", func() { It("init with user mode networking ", func() {
SkipIfNotWindows("setting user mode networking is only honored on Windows") if testProvider.VMType() != machine.WSLVirt {
Skip("test is only supported by WSL")
}
i := new(initMachine) i := new(initMachine)
name := randomString() name := randomString()
session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath).withUserModeNetworking(true)).run() session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath).withUserModeNetworking(true)).run()

View File

@ -43,9 +43,11 @@ func TestMachine(t *testing.T) {
RunSpecs(t, "Podman Machine tests") RunSpecs(t, "Podman Machine tests")
} }
var _ = BeforeSuite(func() { var testProvider machine.VirtProvider
testProvider, err := provider.Get() var _ = BeforeSuite(func() {
var err error
testProvider, err = provider.Get()
if err != nil { if err != nil {
Fail("unable to create testProvider") Fail("unable to create testProvider")
} }

View File

@ -6,6 +6,7 @@ package hyperv
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"io/fs" "io/fs"
"os" "os"
"path/filepath" "path/filepath"
@ -284,3 +285,15 @@ func handlePrevError(e, prevErr error) error {
} }
return e return e
} }
func stateConversion(s hypervctl.EnabledState) (machine.Status, error) {
switch s {
case hypervctl.Enabled:
return machine.Running, nil
case hypervctl.Disabled:
return machine.Stopped, nil
case hypervctl.Starting:
return machine.Starting, nil
}
return machine.Unknown, fmt.Errorf("unknown state: %q", s.String())
}

View File

@ -283,6 +283,11 @@ func (m *HyperVMachine) Inspect() (*machine.InspectInfo, error) {
return nil, err return nil, err
} }
vmState, err := stateConversion(vm.State())
if err != nil {
return nil, err
}
return &machine.InspectInfo{ return &machine.InspectInfo{
ConfigPath: m.ConfigPath, ConfigPath: m.ConfigPath,
ConnectionInfo: machine.ConnectionConfig{}, ConnectionInfo: machine.ConnectionConfig{},
@ -300,7 +305,7 @@ func (m *HyperVMachine) Inspect() (*machine.InspectInfo, error) {
Memory: cfg.Hardware.Memory, Memory: cfg.Hardware.Memory,
}, },
SSHConfig: m.SSHConfig, SSHConfig: m.SSHConfig,
State: vm.State().String(), State: string(vmState),
Rootful: m.Rootful, Rootful: m.Rootful,
}, nil }, nil
} }