From 13554a9e7f4e05ffd968e0f47e4f763cc157e4a8 Mon Sep 17 00:00:00 2001 From: Pavel Hrdina Date: Fri, 21 Jul 2017 14:24:51 +0200 Subject: [PATCH] tests: rewrite host CPU mocking Move all the host CPU data into a separate file and rewrite qemucpumock to not use passed @caps. This is preparation for following patch which will replace virCaps argument with virArch. Signed-off-by: Pavel Hrdina Reviewed-by: Jiri Denemark --- tests/domaincapstest.c | 55 +------------- tests/qemucpumock.c | 13 ++-- tests/testutilshostcpus.h | 148 ++++++++++++++++++++++++++++++++++++++ tests/testutilsqemu.c | 93 ++---------------------- tests/testutilsxen.c | 29 +------- 5 files changed, 167 insertions(+), 171 deletions(-) create mode 100644 tests/testutilshostcpus.h diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index 78ed4109a2..2719473244 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -117,38 +117,7 @@ fillAllCaps(virDomainCapsPtr domCaps) #if WITH_QEMU # include "testutilsqemu.h" - -static virCPUDef aarch64Cpu = { - .sockets = 1, - .cores = 1, - .threads = 1, -}; - -static virCPUDef ppc64leCpu = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_PPC64LE, - .model = (char *) "POWER8", - .sockets = 1, - .cores = 1, - .threads = 1, -}; - -static virCPUDef x86Cpu = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_X86_64, - .model = (char *) "Broadwell", - .sockets = 1, - .cores = 1, - .threads = 1, -}; - -static virCPUDef s390Cpu = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_S390X, - .sockets = 1, - .cores = 1, - .threads = 1, -}; +# include "testutilshostcpus.h" static int fakeHostCPU(virCapsPtr caps, @@ -156,32 +125,14 @@ fakeHostCPU(virCapsPtr caps, { virCPUDefPtr cpu; - switch (arch) { - case VIR_ARCH_AARCH64: - cpu = &aarch64Cpu; - break; - - case VIR_ARCH_PPC64LE: - cpu = &ppc64leCpu; - break; - - case VIR_ARCH_X86_64: - cpu = &x86Cpu; - break; - - case VIR_ARCH_S390X: - cpu = &s390Cpu; - break; - - default: + if (!(cpu = testUtilsHostCpusGetDefForArch(arch))) { virReportError(VIR_ERR_INTERNAL_ERROR, "cannot fake host CPU for arch %s", virArchToString(arch)); return -1; } - if (!(caps->host.cpu = virCPUDefCopy(cpu))) - return -1; + qemuTestSetHostCPU(caps, cpu); return 0; } diff --git a/tests/qemucpumock.c b/tests/qemucpumock.c index f0a113ffce..38827584ea 100644 --- a/tests/qemucpumock.c +++ b/tests/qemucpumock.c @@ -16,20 +16,23 @@ #include -#include "internal.h" +#include + +#include "conf/cpu_conf.h" +#include "cpu/cpu.h" #include "qemu/qemu_capabilities.h" #define __QEMU_CAPSPRIV_H_ALLOW__ #include "qemu/qemu_capspriv.h" #undef __QEMU_CAPSPRIV_H_ALLOW__ +#include "testutilshostcpus.h" virCPUDefPtr -virQEMUCapsProbeHostCPUForEmulator(virCapsPtr caps, +virQEMUCapsProbeHostCPUForEmulator(virCapsPtr caps ATTRIBUTE_UNUSED, virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED, virDomainVirtType type ATTRIBUTE_UNUSED) { - if (!caps || !caps->host.cpu || !caps->host.cpu->model) - return NULL; + const char *model = getenv("VIR_TEST_MOCK_FAKE_HOST_CPU"); - return virCPUDefCopy(caps->host.cpu); + return testUtilsHostCpusGetDefForModel(model); } diff --git a/tests/testutilshostcpus.h b/tests/testutilshostcpus.h new file mode 100644 index 0000000000..f0ab23b962 --- /dev/null +++ b/tests/testutilshostcpus.h @@ -0,0 +1,148 @@ +#include "conf/cpu_conf.h" +#include "internal.h" +#include "util/virarch.h" + +static virCPUFeatureDef cpuDefaultFeatures[] = { + { (char *) "ds", -1 }, + { (char *) "acpi", -1 }, + { (char *) "ss", -1 }, + { (char *) "ht", -1 }, + { (char *) "tm", -1 }, + { (char *) "pbe", -1 }, + { (char *) "ds_cpl", -1 }, + { (char *) "vmx", -1 }, + { (char *) "est", -1 }, + { (char *) "tm2", -1 }, + { (char *) "cx16", -1 }, + { (char *) "xtpr", -1 }, + { (char *) "lahf_lm", -1 }, +}; +static virCPUDef cpuDefaultData = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_X86_64, + .model = (char *) "core2duo", + .vendor = (char *) "Intel", + .sockets = 1, + .cores = 2, + .threads = 1, + .nfeatures = ARRAY_CARDINALITY(cpuDefaultFeatures), + .nfeatures_max = ARRAY_CARDINALITY(cpuDefaultFeatures), + .features = cpuDefaultFeatures, +}; + +static virCPUFeatureDef cpuHaswellFeatures[] = { + { (char *) "vme", -1 }, + { (char *) "ds", -1 }, + { (char *) "acpi", -1 }, + { (char *) "ss", -1 }, + { (char *) "ht", -1 }, + { (char *) "tm", -1 }, + { (char *) "pbe", -1 }, + { (char *) "dtes64", -1 }, + { (char *) "monitor", -1 }, + { (char *) "ds_cpl", -1 }, + { (char *) "vmx", -1 }, + { (char *) "smx", -1 }, + { (char *) "est", -1 }, + { (char *) "tm2", -1 }, + { (char *) "xtpr", -1 }, + { (char *) "pdcm", -1 }, + { (char *) "osxsave", -1 }, + { (char *) "f16c", -1 }, + { (char *) "rdrand", -1 }, + { (char *) "cmt", -1 }, + { (char *) "pdpe1gb", -1 }, + { (char *) "abm", -1 }, + { (char *) "invtsc", -1 }, + { (char *) "lahf_lm", -1 }, +}; +static virCPUDef cpuHaswellData = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_X86_64, + .model = (char *) "Haswell", + .vendor = (char *) "Intel", + .sockets = 1, + .cores = 2, + .threads = 2, + .nfeatures = ARRAY_CARDINALITY(cpuHaswellFeatures), + .nfeatures_max = ARRAY_CARDINALITY(cpuHaswellFeatures), + .features = cpuHaswellFeatures, +}; + +static virCPUDef cpuBroadwellData = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_X86_64, + .model = (char *) "Broadwell", + .sockets = 1, + .cores = 2, + .threads = 2, +}; + +static virCPUDef cpuPower8Data = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_PPC64, + .model = (char *) "POWER8", + .sockets = 1, + .cores = 8, + .threads = 8, +}; + +static virCPUDef cpuPower9Data = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_PPC64, + .model = (char *) "POWER9", + .sockets = 1, + .cores = 16, + .threads = 1, +}; + +static virCPUDef cpuAarch64Data = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_AARCH64, + .sockets = 1, + .cores = 4, + .threads = 1, +}; + +static virCPUDef cpuS390Data = { + .type = VIR_CPU_TYPE_HOST, + .arch = VIR_ARCH_S390X, + .sockets = 2, + .cores = 1, + .threads = 1, +}; + +static inline virCPUDefPtr +testUtilsHostCpusGetDefForModel(const char *model) +{ + if (!model) + return NULL; + + if (STREQ(model, "core2duo")) + return virCPUDefCopy(&cpuDefaultData); + else if (STREQ(model, "Haswell")) + return virCPUDefCopy(&cpuHaswellData); + else if (STREQ(model, "Broadwell")) + return virCPUDefCopy(&cpuBroadwellData); + else if (STREQ(model, "POWER8")) + return virCPUDefCopy(&cpuPower8Data); + else if (STREQ(model, "POWER9")) + return virCPUDefCopy(&cpuPower9Data); + + return NULL; +} + +static inline virCPUDefPtr +testUtilsHostCpusGetDefForArch(virArch arch) +{ + if (ARCH_IS_X86(arch)) + return virCPUDefCopy(&cpuBroadwellData); + else if (ARCH_IS_PPC64(arch)) + return virCPUDefCopy(&cpuPower8Data); + else if (ARCH_IS_S390(arch)) + return virCPUDefCopy(&cpuS390Data); + else if (arch == VIR_ARCH_AARCH64) + return virCPUDefCopy(&cpuAarch64Data); + + return NULL; +} diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 88e11ba14a..67b21c9893 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -3,6 +3,7 @@ # include # include "testutilsqemu.h" +# include "testutilshostcpus.h" # include "testutils.h" # include "viralloc.h" # include "cpu_conf.h" @@ -19,91 +20,6 @@ virCPUDefPtr cpuHaswell; virCPUDefPtr cpuPower8; virCPUDefPtr cpuPower9; -static virCPUFeatureDef cpuDefaultFeatures[] = { - { (char *) "ds", -1 }, - { (char *) "acpi", -1 }, - { (char *) "ss", -1 }, - { (char *) "ht", -1 }, - { (char *) "tm", -1 }, - { (char *) "pbe", -1 }, - { (char *) "ds_cpl", -1 }, - { (char *) "vmx", -1 }, - { (char *) "est", -1 }, - { (char *) "tm2", -1 }, - { (char *) "cx16", -1 }, - { (char *) "xtpr", -1 }, - { (char *) "lahf_lm", -1 }, -}; -static virCPUDef cpuDefaultData = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_X86_64, - .model = (char *) "core2duo", - .vendor = (char *) "Intel", - .sockets = 1, - .cores = 2, - .threads = 1, - .nfeatures = ARRAY_CARDINALITY(cpuDefaultFeatures), - .nfeatures_max = ARRAY_CARDINALITY(cpuDefaultFeatures), - .features = cpuDefaultFeatures, -}; - -static virCPUFeatureDef cpuHaswellFeatures[] = { - { (char *) "vme", -1 }, - { (char *) "ds", -1 }, - { (char *) "acpi", -1 }, - { (char *) "ss", -1 }, - { (char *) "ht", -1 }, - { (char *) "tm", -1 }, - { (char *) "pbe", -1 }, - { (char *) "dtes64", -1 }, - { (char *) "monitor", -1 }, - { (char *) "ds_cpl", -1 }, - { (char *) "vmx", -1 }, - { (char *) "smx", -1 }, - { (char *) "est", -1 }, - { (char *) "tm2", -1 }, - { (char *) "xtpr", -1 }, - { (char *) "pdcm", -1 }, - { (char *) "osxsave", -1 }, - { (char *) "f16c", -1 }, - { (char *) "rdrand", -1 }, - { (char *) "cmt", -1 }, - { (char *) "pdpe1gb", -1 }, - { (char *) "abm", -1 }, - { (char *) "invtsc", -1 }, - { (char *) "lahf_lm", -1 }, -}; -static virCPUDef cpuHaswellData = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_X86_64, - .model = (char *) "Haswell", - .vendor = (char *) "Intel", - .sockets = 1, - .cores = 2, - .threads = 2, - .nfeatures = ARRAY_CARDINALITY(cpuHaswellFeatures), - .nfeatures_max = ARRAY_CARDINALITY(cpuHaswellFeatures), - .features = cpuHaswellFeatures, -}; - -static virCPUDef cpuPower8Data = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_PPC64, - .model = (char *) "POWER8", - .sockets = 1, - .cores = 8, - .threads = 8, -}; - -static virCPUDef cpuPower9Data = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_PPC64, - .model = (char *) "POWER9", - .sockets = 1, - .cores = 16, - .threads = 1, -}; - typedef enum { TEST_UTILS_QEMU_BIN_I686, TEST_UTILS_QEMU_BIN_X86_64, @@ -557,8 +473,13 @@ qemuTestSetHostCPU(virCapsPtr caps, cpu = cpuPower8; } - if (cpu) + if (cpu) { caps->host.arch = cpu->arch; + if (cpu->model) + setenv("VIR_TEST_MOCK_FAKE_HOST_CPU", cpu->model, 1); + else + unsetenv("VIR_TEST_MOCK_FAKE_HOST_CPU"); + } caps->host.cpu = cpu; } diff --git a/tests/testutilsxen.c b/tests/testutilsxen.c index c4fc1465e7..4328441b79 100644 --- a/tests/testutilsxen.c +++ b/tests/testutilsxen.c @@ -4,36 +4,9 @@ #include #include "testutilsxen.h" +#include "testutilshostcpus.h" #include "domain_conf.h" -static virCPUFeatureDef cpuDefaultFeatures[] = { - { (char *) "ds", -1 }, - { (char *) "acpi", -1 }, - { (char *) "ss", -1 }, - { (char *) "ht", -1 }, - { (char *) "tm", -1 }, - { (char *) "pbe", -1 }, - { (char *) "ds_cpl", -1 }, - { (char *) "vmx", -1 }, - { (char *) "est", -1 }, - { (char *) "tm2", -1 }, - { (char *) "cx16", -1 }, - { (char *) "xtpr", -1 }, - { (char *) "lahf_lm", -1 }, -}; -static virCPUDef cpuDefaultData = { - .type = VIR_CPU_TYPE_HOST, - .arch = VIR_ARCH_X86_64, - .model = (char *) "core2duo", - .vendor = (char *) "Intel", - .sockets = 1, - .cores = 2, - .threads = 1, - .nfeatures = ARRAY_CARDINALITY(cpuDefaultFeatures), - .nfeatures_max = ARRAY_CARDINALITY(cpuDefaultFeatures), - .features = cpuDefaultFeatures, -}; - virCapsPtr testXenCapsInit(void) { struct utsname utsname;