bugfix: Fix duplicate 'address' in standlone SRIOV 11/49711/3
authorDino Madarang <dinox.madarang@intel.com>
Wed, 27 Dec 2017 23:52:12 +0000 (15:52 -0800)
committerDino Madarang <dinox.madarang@intel.com>
Tue, 16 Jan 2018 16:51:35 +0000 (09:51 -0700)
* Add unit test per Rodolfo's comment

Creating a VM using generted xml file /tmp/vm_sriov_0.xml returns
an XML error: missing source address type.

This fix modifies generted xml from:
<source>
<address>
<address bus="0x1a" domain="0x0000" function="0x0" slot="0x10" type="pci" />
</address>
</source>

to:

<source>
<address bus="0x1a" domain="0x0000" function="0x0" slot="0x10" type="pci" />
</source>

Change-Id: I694153e7468986bacb19ba3e09e761993aad7184
Signed-off-by: Dino Simeon Madarang <dinox.madarang@intel.com>
Reviewed-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Reviewed-by: Ross Brattain <ross.b.brattain@intel.com>
Reviewed-by: Alain Jebara <alain.jebara@intel.com>
Reviewed-by: Emma Foley <emma.l.foley@intel.com>
tests/unit/benchmark/contexts/standalone/test_model.py
yardstick/benchmark/contexts/standalone/model.py

index 31ec2b7..a8c54f1 100644 (file)
@@ -134,9 +134,9 @@ class ModelLibvirtTestCase(unittest.TestCase):
                 as mock_parse:
             xml = copy.deepcopy(self.xml)
             mock_parse.return_value = xml
-            vf_pci = '0001:05:04.2'
+            vm_pci = '0001:05:04.2'
             model.Libvirt.add_sriov_interfaces(
-                self.pci_address_str, vf_pci, self.mac, xml_input)
+                vm_pci, self.pci_address_str, self.mac, xml_input)
             mock_parse.assert_called_once_with(xml_input)
             self.mock_write_xml.assert_called_once_with(xml_input)
             interface = xml.find('devices').find('interface')
@@ -145,8 +145,29 @@ class ModelLibvirtTestCase(unittest.TestCase):
             mac = interface.find('mac')
             self.assertEqual(self.mac, mac.get('address'))
             source = interface.find('source')
+            source_address = source.find('address')
             self.assertIsNotNone(source.find('address'))
-            self.assertIsNotNone(interface.find('address'))
+
+            self.assertEqual('pci', source_address.get('type'))
+            self.assertEqual('0x' + self.pci_address_str.split(':')[0],
+                             source_address.get('domain'))
+            self.assertEqual('0x' + self.pci_address_str.split(':')[1],
+                             source_address.get('bus'))
+            self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[0],
+                             source_address.get('slot'))
+            self.assertEqual('0x' + self.pci_address_str.split(':')[2].split('.')[1],
+                             source_address.get('function'))
+
+            interface_address = interface.find('address')
+            self.assertEqual('pci', interface_address.get('type'))
+            self.assertEqual('0x' + vm_pci.split(':')[0],
+                             interface_address.get('domain'))
+            self.assertEqual('0x' + vm_pci.split(':')[1],
+                             interface_address.get('bus'))
+            self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[0],
+                             interface_address.get('slot'))
+            self.assertEqual('0x' + vm_pci.split(':')[2].split('.')[1],
+                             interface_address.get('function'))
 
     def test_create_snapshot_qemu(self):
         result = "/var/lib/libvirt/images/0.qcow2"
index 85ae14b..0d58e91 100644 (file)
@@ -212,9 +212,8 @@ class Libvirt(object):
         mac.set('address', vf_mac)
 
         source = ET.SubElement(interface, 'source')
-        addr = ET.SubElement(source, 'address')
         pci_address = PciAddress(vf_pci.strip())
-        cls._add_interface_address(addr, pci_address)
+        cls._add_interface_address(source, pci_address)
 
         pci_vm_address = PciAddress(vm_pci.strip())
         cls._add_interface_address(interface, pci_vm_address)