libvirt: convert LibvirtConnTestCase to use fakelibvirt fixture

Instead of defining a custom fake libvirt class and installing
mocks for it, just use the standard fakelibvirt fixture.

Blueprint: libvirt-driver-class-refactor
Change-Id: I1b0e8d55ff498c57ff25e5d47078f59c95734dc6
This commit is contained in:
Daniel P. Berrange
2014-12-10 13:05:39 +00:00
parent 31d0f5acc6
commit 4b9bec3a1c
2 changed files with 62 additions and 111 deletions
+44 -1
View File
@@ -134,6 +134,7 @@ VIR_FROM_DOMAIN = 200
VIR_FROM_NWFILTER = 330
VIR_FROM_REMOTE = 340
VIR_FROM_RPC = 345
VIR_FROM_NODEDEV = 666
VIR_ERR_NO_SUPPORT = 3
VIR_ERR_XML_DETAIL = 350
VIR_ERR_NO_DOMAIN = 420
@@ -143,6 +144,7 @@ VIR_ERR_NO_NWFILTER = 620
VIR_ERR_SYSTEM_ERROR = 900
VIR_ERR_INTERNAL_ERROR = 950
VIR_ERR_CONFIG_UNSUPPORTED = 951
VIR_ERR_NO_NODE_DEVICE = 667
# Readonly
VIR_CONNECT_RO = 1
@@ -280,6 +282,30 @@ class NWFilter(object):
self._connection._remove_filter(self)
class NodeDevice(object):
def __init__(self, connection, xml=None):
self._connection = connection
self._xml = xml
if xml is not None:
self._parse_xml(xml)
def _parse_xml(self, xml):
tree = etree.fromstring(xml)
root = tree.find('.')
self._name = root.get('name')
def attach(self):
pass
def dettach(self):
pass
def reset(self):
pass
class Domain(object):
def __init__(self, connection, xml, running=False, transient=False):
self._connection = connection
@@ -643,6 +669,7 @@ class Connection(object):
self._running_vms = {}
self._id_counter = 1 # libvirt reserves 0 for the hypervisor.
self._nwfilters = {}
self._nodedevs = {}
self._event_callbacks = {}
self.fakeLibVersion = version
self.fakeVersion = version
@@ -653,6 +680,12 @@ class Connection(object):
def _remove_filter(self, nwfilter):
del self._nwfilters[nwfilter._name]
def _add_nodedev(self, nodedev):
self._nodedevs[nodedev._name] = nodedev
def _remove_nodedev(self, nodedev):
del self._nodedevs[nodedev._name]
def _mark_running(self, dom):
self._running_vms[self._id_counter] = dom
self._emit_lifecycle(dom, VIR_DOMAIN_EVENT_STARTED, 0)
@@ -1040,6 +1073,16 @@ class Connection(object):
nwfilter = NWFilter(self, xml)
self._add_filter(nwfilter)
def nodeDeviceLookupByName(self, name):
try:
return self._nodedevs[name]
except KeyError:
raise make_libvirtError(
libvirtError,
"no nodedev with matching name %s" % name,
error_code=VIR_ERR_NO_NODE_DEVICE,
error_domain=VIR_FROM_NODEDEV)
def listDefinedDomains(self):
return []
@@ -1115,7 +1158,7 @@ def make_libvirtError(error_class, msg, error_code=None,
virDomain = Domain
virNodeDevice = NodeDevice
virConnect = Connection
+18 -110
View File
@@ -471,74 +471,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
self.stubs.Set(imagebackend.Image, 'resolve_driver_format',
imagebackend.Image._get_driver_format)
class FakeConn(object):
def baselineCPU(self, cpu, flag):
"""Add new libvirt API."""
return """<cpu mode='custom' match='exact'>
<model fallback='allow'>Westmere</model>
<vendor>Intel</vendor>
<feature policy='require' name='aes'/>
<feature policy='require' name='hypervisor'/>
</cpu>"""
def getCapabilities(self):
"""Ensure standard capabilities being returned."""
return """<capabilities>
<host><cpu><arch>x86_64</arch>
<feature policy='require' name='hypervisor'/>
</cpu></host>
</capabilities>"""
def getVersion(self):
return 1005001
def getLibVersion(self):
return (0 * 1000 * 1000) + (9 * 1000) + 11
def domainEventRegisterAny(self, *args, **kwargs):
pass
def registerCloseCallback(self, cb, opaque):
pass
def nwfilterDefineXML(self, *args, **kwargs):
pass
def nodeDeviceLookupByName(self, x):
pass
def listDevices(self, cap, flags):
return []
def lookupByName(self, name):
pass
def lookupByID(self, id):
pass
def getHostname(self):
return "mustard"
def getType(self):
return "QEMU"
def numOfDomains(self):
return 0
def listDomainsID(self):
return []
def listDefinedDomains(self):
return []
def getInfo(self):
return [arch.X86_64, 123456, 2, 2000,
2, 1, 1, 1]
self.conn = FakeConn()
self.stubs.Set(host.Host,
'get_connection',
lambda h: self.conn)
self.useFixture(fakelibvirt.FakeLibvirtFixture())
sys_meta = {
'instance_type_memory_mb': 2048,
@@ -710,54 +643,36 @@ class LibvirtConnTestCase(test.NoDBTestCase):
db_mock.side_effect = exception.NovaException
conn._set_host_enabled(False)
def test_prepare_pci_device(self):
@mock.patch.object(fakelibvirt.virConnect, "nodeDeviceLookupByName")
def test_prepare_pci_device(self, mock_lookup):
pci_devices = [dict(hypervisor_name='xxx')]
self.flags(virt_type='xen', group='libvirt')
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
conn = drvr._host.get_connection()
class FakeDev(object):
def attach(self):
pass
mock_lookup.side_effect = lambda x: fakelibvirt.NodeDevice(conn)
drvr._prepare_pci_devices_for_use(pci_devices)
def dettach(self):
pass
def reset(self):
pass
self.mox.StubOutWithMock(self.conn, 'nodeDeviceLookupByName')
self.conn.nodeDeviceLookupByName('xxx').AndReturn(FakeDev())
self.conn.nodeDeviceLookupByName('xxx').AndReturn(FakeDev())
self.mox.ReplayAll()
conn._prepare_pci_devices_for_use(pci_devices)
def test_prepare_pci_device_exception(self):
@mock.patch.object(fakelibvirt.virConnect, "nodeDeviceLookupByName")
@mock.patch.object(fakelibvirt.virNodeDevice, "dettach")
def test_prepare_pci_device_exception(self, mock_detach, mock_lookup):
pci_devices = [dict(hypervisor_name='xxx',
id='id1',
instance_uuid='uuid')]
self.flags(virt_type='xen', group='libvirt')
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
conn = drvr._host.get_connection()
class FakeDev(object):
mock_lookup.side_effect = lambda x: fakelibvirt.NodeDevice(conn)
mock_detach.side_effect = libvirt.libvirtError("xxxx")
def attach(self):
pass
def dettach(self):
raise libvirt.libvirtError("xxxxx")
def reset(self):
pass
self.stubs.Set(self.conn, 'nodeDeviceLookupByName',
lambda x: FakeDev())
self.assertRaises(exception.PciDevicePrepareFailed,
conn._prepare_pci_devices_for_use, pci_devices)
drvr._prepare_pci_devices_for_use, pci_devices)
def test_detach_pci_devices_exception(self):
@@ -3724,12 +3639,6 @@ class LibvirtConnTestCase(test.NoDBTestCase):
cpu_mode=None,
group='libvirt')
def get_lib_version_stub():
return (0 * 1000 * 1000) + (9 * 1000) + 11
self.stubs.Set(self.conn,
"getLibVersion",
get_lib_version_stub)
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
instance_ref = objects.Instance(**self.test_instance)
flavor = instance_ref.get_flavor()
@@ -5065,9 +4974,9 @@ class LibvirtConnTestCase(test.NoDBTestCase):
instance,
"/dev/sda")
def test_attach_blockio_invalid_version(self):
def get_lib_version_stub():
return (0 * 1000 * 1000) + (9 * 1000) + 8
@mock.patch.object(fakelibvirt.virConnect, "getLibVersion")
def test_attach_blockio_invalid_version(self, mock_version):
mock_version.return_value = (0 * 1000 * 1000) + (9 * 1000) + 8
self.flags(virt_type='qemu', group='libvirt')
self.create_fake_libvirt_mock()
libvirt_driver.LibvirtDriver._conn.lookupByName = self.fake_lookup
@@ -5075,7 +4984,6 @@ class LibvirtConnTestCase(test.NoDBTestCase):
self.context, **self.test_instance)
self.mox.ReplayAll()
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
self.stubs.Set(self.conn, "getLibVersion", get_lib_version_stub)
self.assertRaises(exception.Invalid,
conn.attach_volume, None,
{"driver_volume_type": "fake",