Port libvirt.storage.test_rbd to Python 3
* Stop explicitly encoding strings we pass to rbd: the library supports multiple string types now. * We mock module rbd from rbd_utils.py, also need set module rbd's specific exceptions with object inherit from BaseException to avoid TypeError like: 'TypeError: catching classes that do not inherit from BaseException is not allowed' Partially-Implements: blueprint goal-python35 Co-Authored-By: Davanum Srinivas <davanum@gmail.com> Change-Id: I3eec213ad9bc13f0a371a5c4f28d3df377796125
This commit is contained in:
parent
199d3d81ee
commit
ba81d2458f
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
from eventlet import tpool
|
from eventlet import tpool
|
||||||
import mock
|
import mock
|
||||||
|
import six
|
||||||
|
|
||||||
from nova.compute import task_states
|
from nova.compute import task_states
|
||||||
from nova import exception
|
from nova import exception
|
||||||
@ -52,6 +53,10 @@ CEPH_MON_DUMP = """dumped monmap epoch 1
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class FakeException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class RbdTestCase(test.NoDBTestCase):
|
class RbdTestCase(test.NoDBTestCase):
|
||||||
|
|
||||||
@mock.patch.object(rbd_utils, 'rbd')
|
@mock.patch.object(rbd_utils, 'rbd')
|
||||||
@ -198,6 +203,8 @@ class RbdTestCase(test.NoDBTestCase):
|
|||||||
@mock.patch.object(rbd_utils, 'rbd')
|
@mock.patch.object(rbd_utils, 'rbd')
|
||||||
@mock.patch.object(rbd_utils, 'rados')
|
@mock.patch.object(rbd_utils, 'rados')
|
||||||
def test_clone(self, mock_rados, mock_rbd, mock_client):
|
def test_clone(self, mock_rados, mock_rbd, mock_client):
|
||||||
|
mock_rbd.ImageBusy = FakeException
|
||||||
|
mock_rbd.ImageHasSnapshots = FakeException
|
||||||
pool = u'images'
|
pool = u'images'
|
||||||
image = u'image-name'
|
image = u'image-name'
|
||||||
snap = u'snapshot-name'
|
snap = u'snapshot-name'
|
||||||
@ -219,7 +226,7 @@ class RbdTestCase(test.NoDBTestCase):
|
|||||||
|
|
||||||
self.driver.clone(location, self.volume_name)
|
self.driver.clone(location, self.volume_name)
|
||||||
|
|
||||||
args = [client_stack[0].ioctx, str(image), str(snap),
|
args = [client_stack[0].ioctx, six.b(image), six.b(snap),
|
||||||
client_stack[1].ioctx, str(self.volume_name)]
|
client_stack[1].ioctx, str(self.volume_name)]
|
||||||
kwargs = {'features': client.features}
|
kwargs = {'features': client.features}
|
||||||
rbd.clone.assert_called_once_with(*args, **kwargs)
|
rbd.clone.assert_called_once_with(*args, **kwargs)
|
||||||
@ -339,6 +346,8 @@ class RbdTestCase(test.NoDBTestCase):
|
|||||||
@mock.patch.object(rbd_utils, 'rados')
|
@mock.patch.object(rbd_utils, 'rados')
|
||||||
@mock.patch.object(rbd_utils, 'RADOSClient')
|
@mock.patch.object(rbd_utils, 'RADOSClient')
|
||||||
def test_cleanup_volumes(self, mock_client, mock_rados, mock_rbd):
|
def test_cleanup_volumes(self, mock_client, mock_rados, mock_rbd):
|
||||||
|
mock_rbd.ImageBusy = FakeException
|
||||||
|
mock_rbd.ImageHasSnapshots = FakeException
|
||||||
instance = objects.Instance(id=1, uuid=uuids.instance,
|
instance = objects.Instance(id=1, uuid=uuids.instance,
|
||||||
task_state=None)
|
task_state=None)
|
||||||
# this is duplicated from nova/virt/libvirt/driver.py
|
# this is duplicated from nova/virt/libvirt/driver.py
|
||||||
@ -360,6 +369,8 @@ class RbdTestCase(test.NoDBTestCase):
|
|||||||
@mock.patch.object(rbd_utils, 'RADOSClient')
|
@mock.patch.object(rbd_utils, 'RADOSClient')
|
||||||
def _test_cleanup_exception(self, exception_name,
|
def _test_cleanup_exception(self, exception_name,
|
||||||
mock_client, mock_rados, mock_rbd):
|
mock_client, mock_rados, mock_rbd):
|
||||||
|
mock_rbd.ImageBusy = FakeException
|
||||||
|
mock_rbd.ImageHasSnapshots = FakeException
|
||||||
instance = objects.Instance(id=1, uuid=uuids.instance,
|
instance = objects.Instance(id=1, uuid=uuids.instance,
|
||||||
task_state=None)
|
task_state=None)
|
||||||
# this is duplicated from nova/virt/libvirt/driver.py
|
# this is duplicated from nova/virt/libvirt/driver.py
|
||||||
@ -393,6 +404,8 @@ class RbdTestCase(test.NoDBTestCase):
|
|||||||
@mock.patch.object(rbd_utils, 'RBDVolumeProxy')
|
@mock.patch.object(rbd_utils, 'RBDVolumeProxy')
|
||||||
def test_cleanup_volumes_pending_resize(self, mock_proxy, mock_client,
|
def test_cleanup_volumes_pending_resize(self, mock_proxy, mock_client,
|
||||||
mock_rados, mock_rbd):
|
mock_rados, mock_rbd):
|
||||||
|
mock_rbd.ImageBusy = FakeException
|
||||||
|
mock_rbd.ImageHasSnapshots = FakeException
|
||||||
instance = objects.Instance(id=1, uuid=uuids.instance,
|
instance = objects.Instance(id=1, uuid=uuids.instance,
|
||||||
task_state=None)
|
task_state=None)
|
||||||
# this is duplicated from nova/virt/libvirt/driver.py
|
# this is duplicated from nova/virt/libvirt/driver.py
|
||||||
@ -421,6 +434,8 @@ class RbdTestCase(test.NoDBTestCase):
|
|||||||
@mock.patch.object(rbd_utils, 'RADOSClient')
|
@mock.patch.object(rbd_utils, 'RADOSClient')
|
||||||
def test_cleanup_volumes_reverting_resize(self, mock_client, mock_rados,
|
def test_cleanup_volumes_reverting_resize(self, mock_client, mock_rados,
|
||||||
mock_rbd):
|
mock_rbd):
|
||||||
|
mock_rbd.ImageBusy = FakeException
|
||||||
|
mock_rbd.ImageHasSnapshots = FakeException
|
||||||
instance = objects.Instance(id=1, uuid=uuids.instance,
|
instance = objects.Instance(id=1, uuid=uuids.instance,
|
||||||
task_state=task_states.RESIZE_REVERTING)
|
task_state=task_states.RESIZE_REVERTING)
|
||||||
# this is duplicated from nova/virt/libvirt/driver.py
|
# this is duplicated from nova/virt/libvirt/driver.py
|
||||||
@ -443,6 +458,8 @@ class RbdTestCase(test.NoDBTestCase):
|
|||||||
@mock.patch.object(rbd_utils, 'rados')
|
@mock.patch.object(rbd_utils, 'rados')
|
||||||
@mock.patch.object(rbd_utils, 'RADOSClient')
|
@mock.patch.object(rbd_utils, 'RADOSClient')
|
||||||
def test_destroy_volume(self, mock_client, mock_rados, mock_rbd):
|
def test_destroy_volume(self, mock_client, mock_rados, mock_rbd):
|
||||||
|
mock_rbd.ImageBusy = FakeException
|
||||||
|
mock_rbd.ImageHasSnapshots = FakeException
|
||||||
rbd = mock_rbd.RBD.return_value
|
rbd = mock_rbd.RBD.return_value
|
||||||
vol = '12345_test'
|
vol = '12345_test'
|
||||||
client = mock_client.return_value
|
client = mock_client.return_value
|
||||||
|
@ -121,11 +121,11 @@ class RADOSClient(object):
|
|||||||
class RBDDriver(object):
|
class RBDDriver(object):
|
||||||
|
|
||||||
def __init__(self, pool, ceph_conf, rbd_user):
|
def __init__(self, pool, ceph_conf, rbd_user):
|
||||||
self.pool = pool.encode('utf8')
|
self.pool = pool
|
||||||
# NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:
|
# NOTE(angdraug): rados.Rados fails to connect if ceph_conf is None:
|
||||||
# https://github.com/ceph/ceph/pull/1787
|
# https://github.com/ceph/ceph/pull/1787
|
||||||
self.ceph_conf = ceph_conf.encode('utf8') if ceph_conf else ''
|
self.ceph_conf = ceph_conf or ''
|
||||||
self.rbd_user = rbd_user.encode('utf8') if rbd_user else None
|
self.rbd_user = rbd_user or None
|
||||||
if rbd is None:
|
if rbd is None:
|
||||||
raise RuntimeError(_('rbd python libraries not found'))
|
raise RuntimeError(_('rbd python libraries not found'))
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ class RBDDriver(object):
|
|||||||
try:
|
try:
|
||||||
client.connect()
|
client.connect()
|
||||||
pool_to_open = pool or self.pool
|
pool_to_open = pool or self.pool
|
||||||
ioctx = client.open_ioctx(pool_to_open.encode('utf-8'))
|
ioctx = client.open_ioctx(pool_to_open)
|
||||||
return client, ioctx
|
return client, ioctx
|
||||||
except rados.Error:
|
except rados.Error:
|
||||||
# shutdown cannot raise an exception
|
# shutdown cannot raise an exception
|
||||||
|
@ -14,7 +14,6 @@ nova.tests.unit.compute.test_host_api.ComputeHostAPICellsTestCase
|
|||||||
nova.tests.unit.network.test_manager.LdapDNSTestCase
|
nova.tests.unit.network.test_manager.LdapDNSTestCase
|
||||||
nova.tests.unit.test_matchers.TestDictMatches.test__str__
|
nova.tests.unit.test_matchers.TestDictMatches.test__str__
|
||||||
nova.tests.unit.test_wsgi.TestWSGIServerWithSSL
|
nova.tests.unit.test_wsgi.TestWSGIServerWithSSL
|
||||||
nova.tests.unit.virt.libvirt.storage.test_rbd.RbdTestCase
|
|
||||||
nova.tests.unit.virt.libvirt.test_firewall.IptablesFirewallTestCase
|
nova.tests.unit.virt.libvirt.test_firewall.IptablesFirewallTestCase
|
||||||
nova.tests.unit.virt.libvirt.test_imagebackend.EncryptedLvmTestCase
|
nova.tests.unit.virt.libvirt.test_imagebackend.EncryptedLvmTestCase
|
||||||
nova.tests.unit.virt.libvirt.test_imagebackend.LvmTestCase
|
nova.tests.unit.virt.libvirt.test_imagebackend.LvmTestCase
|
||||||
|
Loading…
Reference in New Issue
Block a user