On 05/10/2016 08:46 AM, Andrea Bolognani wrote:
Now that we choose the GIC version based on hardware features when
no <gic/> element has been provided, we need a way to fake the GIC
capabilities of the host.
Update the qemuxml2argv and qemuxml2xml tests to allow this.
---
tests/qemuxml2argvtest.c | 77 ++++++++++++++++++-----
tests/qemuxml2xmltest.c | 159 ++++++++++++++++++++++++++++-------------------
2 files changed, 159 insertions(+), 77 deletions(-)
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index e41444d..b081634 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -34,6 +34,13 @@
static const char *abs_top_srcdir;
static virQEMUDriver driver;
+enum {
+ GIC_NONE = 0,
+ GIC_V2,
+ GIC_V3,
+ GIC_BOTH,
+};
+
static unsigned char *
fakeSecretGetValue(virSecretPtr obj ATTRIBUTE_UNUSED,
size_t *value_size,
@@ -452,6 +459,49 @@ testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
static int
+testPrepareExtraFlags(struct testInfo *info,
+ bool skipLegacyCPUs,
+ int gic)
+{
+ virGICCapability *gicCapabilities = NULL;
+ size_t ngicCapabilities = 0;
+ int ret = -1;
+
+ if (!(info->extraFlags = virQEMUCapsNew()))
+ goto out;
+
+ if (testAddCPUModels(info->extraFlags, skipLegacyCPUs) < 0)
+ goto out;
+
+ if (VIR_ALLOC_N(gicCapabilities, 2) < 0)
+ goto out;
+
+# define IMPL_BOTH \
+ VIR_GIC_IMPLEMENTATION_KERNEL|VIR_GIC_IMPLEMENTATION_EMULATED
+
+ if (gic & GIC_V2) {
+ gicCapabilities[ngicCapabilities].version = VIR_GIC_VERSION_2;
+ gicCapabilities[ngicCapabilities].implementation = IMPL_BOTH;
+ ngicCapabilities++;
+ }
+ if (gic & GIC_V3) {
+ gicCapabilities[ngicCapabilities].version = VIR_GIC_VERSION_3;
+ gicCapabilities[ngicCapabilities].implementation = IMPL_BOTH;
+ ngicCapabilities++;
+ }
+
+# undef IMPL_BOTH
+
+ virQEMUCapsSetGICCapabilities(info->extraFlags,
+ gicCapabilities, ngicCapabilities);
+
+ ret = 0;
+
+ out:
+ return ret;
+}
Can this logic be shared in a testutilsqemu.c function, rather than duplicated
across both test files?
- Cole