Merge "Handle XML body of server's virtual interfaces correctly."
diff --git a/tempest/services/compute/xml/servers_client.py b/tempest/services/compute/xml/servers_client.py
index 049d454..efb28e6 100644
--- a/tempest/services/compute/xml/servers_client.py
+++ b/tempest/services/compute/xml/servers_client.py
@@ -131,6 +131,17 @@
                 self._parse_links(body, json[sub])
         return json
 
+    def _parse_xml_virtual_interfaces(self, xml_dom):
+        """
+        Return server's virtual interfaces XML as JSON.
+        """
+        data = {"virtual_interfaces": []}
+        for iface in xml_dom.getchildren():
+            data["virtual_interfaces"].append(
+                {"id": iface.get("id"),
+                 "mac_address": iface.get("mac_address")})
+        return data
+
     def get_server(self, server_id):
         """Returns the details of an existing server."""
         resp, body = self.get("servers/%s" % str(server_id), self.headers)
@@ -382,5 +393,5 @@
         """
         resp, body = self.get('/'.join(['servers', server_id,
                               'os-virtual-interfaces']), self.headers)
-        server = self._parse_server(etree.fromstring(body))
-        return resp, server
+        virt_int = self._parse_xml_virtual_interfaces(etree.fromstring(body))
+        return resp, virt_int
diff --git a/tempest/tests/compute/servers/test_virtual_interfaces.py b/tempest/tests/compute/servers/test_virtual_interfaces.py
index 65da24f..4c48366 100644
--- a/tempest/tests/compute/servers/test_virtual_interfaces.py
+++ b/tempest/tests/compute/servers/test_virtual_interfaces.py
@@ -15,6 +15,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import netaddr
+
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
 from tempest.test import attr
@@ -49,18 +51,22 @@
         resp, output = self.client.list_virtual_interfaces(self.server_id)
         self.assertEqual(200, resp.status)
         self.assertNotEqual(output, None)
-        virtual_interfaces = output
-        self.assertNotEqual(0, len(virtual_interfaces),
-                            'Expected virtual interfaces, got zero.')
+        virt_ifaces = output
+        self.assertNotEqual(0, len(virt_ifaces['virtual_interfaces']),
+                            'Expected virtual interfaces, got 0 interfaces.')
+        for virt_iface in virt_ifaces['virtual_interfaces']:
+            mac_address = virt_iface['mac_address']
+            self.assertTrue(netaddr.valid_mac(mac_address),
+                            "Invalid mac address detected.")
 
     @attr(type='negative')
     def test_list_virtual_interfaces_invalid_server_id(self):
         # Negative test: Should not be able to GET virtual interfaces
         # for an invalid server_id
-        try:
-            resp, output = self.client.list_virtual_interfaces('!@#$%^&*()')
-        except exceptions.NotFound:
-            pass
+        invalid_server_id = rand_name('!@#$%^&*()')
+        self.assertRaises(exceptions.NotFound,
+                          self.client.list_virtual_interfaces,
+                          invalid_server_id)
 
 
 @attr(type='smoke')