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 <phrdina@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Pavel Hrdina 2017-07-21 14:24:51 +02:00
parent 731cfd5fe8
commit 13554a9e7f
5 changed files with 167 additions and 171 deletions

View File

@ -117,38 +117,7 @@ fillAllCaps(virDomainCapsPtr domCaps)
#if WITH_QEMU #if WITH_QEMU
# include "testutilsqemu.h" # include "testutilsqemu.h"
# include "testutilshostcpus.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,
};
static int static int
fakeHostCPU(virCapsPtr caps, fakeHostCPU(virCapsPtr caps,
@ -156,32 +125,14 @@ fakeHostCPU(virCapsPtr caps,
{ {
virCPUDefPtr cpu; virCPUDefPtr cpu;
switch (arch) { if (!(cpu = testUtilsHostCpusGetDefForArch(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:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"cannot fake host CPU for arch %s", "cannot fake host CPU for arch %s",
virArchToString(arch)); virArchToString(arch));
return -1; return -1;
} }
if (!(caps->host.cpu = virCPUDefCopy(cpu))) qemuTestSetHostCPU(caps, cpu);
return -1;
return 0; return 0;
} }

View File

@ -16,20 +16,23 @@
#include <config.h> #include <config.h>
#include "internal.h" #include <stdlib.h>
#include "conf/cpu_conf.h"
#include "cpu/cpu.h"
#include "qemu/qemu_capabilities.h" #include "qemu/qemu_capabilities.h"
#define __QEMU_CAPSPRIV_H_ALLOW__ #define __QEMU_CAPSPRIV_H_ALLOW__
#include "qemu/qemu_capspriv.h" #include "qemu/qemu_capspriv.h"
#undef __QEMU_CAPSPRIV_H_ALLOW__ #undef __QEMU_CAPSPRIV_H_ALLOW__
#include "testutilshostcpus.h"
virCPUDefPtr virCPUDefPtr
virQEMUCapsProbeHostCPUForEmulator(virCapsPtr caps, virQEMUCapsProbeHostCPUForEmulator(virCapsPtr caps ATTRIBUTE_UNUSED,
virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED, virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED,
virDomainVirtType type ATTRIBUTE_UNUSED) virDomainVirtType type ATTRIBUTE_UNUSED)
{ {
if (!caps || !caps->host.cpu || !caps->host.cpu->model) const char *model = getenv("VIR_TEST_MOCK_FAKE_HOST_CPU");
return NULL;
return virCPUDefCopy(caps->host.cpu); return testUtilsHostCpusGetDefForModel(model);
} }

148
tests/testutilshostcpus.h Normal file
View File

@ -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;
}

View File

@ -3,6 +3,7 @@
# include <stdlib.h> # include <stdlib.h>
# include "testutilsqemu.h" # include "testutilsqemu.h"
# include "testutilshostcpus.h"
# include "testutils.h" # include "testutils.h"
# include "viralloc.h" # include "viralloc.h"
# include "cpu_conf.h" # include "cpu_conf.h"
@ -19,91 +20,6 @@ virCPUDefPtr cpuHaswell;
virCPUDefPtr cpuPower8; virCPUDefPtr cpuPower8;
virCPUDefPtr cpuPower9; 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 { typedef enum {
TEST_UTILS_QEMU_BIN_I686, TEST_UTILS_QEMU_BIN_I686,
TEST_UTILS_QEMU_BIN_X86_64, TEST_UTILS_QEMU_BIN_X86_64,
@ -557,8 +473,13 @@ qemuTestSetHostCPU(virCapsPtr caps,
cpu = cpuPower8; cpu = cpuPower8;
} }
if (cpu) if (cpu) {
caps->host.arch = cpu->arch; 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; caps->host.cpu = cpu;
} }

View File

@ -4,36 +4,9 @@
#include <stdlib.h> #include <stdlib.h>
#include "testutilsxen.h" #include "testutilsxen.h"
#include "testutilshostcpus.h"
#include "domain_conf.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) virCapsPtr testXenCapsInit(void)
{ {
struct utsname utsname; struct utsname utsname;