[libvirt] [PATCH 05/10] test: Allow specifying object transient state in driver XML

Cole Robinson crobinso at redhat.com
Wed Aug 7 23:28:59 UTC 2013


Similar to the runstate commit, allow a block like:

  <testdriver>
    <transient/>
  </testdriver>

Wire it up for domains and networks. Generalize the boolean lookup
pattern since we are going to use it for other bits as well.
---
 src/test/test_driver.c | 45 +++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 43 insertions(+), 2 deletions(-)

diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 4be20b1..3775906 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -860,6 +860,41 @@ error:
 }
 
 /*
+ * Parse object bool value from passed in XML, transient example:
+ * <domain>
+ *   ...
+ *   <testdriver>
+ *     <transient/>
+ *   </testdriver>
+ * </domain>
+ */
+static int
+testParseXMLObjectBool(xmlXPathContextPtr ctxt,
+                       xmlNodePtr node,
+                       const char *name,
+                       bool *val)
+{
+    int ret = -1;
+    char *xpath = NULL;
+
+    if (virAsprintf(&xpath, "boolean(%s/testdriver/%s)",
+                    xmlGetNodePath(node), name) < 0)
+        goto error;
+
+    ret = virXPathBoolean(xpath, ctxt);
+    if (ret == -1) {
+        virReportError(VIR_ERR_XML_ERROR, _("invalid %s"), name);
+        goto error;
+    }
+    *val = ret;
+
+    ret = 0;
+error:
+    VIR_FREE(xpath);
+    return ret;
+}
+
+/*
  * Unlink custom <testdriver> XML before handing the node off
  * to the object parsing handler, since it may complain about unrecognized
  * elements (if not now, then in the future)
@@ -904,6 +939,7 @@ testParseDomains(testConnPtr privconn,
 
     for (i = 0; i < num; i++) {
         unsigned int runstate;
+        bool transient;
         virDomainDefPtr def;
         xmlNodePtr node = testParseXMLDocFromFile(nodes[i], file, "domain");
         if (!node)
@@ -913,6 +949,8 @@ testParseDomains(testConnPtr privconn,
                                        VIR_DOMAIN_LAST, VIR_DOMAIN_RUNNING,
                                        &runstate) < 0)
             goto error;
+        if (testParseXMLObjectBool(ctxt, node, "transient", &transient) < 0)
+            goto error;
 
         if (testNodeUnlinkCustomXML(ctxt, node) < 0)
             goto error;
@@ -933,7 +971,7 @@ testParseDomains(testConnPtr privconn,
             goto error;
         }
 
-        obj->persistent = 1;
+        obj->persistent = !transient;
         if (runstate != VIR_DOMAIN_SHUTOFF) {
             if (testDomainStartState(privconn, obj,
                                      VIR_DOMAIN_RUNNING_BOOTED) < 0) {
@@ -970,6 +1008,7 @@ testParseNetworks(testConnPtr privconn,
     }
 
     for (i = 0; i < num; i++) {
+        bool transient;
         unsigned int runstate;
         virNetworkDefPtr def;
         xmlNodePtr node = testParseXMLDocFromFile(nodes[i], file, "network");
@@ -978,6 +1017,8 @@ testParseNetworks(testConnPtr privconn,
 
         if (testParseXMLObjectRunstate(ctxt, node, 1, 1, &runstate) < 0)
             goto error;
+        if (testParseXMLObjectBool(ctxt, node, "transient", &transient) < 0)
+            goto error;
 
         if (testNodeUnlinkCustomXML(ctxt, node) < 0)
             goto error;
@@ -991,7 +1032,7 @@ testParseNetworks(testConnPtr privconn,
             goto error;
         }
 
-        obj->persistent = 1;
+        obj->persistent = !transient;
         obj->active = runstate;
         virNetworkObjUnlock(obj);
     }
-- 
1.8.3.1




More information about the libvir-list mailing list