[RFC PATCH 18/43] qemuxml2argvtest: Parse 'arch' from XML early

Peter Krempa posted 43 patches 4 years, 10 months ago
There is a newer version of this series
[RFC PATCH 18/43] qemuxml2argvtest: Parse 'arch' from XML early
Posted by Peter Krempa 4 years, 10 months ago
If we want to provide correct (fake) caps already for the XML parser we
need to be able to parse the arch early so that we can properly
initialize the caps cache prior to calling the XML parser.

This patch adds code which parses the arch and updates the caps cache
prior to the parse step.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 tests/qemuxml2argvtest.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index aa6ae9bb4b..eb1bec88f2 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -353,13 +353,13 @@ testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)

 static int
 testUpdateQEMUCaps(const struct testQemuInfo *info,
-                   virDomainObjPtr vm,
+                   virArch arch,
                    virCapsPtr caps)
 {
     if (!caps)
         return -1;

-    virQEMUCapsSetArch(info->qemuCaps, vm->def->os.arch);
+    virQEMUCapsSetArch(info->qemuCaps, arch);

     virQEMUCapsInitQMPBasicArch(info->qemuCaps);

@@ -648,6 +648,8 @@ testCompareXMLToArgv(const void *data)
     g_autoptr(xmlDoc) xml = NULL;
     g_autoptr(xmlXPathContext) ctxt = NULL;
     xmlNodePtr root;
+    g_autofree char *archstr = NULL;
+    virArch arch = VIR_ARCH_NONE;

     if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
         qemuTestSetHostArch(&driver, info->arch);
@@ -686,6 +688,17 @@ testCompareXMLToArgv(const void *data)

     ctxt->node = root;

+    if ((archstr = virXPathString("string(./os/type[1]/@arch)", ctxt))) {
+        if ((arch = virArchFromString(archstr)) == VIR_ARCH_NONE) {
+            arch = virArchFromHost();
+        }
+    }
+
+    if (!(info->flags & FLAG_REAL_CAPS)) {
+        if (testUpdateQEMUCaps(info, arch, driver.caps) < 0)
+            goto cleanup;
+    }
+
     if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
         goto cleanup;

@@ -739,7 +752,7 @@ testCompareXMLToArgv(const void *data)
         goto cleanup;

     if (!(info->flags & FLAG_REAL_CAPS)) {
-        if (testUpdateQEMUCaps(info, vm, driver.caps) < 0)
+        if (testUpdateQEMUCaps(info, vm->def->os.arch, driver.caps) < 0)
             goto cleanup;
         if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
             goto cleanup;
-- 
2.30.2

Re: [RFC PATCH 18/43] qemuxml2argvtest: Parse 'arch' from XML early
Posted by Pavel Hrdina 4 years, 10 months ago
On Fri, Apr 09, 2021 at 04:56:54PM +0200, Peter Krempa wrote:
> If we want to provide correct (fake) caps already for the XML parser we
> need to be able to parse the arch early so that we can properly
> initialize the caps cache prior to calling the XML parser.
> 
> This patch adds code which parses the arch and updates the caps cache
> prior to the parse step.
> 
> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> ---
>  tests/qemuxml2argvtest.c | 19 ++++++++++++++++---
>  1 file changed, 16 insertions(+), 3 deletions(-)

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>

Can be pushed now.