mirror of
				https://github.com/kata-containers/kata-containers.git
				synced 2025-11-04 03:29:55 +00:00 
			
		
		
		
	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>
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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)
 | 
						|
	}
 | 
						|
}
 |