mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-21 16:24:22 +01:00
qemu: Detect and fail a bad machine type earlier
Currently, newQemuArch() doesn't return an error. So, if passed an invalid machine type, it will return a technically valid, but unusable qemuArch object, which will probably fail with other errors shortly down the track. Change this, to more cleanly fail the newQemuArch itself, letting us detect a bad machine type earlier. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
@@ -22,35 +22,36 @@ func qemuConfig(machineType string) HypervisorConfig {
|
||||
}
|
||||
}
|
||||
|
||||
func newTestQemu(machineType string) qemuArch {
|
||||
func newTestQemu(assert *assert.Assertions, machineType string) qemuArch {
|
||||
config := qemuConfig(machineType)
|
||||
return newQemuArch(config)
|
||||
arch, err := newQemuArch(config)
|
||||
assert.NoError(err)
|
||||
return arch
|
||||
}
|
||||
|
||||
func TestQemuAmd64BadMachineType(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
amd64 := newTestQemu("no-such-machine-type")
|
||||
amd64.bridges(5)
|
||||
bridges := amd64.getBridges()
|
||||
assert.Nil(bridges)
|
||||
config := qemuConfig("no-such-machine-type")
|
||||
_, err := newQemuArch(config)
|
||||
assert.Error(err)
|
||||
}
|
||||
|
||||
func TestQemuAmd64Capabilities(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
amd64 := newTestQemu(QemuPC)
|
||||
amd64 := newTestQemu(assert, QemuPC)
|
||||
caps := amd64.capabilities()
|
||||
assert.True(caps.IsBlockDeviceHotplugSupported())
|
||||
|
||||
amd64 = newTestQemu(QemuQ35)
|
||||
amd64 = newTestQemu(assert, QemuQ35)
|
||||
caps = amd64.capabilities()
|
||||
assert.True(caps.IsBlockDeviceHotplugSupported())
|
||||
}
|
||||
|
||||
func TestQemuAmd64Bridges(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
amd64 := newTestQemu(QemuPC)
|
||||
amd64 := newTestQemu(assert, QemuPC)
|
||||
len := 5
|
||||
|
||||
amd64.bridges(uint32(len))
|
||||
@@ -64,7 +65,7 @@ func TestQemuAmd64Bridges(t *testing.T) {
|
||||
assert.NotNil(b.Devices)
|
||||
}
|
||||
|
||||
amd64 = newTestQemu(QemuQ35)
|
||||
amd64 = newTestQemu(assert, QemuQ35)
|
||||
amd64.bridges(uint32(len))
|
||||
bridges = amd64.getBridges()
|
||||
assert.Len(bridges, len)
|
||||
@@ -79,7 +80,7 @@ func TestQemuAmd64Bridges(t *testing.T) {
|
||||
|
||||
func TestQemuAmd64CPUModel(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
amd64 := newTestQemu(QemuPC)
|
||||
amd64 := newTestQemu(assert, QemuPC)
|
||||
|
||||
expectedOut := defaultCPUModel
|
||||
model := amd64.cpuModel()
|
||||
@@ -101,7 +102,7 @@ func TestQemuAmd64CPUModel(t *testing.T) {
|
||||
|
||||
func TestQemuAmd64MemoryTopology(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
amd64 := newTestQemu(QemuPC)
|
||||
amd64 := newTestQemu(assert, QemuPC)
|
||||
memoryOffset := 1024
|
||||
|
||||
hostMem := uint64(100)
|
||||
@@ -135,7 +136,8 @@ func TestQemuAmd64AppendImage(t *testing.T) {
|
||||
cfg := qemuConfig(QemuPC)
|
||||
cfg.ImagePath = f.Name()
|
||||
cfg.DisableImageNvdimm = false
|
||||
amd64 := newQemuArch(cfg)
|
||||
amd64, err := newQemuArch(cfg)
|
||||
assert.NoError(err)
|
||||
for _, m := range amd64.(*qemuAmd64).supportedQemuMachines {
|
||||
assert.Contains(m.Options, qemuNvdimmOption)
|
||||
}
|
||||
@@ -159,7 +161,8 @@ func TestQemuAmd64AppendImage(t *testing.T) {
|
||||
assert.Equal(len(supportedQemuMachines), copy(supportedQemuMachines, machinesCopy))
|
||||
|
||||
cfg.DisableImageNvdimm = true
|
||||
amd64 = newQemuArch(cfg)
|
||||
amd64, err = newQemuArch(cfg)
|
||||
assert.NoError(err)
|
||||
for _, m := range amd64.(*qemuAmd64).supportedQemuMachines {
|
||||
assert.NotContains(m.Options, qemuNvdimmOption)
|
||||
}
|
||||
@@ -185,7 +188,7 @@ func TestQemuAmd64AppendBridges(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
// check PC
|
||||
amd64 := newTestQemu(QemuPC)
|
||||
amd64 := newTestQemu(assert, QemuPC)
|
||||
|
||||
amd64.bridges(1)
|
||||
bridges := amd64.getBridges()
|
||||
@@ -208,7 +211,7 @@ func TestQemuAmd64AppendBridges(t *testing.T) {
|
||||
assert.Equal(expectedOut, devices)
|
||||
|
||||
// Check Q35
|
||||
amd64 = newTestQemu(QemuQ35)
|
||||
amd64 = newTestQemu(assert, QemuQ35)
|
||||
|
||||
amd64.bridges(1)
|
||||
bridges = amd64.getBridges()
|
||||
@@ -237,7 +240,8 @@ func TestQemuAmd64WithInitrd(t *testing.T) {
|
||||
|
||||
cfg := qemuConfig(QemuPC)
|
||||
cfg.InitrdPath = "dummy-initrd"
|
||||
amd64 := newQemuArch(cfg)
|
||||
amd64, err := newQemuArch(cfg)
|
||||
assert.NoError(err)
|
||||
|
||||
for _, m := range amd64.(*qemuAmd64).supportedQemuMachines {
|
||||
assert.NotContains(m.Options, qemuNvdimmOption)
|
||||
@@ -249,7 +253,8 @@ func TestQemuAmd64Iommu(t *testing.T) {
|
||||
|
||||
config := qemuConfig(QemuQ35)
|
||||
config.IOMMU = true
|
||||
qemu := newQemuArch(config)
|
||||
qemu, err := newQemuArch(config)
|
||||
assert.NoError(err)
|
||||
|
||||
p := qemu.kernelParameters(false)
|
||||
assert.Contains(p, Param{"intel_iommu", "on"})
|
||||
|
||||
Reference in New Issue
Block a user