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:
@@ -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
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user