From 2b453f88b64c269dc710869f2ca724ee0bd50eb0 Mon Sep 17 00:00:00 2001 From: Nitesh Konkar Date: Mon, 20 May 2019 22:03:10 +0530 Subject: [PATCH] vc:Execute TestQemuPPC64leMemoryTopology depending on qemu version Set qemu major/minor version when running unit test TestQemuPPC64leMemoryTopology on ppc64le & execute the unit test accordingly. Fixes: #1308 Signed-off-by: Nitesh Konkar niteshkonkar@in.ibm.com --- virtcontainers/qemu_ppc64le_test.go | 37 ++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/virtcontainers/qemu_ppc64le_test.go b/virtcontainers/qemu_ppc64le_test.go index ddb25fc006..c6e7a752a5 100644 --- a/virtcontainers/qemu_ppc64le_test.go +++ b/virtcontainers/qemu_ppc64le_test.go @@ -7,12 +7,17 @@ package virtcontainers import ( "fmt" + "os/exec" + "regexp" + "strconv" "testing" govmmQemu "github.com/intel/govmm/qemu" "github.com/stretchr/testify/assert" ) +var qemuVersionArgs = "--version" + func newTestQemu(machineType string) qemuArch { config := HypervisorConfig{ HypervisorMachineType: machineType, @@ -34,6 +39,29 @@ func TestQemuPPC64leCPUModel(t *testing.T) { assert.Equal(expectedOut, model) } +func getQemuVersion() (qemuMajorVersion int, qemuMinorVersion int) { + + cmd := exec.Command(defaultQemuPath, qemuVersionArgs) + additionalEnv := "LANG=C" + cmd.Env = append(cmd.Env, additionalEnv) + out, err := cmd.Output() + if err != nil { + fmt.Errorf("Could not execute command %s %s", defaultQemuPath, qemuVersionArgs) + } + + re := regexp.MustCompile("[0-9]+") + qVer := re.FindAllString(string(out), -1) + + qMajor, err := strconv.Atoi(qVer[0]) + qMinor, err1 := strconv.Atoi(qVer[1]) + + if err != nil || err1 != nil { + fmt.Errorf("Could not convert string to int") + } + + return qMajor, qMinor +} + func TestQemuPPC64leMemoryTopology(t *testing.T) { assert := assert.New(t) ppc64le := newTestQemu(QemuPseries) @@ -42,12 +70,19 @@ func TestQemuPPC64leMemoryTopology(t *testing.T) { hostMem := uint64(1024) mem := uint64(120) slots := uint8(10) + + qemuMajorVersion, qemuMinorVersion = getQemuVersion() + m := ppc64le.memoryTopology(mem, hostMem, slots) + + if qemuMajorVersion <= 2 && qemuMinorVersion < 10 { + hostMem = uint64(defaultMemMaxPPC64le) + } + expectedMemory := govmmQemu.Memory{ Size: fmt.Sprintf("%dM", mem), Slots: slots, MaxMem: fmt.Sprintf("%dM", hostMem+uint64(memoryOffset)), } - m := ppc64le.memoryTopology(mem, hostMem, slots) assert.Equal(expectedMemory, m) }