Files
kata-containers/virtcontainers/qemu_arm64_test.go
root 2d13c4653d test: add unit test for func MaxQemuVCPUs
we should add unit test for func MaxQemuVCPUS in qemu_amd64_test.go

Signed-off-by: Penny Zheng <penny.zheng@arm.com>
Signed-off-by: Wei Chen <Wei.Chen@arm.com>
2018-09-04 15:41:41 +08:00

106 lines
2.1 KiB
Go

// Copyright (c) 2018 IBM
//
// SPDX-License-Identifier: Apache-2.0
//
package virtcontainers
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"runtime"
"testing"
govmmQemu "github.com/intel/govmm/qemu"
"github.com/stretchr/testify/assert"
)
func newTestQemu(machineType string) qemuArch {
config := HypervisorConfig{
HypervisorMachineType: machineType,
}
return newQemuArch(config)
}
func TestQemuArm64CPUModel(t *testing.T) {
assert := assert.New(t)
arm64 := newTestQemu(virt)
expectedOut := defaultCPUModel
model := arm64.cpuModel()
assert.Equal(expectedOut, model)
arm64.enableNestingChecks()
expectedOut = defaultCPUModel + ",pmu=off"
model = arm64.cpuModel()
assert.Equal(expectedOut, model)
}
func TestQemuArm64MemoryTopology(t *testing.T) {
assert := assert.New(t)
arm64 := newTestQemu(virt)
memoryOffset := 1024
hostMem := uint64(1024)
mem := uint64(120)
expectedMemory := govmmQemu.Memory{
Size: fmt.Sprintf("%dM", mem),
Slots: defaultMemSlots,
MaxMem: fmt.Sprintf("%dM", hostMem+uint64(memoryOffset)),
}
m := arm64.memoryTopology(mem, hostMem)
assert.Equal(expectedMemory, m)
}
func TestMaxQemuVCPUs(t *testing.T) {
assert := assert.New(t)
type testData struct {
contents string
expectedResult uint32
}
data := []testData{
{"", uint32(runtime.NumCPU())},
{" 1: 0 0 GICv2 25 Level vgic \n", uint32(8)},
{" 1: 0 0 GICv3 25 Level vgic \n", uint32(123)},
{" 1: 0 0 GICv4 25 Level vgic \n", uint32(123)},
}
tmpdir, err := ioutil.TempDir("", "")
if err != nil {
panic(err)
}
defer os.RemoveAll(tmpdir)
savedGicProfile := gicProfile
testGicProfile := filepath.Join(tmpdir, "interrupts")
// override
gicProfile = testGicProfile
defer func() {
gicProfile = savedGicProfile
}()
savedHostGICVersion := hostGICVersion
defer func() {
hostGICVersion = savedHostGICVersion
}()
for _, d := range data {
err := ioutil.WriteFile(gicProfile, []byte(d.contents), os.FileMode(0640))
assert.NoError(err)
hostGICVersion = getHostGICVersion()
vCPUs := MaxQemuVCPUs()
assert.Equal(d.expectedResult, vCPUs)
}
}