tests/cputest.c | 70 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 21 deletions(-)
Some tests require JSON_MODELS to be parsed into qemuCaps and applied
when computing CPU models and such test cannot succeed if QEMU driver is
disabled. Let's mark the tests with JSON_MODELS_REQUIRED and skip the
appropriate parts if building without QEMU.
On the other hand, CPU tests with JSON_MODELS should succeed even if
model definitions from QEMU are not parsed and applied. Let's explicitly
test this by repeating the tests without JSON_MODELS set.
This fixes the build with QEMU driver disabled, e.g., on some
architectures on RHEL/CentOS.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
tests/cputest.c | 70 ++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 49 insertions(+), 21 deletions(-)
diff --git a/tests/cputest.c b/tests/cputest.c
index 5d1fe7d99..8e94c2152 100644
--- a/tests/cputest.c
+++ b/tests/cputest.c
@@ -464,6 +464,7 @@ typedef enum {
JSON_NONE,
JSON_HOST,
JSON_MODELS,
+ JSON_MODELS_REQUIRED,
} cpuTestCPUIDJson;
#if WITH_QEMU && WITH_YAJL
@@ -491,7 +492,8 @@ cpuTestMakeQEMUCaps(const struct data *data)
goto error;
virQEMUCapsSet(qemuCaps, QEMU_CAPS_KVM);
- if (data->flags == JSON_MODELS)
+ if (data->flags == JSON_MODELS ||
+ data->flags == JSON_MODELS_REQUIRED)
virQEMUCapsSet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS);
virQEMUCapsSetArch(qemuCaps, data->arch);
@@ -517,32 +519,41 @@ cpuTestMakeQEMUCaps(const struct data *data)
}
-static virDomainCapsCPUModelsPtr
-cpuTestGetCPUModels(const struct data *data)
+static int
+cpuTestGetCPUModels(const struct data *data,
+ virDomainCapsCPUModelsPtr *models)
{
- virDomainCapsCPUModelsPtr models = NULL;
virQEMUCapsPtr qemuCaps;
- if (data->flags != JSON_MODELS)
- return NULL;
+ *models = NULL;
+
+ if (data->flags != JSON_MODELS &&
+ data->flags != JSON_MODELS_REQUIRED)
+ return 0;
if (!(qemuCaps = cpuTestMakeQEMUCaps(data)))
- return NULL;
+ return -1;
- models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM);
- virObjectRef(models);
+ *models = virQEMUCapsGetCPUDefinitions(qemuCaps, VIR_DOMAIN_VIRT_KVM);
+ virObjectRef(*models);
virObjectUnref(qemuCaps);
- return models;
+ return 0;
}
#else /* if WITH_QEMU && WITH_YAJL */
-static virDomainCapsCPUModelsPtr
-cpuTestGetCPUModels(const struct data *data ATTRIBUTE_UNUSED)
+static int
+cpuTestGetCPUModels(const struct data *data,
+ virDomainCapsCPUModelsPtr *models)
{
- return NULL;
+ *models = NULL;
+
+ if (data->flags == JSON_MODELS_REQUIRED)
+ return EXIT_AM_SKIP;
+
+ return 0;
}
#endif
@@ -580,8 +591,15 @@ cpuTestCPUID(bool guest, const void *arg)
cpu->type = VIR_CPU_TYPE_HOST;
}
- if (guest)
- models = cpuTestGetCPUModels(data);
+ if (guest) {
+ int rc;
+
+ rc = cpuTestGetCPUModels(data, &models);
+ if (rc != 0) {
+ ret = rc;
+ goto cleanup;
+ }
+ }
if (cpuDecode(cpu, hostData, models) < 0)
goto cleanup;
@@ -755,11 +773,17 @@ cpuTestUpdateLive(const void *arg)
virDomainCapsCPUModelPtr hvModel;
char **blockers = NULL;
virDomainCapsCPUUsable usable = VIR_DOMCAPS_CPU_USABLE_UNKNOWN;
+ int rc;
if (!(models = virDomainCapsCPUModelsNew(0)))
goto cleanup;
- hvModels = cpuTestGetCPUModels(data);
+ rc = cpuTestGetCPUModels(data, &hvModels);
+ if (rc != 0) {
+ ret = rc;
+ goto cleanup;
+ }
+
hvModel = virDomainCapsCPUModelsGet(hvModels, expected->model);
if (hvModel) {
@@ -969,15 +993,19 @@ mymain(void)
host, cpu, models, 0, result)
#if WITH_QEMU && WITH_YAJL
-# define DO_TEST_CPUID_JSON(arch, host, json) \
+# define DO_TEST_JSON(arch, host, json) \
do { \
+ if (json == JSON_MODELS) { \
+ DO_TEST(arch, cpuTestGuestCPUID, host, host, \
+ NULL, NULL, 0, 0); \
+ } \
if (json != JSON_NONE) { \
DO_TEST(arch, cpuTestJSONCPUID, host, host, \
NULL, NULL, json, 0); \
} \
} while (0)
#else
-# define DO_TEST_CPUID_JSON(arch, host, json)
+# define DO_TEST_JSON(arch, host, json)
#endif
#define DO_TEST_CPUID(arch, host, json) \
@@ -986,7 +1014,7 @@ mymain(void)
NULL, NULL, 0, 0); \
DO_TEST(arch, cpuTestGuestCPUID, host, host, \
NULL, NULL, json, 0); \
- DO_TEST_CPUID_JSON(arch, host, json); \
+ DO_TEST_JSON(arch, host, json); \
if (json != JSON_NONE) { \
DO_TEST(arch, cpuTestUpdateLive, host, host, \
NULL, NULL, json, 0); \
@@ -1126,7 +1154,7 @@ mymain(void)
DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-4670T", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i5-6600", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-2600", JSON_HOST);
- DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-2600-xsaveopt", JSON_MODELS);
+ DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-2600-xsaveopt", JSON_MODELS_REQUIRED);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-3520M", JSON_NONE);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-3740QM", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Core-i7-3770", JSON_HOST);
@@ -1150,7 +1178,7 @@ mymain(void)
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2630", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E5-2650", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4820", JSON_HOST);
- DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4830", JSON_MODELS);
+ DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-4830", JSON_MODELS_REQUIRED);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-E7-8890", JSON_MODELS);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-Gold-6148", JSON_HOST);
DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-W3520", JSON_HOST);
--
2.14.3
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On Wed, Nov 01, 2017 at 06:57:42PM +0100, Jiri Denemark wrote: > Some tests require JSON_MODELS to be parsed into qemuCaps and applied > when computing CPU models and such test cannot succeed if QEMU driver is > disabled. Let's mark the tests with JSON_MODELS_REQUIRED and skip the > appropriate parts if building without QEMU. > > On the other hand, CPU tests with JSON_MODELS should succeed even if > model definitions from QEMU are not parsed and applied. Let's explicitly > test this by repeating the tests without JSON_MODELS set. > > This fixes the build with QEMU driver disabled, e.g., on some > architectures on RHEL/CentOS. > > Signed-off-by: Jiri Denemark <jdenemar@redhat.com> > --- > tests/cputest.c | 70 ++++++++++++++++++++++++++++++++++++++++----------------- > 1 file changed, 49 insertions(+), 21 deletions(-) > > diff --git a/tests/cputest.c b/tests/cputest.c > index 5d1fe7d99..8e94c2152 100644 > --- a/tests/cputest.c > +++ b/tests/cputest.c > @@ -464,6 +464,7 @@ typedef enum { > JSON_NONE, > JSON_HOST, > JSON_MODELS, > + JSON_MODELS_REQUIRED, > } cpuTestCPUIDJson; After discussion on IRC please describe when JSON_MODELS_REQUIRED should be used, preferably in the code, commit message is good as well but if the code gets moved, it's easier to have it in the code. Since this fixes only tests I would say SFF. Reviewed-by: Pavel Hrdina <phrdina@redhat.com> -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On Thu, Nov 02, 2017 at 10:38:52 +0100, Pavel Hrdina wrote: > On Wed, Nov 01, 2017 at 06:57:42PM +0100, Jiri Denemark wrote: > > Some tests require JSON_MODELS to be parsed into qemuCaps and applied > > when computing CPU models and such test cannot succeed if QEMU driver is > > disabled. Let's mark the tests with JSON_MODELS_REQUIRED and skip the > > appropriate parts if building without QEMU. > > > > On the other hand, CPU tests with JSON_MODELS should succeed even if > > model definitions from QEMU are not parsed and applied. Let's explicitly > > test this by repeating the tests without JSON_MODELS set. > > > > This fixes the build with QEMU driver disabled, e.g., on some > > architectures on RHEL/CentOS. > > > > Signed-off-by: Jiri Denemark <jdenemar@redhat.com> > > --- > > tests/cputest.c | 70 ++++++++++++++++++++++++++++++++++++++++----------------- > > 1 file changed, 49 insertions(+), 21 deletions(-) > > > > diff --git a/tests/cputest.c b/tests/cputest.c > > index 5d1fe7d99..8e94c2152 100644 > > --- a/tests/cputest.c > > +++ b/tests/cputest.c > > @@ -464,6 +464,7 @@ typedef enum { > > JSON_NONE, > > JSON_HOST, > > JSON_MODELS, > > + JSON_MODELS_REQUIRED, > > } cpuTestCPUIDJson; > > After discussion on IRC please describe when JSON_MODELS_REQUIRED should > be used, preferably in the code, commit message is good as well but if > the code gets moved, it's easier to have it in the code. Done and pushed, thanks. Jirka -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2025 Red Hat, Inc.