Francesco Romani has uploaded a new change for review.
Change subject: tests: basic scaffolding tests gor getUnderlying* ......................................................................
tests: basic scaffolding tests gor getUnderlying*
We want to refactor and cleanup Vm.getUnderlying* and move this code where really belongs, vmdevices classes.
We have good intentions and a plan which is mostly code moving and includes adding more unit tests and good coverage, but we are also dealing with a big chunk of code which is very poorly covered by tests.
To bootstrap the process and to have a decent hope which nothing obvious breaks, add unit test to exercise the basic flow.
This test *is* fragile and the code *has* many flows and quirks, so this must be intended as temporary scaffolding to provide only very minimal safety.
Change-Id: I7609d346d7cef41286674e4b1443856ab088bc4c Signed-off-by: Francesco Romani fromani@redhat.com --- M Makefile.am M tests/Makefile.am M tests/deviceTests.py 3 files changed, 55 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/76/38976/1
diff --git a/Makefile.am b/Makefile.am index 34885a1..0520da5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -75,6 +75,7 @@ config.py \ constants.py \ crossImportsTests.py \ + deviceTestsData.py \ vdsm.py \ $(NULL)
diff --git a/tests/Makefile.am b/tests/Makefile.am index 39bad01..29910a9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -32,6 +32,7 @@ configNetworkTests.py \ cpuProfileTests.py \ deviceTests.py \ + deviceTestsData.py \ domainDescriptorTests.py \ executorTests.py \ fileSDTests.py \ diff --git a/tests/deviceTests.py b/tests/deviceTests.py index 2e69b40..c05ef14 100644 --- a/tests/deviceTests.py +++ b/tests/deviceTests.py @@ -20,12 +20,15 @@
from vdsm import libvirtconnection from virt import vmdevices -from virt.vmdevices import hwclass +from virt.vmdevices import hwclass, hwtree from virt.domain_descriptor import DomainDescriptor from monkeypatch import MonkeyPatchScope from testlib import permutations, expandPermutations +from testlib import VdsmTestCase as TestCaseBase from testlib import XMLTestCase import vmfakelib as fake + +import deviceTestsData as testdata
@expandPermutations @@ -460,3 +463,52 @@ if graph.device == 'spice': self.assertXMLEqual(graph.getSpiceVmcChannelsXML().toxml(), spiceChannelXML) + + +class VmDeviceUpdateTests(TestCaseBase): + + def test_get_underlying_update_config_alias_address(self): + with fake.VM(testdata.VM_CONF_BASE) as testvm: + testvm._dom = fake.Domain(xml=testdata.DOMAIN_XML_LIVE) + + self._setupDevices(testvm) + + self._assertDeviceConfUpdated(testvm.conf['devices'], + testdata.VM_CONF_LIVE['devices']) + + def _setupDevices(self, testvm): + devices = testvm.buildConfDevices() + testvm._updateDevices(devices) + testvm._devices = hwtree.build(devices, testvm.conf, testvm.log) + + testvm._updateDomainDescriptor() + testvm._getUnderlyingVmDevicesInfo() + + def _assertDeviceConfUpdated(self, built_devices, expected_devices): + for built_dev in built_devices: + # drives require more care, not yet in scope + if built_dev['type'] == hwclass.DISK: + continue + + found = False + if 'alias' in built_dev: + for expected_dev in expected_devices: + # we deal with list of dicts, we must + # match by alias. We implicitely validate + # the alias being correct, this way. + if 'alias' in expected_dev and ( + expected_dev['alias'] == built_dev['alias']): + if ('address' in built_dev and + 'address' in expected_dev): + self.assertEqual(built_dev['address'], + expected_dev['address']) + else: + # cope with video device oddity. + # TODO: is this correct? + self.assertEqual(built_dev, expected_dev) + found = True + + # graphics device needs special care, and we can deal with that. + if not found and built_dev['type'] != hwclass.GRAPHICS: + raise AssertionError( + 'device %s built but not expected' % str(built_dev))