[libvirt] [PATCHv5 3/5] domifaddr: Implement the API for qemu

Nehal J Wani nehaljw.kkd1 at gmail.com
Tue Sep 3 08:45:09 UTC 2013


Updated tests + corrections in qemu_agent.c (Diff attached):

diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index 009ed77..3c0c541 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -1344,6 +1344,7 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
     size_t addrs_count = 0;
     virDomainInterfacePtr *ifaces_ret = NULL;
     virHashTablePtr ifaces_store = NULL;
+    char **ifname = NULL;

     /* Initially the bag of ifaces is empty */
     if (!(ifaces_store = virHashCreate(ifaces_count, NULL)))
@@ -1373,7 +1374,6 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
         virJSONValuePtr tmp_iface = virJSONValueArrayGet(ret_array, i);
         virJSONValuePtr ip_addr_arr = NULL;
         const char *hwaddr, *ifname_s, *name = NULL;
-        char **ifname = NULL;
         int ip_addr_arr_size;
         virDomainInterfacePtr iface = NULL;

@@ -1416,9 +1416,15 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,
             if (VIR_STRDUP(iface->name, ifname_s) < 0)
                 goto error;

-            /* hwaddr might be omitted */
             hwaddr = virJSONValueObjectGetString(tmp_iface,
"hardware-address");
-            if (hwaddr && VIR_STRDUP(iface->hwaddr, hwaddr) < 0)
+            if (!hwaddr) {
+                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                               _("qemu agent didn't provide"
+                                 "'hardware-address' field"));
+                goto error;
+            }
+
+            if (VIR_STRDUP(iface->hwaddr, hwaddr) < 0)
                 goto error;
         }

@@ -1433,7 +1439,7 @@ qemuAgentGetInterfaces(qemuAgentPtr mon,

         if ((ip_addr_arr_size = virJSONValueArraySize(ip_addr_arr)) < 0)
             /* Mmm, empty 'ip-address'? */
-            continue;
+            goto error;

         /* If current iface already exists, continue with the count */
         addrs_count = iface->naddrs;
@@ -1508,6 +1514,7 @@ error:
             virDomainInterfaceFree(ifaces_ret[i]);
     }
     VIR_FREE(ifaces_ret);
+    virStringFreeList(ifname);

     goto cleanup;
 }
diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c
index 4014a09..ddca48c 100644
--- a/tests/qemuagenttest.c
+++ b/tests/qemuagenttest.c
@@ -579,32 +579,35 @@ cleanup:
 static const char testQemuAgentGetInterfacesResponse[] =
     "{\"return\": "
     "    ["
-    "       {\"name\":\"lo\","
+    "       {\"name\":\"eth2\","
+    "        \"hardware-address\":\"52:54:00:36:2a:e5\""
+    "       },"
+    "       {\"name\":\"eth1:0\","
     "        \"ip-addresses\":"
     "          ["
     "             {\"ip-address-type\":\"ipv4\","
-    "              \"ip-address\":\"127.0.0.1\","
-    "              \"prefix\":8"
+    "              \"ip-address\":\"192.168.10.91\","
+    "              \"prefix\":24"
     "             },"
     "             {\"ip-address-type\":\"ipv6\","
-    "              \"ip-address\":\"::1\","
-    "              \"prefix\":128"
+    "              \"ip-address\":\"fe80::fc54:ff:fefe:4c4f\","
+    "              \"prefix\":64"
     "             }"
     "          ],"
-    "        \"hardware-address\":\"00:00:00:00:00:00\""
+    "        \"hardware-address\":\"52:54:00:d3:39:ee\""
     "       },"
     "       {\"name\":\"eth0\","
     "        \"ip-addresses\":"
     "          ["
-    "             {\"ip-address-type\":\"ipv4\","
-    "              \"ip-address\":\"192.168.102.142\","
-    "              \"prefix\":24"
-    "             },"
     "             {\"ip-address-type\":\"ipv6\","
     "              \"ip-address\":\"fe80::5054:ff:fe89:ad35\","
     "              \"prefix\":64"
     "             },"
     "             {\"ip-address-type\":\"ipv4\","
+    "              \"ip-address\":\"192.168.102.142\","
+    "              \"prefix\":24"
+    "             },"
+    "             {\"ip-address-type\":\"ipv4\","
     "              \"ip-address\":\"192.168.234.152\","
     "              \"prefix\":16"
     "             },"
@@ -620,7 +623,7 @@ static const char testQemuAgentGetInterfacesResponse[] =
     "          ["
     "             {\"ip-address-type\":\"ipv4\","
     "              \"ip-address\":\"192.168.103.83\","
-    "              \"prefix\":24"
+    "              \"prefix\":32"
     "             },"
     "             {\"ip-address-type\":\"ipv6\","
     "              \"ip-address\":\"fe80::5054:ff:fed3:39ee\","
@@ -629,22 +632,19 @@ static const char testQemuAgentGetInterfacesResponse[] =
     "          ],"
     "        \"hardware-address\":\"52:54:00:d3:39:ee\""
     "       },"
-    "       {\"name\":\"eth1:0\","
+    "       {\"name\":\"lo\","
     "        \"ip-addresses\":"
     "          ["
     "             {\"ip-address-type\":\"ipv4\","
-    "              \"ip-address\":\"192.168.10.91\","
-    "              \"prefix\":24"
+    "              \"ip-address\":\"127.0.0.1\","
+    "              \"prefix\":8"
     "             },"
     "             {\"ip-address-type\":\"ipv6\","
-    "              \"ip-address\":\"fe80::fc54:ff:fefe:4c4f\","
-    "              \"prefix\":64"
+    "              \"ip-address\":\"::1\","
+    "              \"prefix\":128"
     "             }"
     "          ],"
-    "        \"hardware-address\":\"52:54:00:d3:39:ee\""
-    "       },"
-    "       {\"name\":\"eth2\","
-    "        \"hardware-address\":\"52:54:00:36:2a:e5\""
+    "        \"hardware-address\":\"00:00:00:00:00:00\""
     "       }"
     "    ]"
     "}";
@@ -679,36 +679,75 @@ testQemuAgentGetInterfaces(const void *data)
         goto cleanup;
     }

-    if (ifaces[0]->naddrs != 2 ||
+    if (STRNEQ(ifaces[0]->name, "eth2") ||
+        STRNEQ(ifaces[1]->name, "eth1") ||
+        STRNEQ(ifaces[2]->name, "eth0") ||
+        STRNEQ(ifaces[3]->name, "lo")) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       "unexpected return values for interface names");
+        goto cleanup;
+    }
+
+    if (STRNEQ(ifaces[0]->hwaddr, "52:54:00:36:2a:e5") ||
+        STRNEQ(ifaces[1]->hwaddr, "52:54:00:d3:39:ee") ||
+        STRNEQ(ifaces[2]->hwaddr, "52:54:00:89:ad:35") ||
+        STRNEQ(ifaces[3]->hwaddr, "00:00:00:00:00:00")) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       "unexpected return values for MAC addresses");
+        goto cleanup;
+    }
+
+    if (ifaces[0]->naddrs != 0 ||
         ifaces[1]->naddrs != 4 ||
         ifaces[2]->naddrs != 4 ||
-        ifaces[3]->naddrs != 0) {
+        ifaces[3]->naddrs != 2) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       "unexpected return value for number of IP addresses");
+                       "unexpected return values for number of IP addresses");
         goto cleanup;
     }

-    if (STRNEQ(ifaces[0]->name, "lo") ||
-        STRNEQ(ifaces[0]->addrs[0].addr, "127.0.0.1") ||
-        ifaces[0]->addrs[1].prefix != 128) {
+    if (ifaces[1]->addrs[0].type != VIR_IP_ADDR_TYPE_IPV4 ||
+        ifaces[1]->addrs[1].type != VIR_IP_ADDR_TYPE_IPV6 ||
+        ifaces[1]->addrs[2].type != VIR_IP_ADDR_TYPE_IPV4 ||
+        ifaces[1]->addrs[3].type != VIR_IP_ADDR_TYPE_IPV6 ||
+        ifaces[2]->addrs[0].type != VIR_IP_ADDR_TYPE_IPV6 ||
+        ifaces[2]->addrs[1].type != VIR_IP_ADDR_TYPE_IPV4 ||
+        ifaces[2]->addrs[2].type != VIR_IP_ADDR_TYPE_IPV4 ||
+        ifaces[2]->addrs[3].type != VIR_IP_ADDR_TYPE_IPV6 ||
+        ifaces[3]->addrs[0].type != VIR_IP_ADDR_TYPE_IPV4 ||
+        ifaces[3]->addrs[1].type != VIR_IP_ADDR_TYPE_IPV6) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       "unexpected return values for interface: lo");
+                       "unexpected return values for IP address types");
         goto cleanup;
     }

-    if (STRNEQ(ifaces[1]->hwaddr, "52:54:00:89:ad:35") ||
-        ifaces[1]->addrs[0].prefix != 24 ||
-        ifaces[1]->addrs[1].type != VIR_IP_ADDR_TYPE_IPV6) {
+    if (ifaces[1]->addrs[0].prefix != 24 ||
+        ifaces[1]->addrs[1].prefix != 64 ||
+        ifaces[1]->addrs[2].prefix != 32 ||
+        ifaces[1]->addrs[3].prefix != 64 ||
+        ifaces[2]->addrs[0].prefix != 64 ||
+        ifaces[2]->addrs[1].prefix != 24 ||
+        ifaces[2]->addrs[2].prefix != 16 ||
+        ifaces[2]->addrs[3].prefix != 64 ||
+        ifaces[3]->addrs[0].prefix != 8 ||
+        ifaces[3]->addrs[1].prefix != 128) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       "unexpected return values for interface: eth0");
+                       "unexpected return values for IP address prefix");
         goto cleanup;
     }

-    if (STRNEQ(ifaces[2]->name, "eth1") ||
-        ifaces[2]->addrs[0].type != VIR_IP_ADDR_TYPE_IPV4 ||
-        STRNEQ(ifaces[2]->addrs[1].addr, "fe80::5054:ff:fed3:39ee")) {
+    if (STRNEQ(ifaces[1]->addrs[0].addr, "192.168.10.91") ||
+        STRNEQ(ifaces[1]->addrs[1].addr, "fe80::fc54:ff:fefe:4c4f") ||
+        STRNEQ(ifaces[1]->addrs[2].addr, "192.168.103.83") ||
+        STRNEQ(ifaces[1]->addrs[3].addr, "fe80::5054:ff:fed3:39ee") ||
+        STRNEQ(ifaces[2]->addrs[0].addr, "fe80::5054:ff:fe89:ad35") ||
+        STRNEQ(ifaces[2]->addrs[1].addr, "192.168.102.142") ||
+        STRNEQ(ifaces[2]->addrs[2].addr, "192.168.234.152") ||
+        STRNEQ(ifaces[2]->addrs[3].addr, "fe80::5054:ff:fec3:68bb") ||
+        STRNEQ(ifaces[3]->addrs[0].addr, "127.0.0.1") ||
+        STRNEQ(ifaces[3]->addrs[1].addr, "::1")) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                       "unexpected return values for interface: eth1");
+                       "unexpected return values for IP address values");
         goto cleanup;
     }


-- 
Nehal J Wani
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 3.diff
Type: application/octet-stream
Size: 9619 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130903/8d7c9ac5/attachment-0001.obj>


More information about the libvir-list mailing list