diff --git a/virtcontainers/qemu_arm64_test.go b/virtcontainers/qemu_arm64_test.go index 17aaa5f7a3..a03065c10c 100644 --- a/virtcontainers/qemu_arm64_test.go +++ b/virtcontainers/qemu_arm64_test.go @@ -7,6 +7,10 @@ package virtcontainers import ( "fmt" + "io/ioutil" + "os" + "path/filepath" + "runtime" "testing" govmmQemu "github.com/intel/govmm/qemu" @@ -50,3 +54,53 @@ func TestQemuArm64MemoryTopology(t *testing.T) { 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) + } + +}