Adds block_device_info related helpers

Adds helper methods needed in basevolumeutils.
This commit is contained in:
Claudiu Belu 2015-08-06 02:16:43 +03:00
parent 70f99ea9db
commit 9a349635c5
2 changed files with 91 additions and 14 deletions

View File

@ -71,16 +71,21 @@ class BaseVolumeUtilsTestCase(test.NoDBTestCase):
initiator_name = self._volutils.get_iscsi_initiator()
self.assertEqual(expected, initiator_name)
@mock.patch.object(basevolumeutils, 'driver')
def test_volume_in_mapping(self, mock_driver):
mock_driver.block_device_info_get_mapping.return_value = [
@mock.patch.object(basevolumeutils.BaseVolumeUtils, 'swap_is_usable')
@mock.patch.object(basevolumeutils.BaseVolumeUtils,
'block_device_info_get_ephemerals')
@mock.patch.object(basevolumeutils.BaseVolumeUtils,
'block_device_info_get_swap')
@mock.patch.object(basevolumeutils.BaseVolumeUtils,
'block_device_info_get_mapping')
def test_volume_in_mapping(self, mock_bdi_get_mapping, mock_bdi_get_swap,
mock_bdi_get_ephem, mock_swap_is_usable):
mock_bdi_get_mapping.return_value = [
{'mount_device': self._FAKE_MOUNT_DEVICE}]
mock_driver.block_device_info_get_swap = mock.MagicMock(
return_value=self._FAKE_SWAP)
mock_driver.block_device_info_get_ephemerals = mock.MagicMock(
return_value=[{'device_name': self._FAKE_DEVICE_NAME}])
mock_driver.swap_is_usable = mock.MagicMock(return_value=True)
mock_bdi_get_swap.return_value = self._FAKE_SWAP
mock_bdi_get_ephem.return_value = [
{'device_name': self._FAKE_DEVICE_NAME}]
mock_swap_is_usable.return_value = True
self.assertTrue(self._volutils.volume_in_mapping(
self._FAKE_MOUNT_DEVICE, mock.sentinel.FAKE_BLOCK_DEVICE_INFO))
@ -186,3 +191,54 @@ class BaseVolumeUtilsTestCase(test.NoDBTestCase):
init_session.SessionId = mock.sentinel.FAKE_SESSION_ID
return init_session
def test_block_device(self):
swap = {'device_name': '/dev/sdb',
'swap_size': 1}
ephemerals = [{'num': 0,
'virtual_name': 'ephemeral0',
'device_name': '/dev/sdc1',
'size': 1}]
block_device_mapping = [{'mount_device': '/dev/sde',
'device_path': 'fake_device'}]
block_device_info = {
'root_device_name': '/dev/sda',
'swap': swap,
'ephemerals': ephemerals,
'block_device_mapping': block_device_mapping}
empty_block_device_info = {}
self.assertEqual(
self._volutils.block_device_info_get_swap(block_device_info), swap)
self.assertIsNone(self._volutils.block_device_info_get_swap(
empty_block_device_info)['device_name'])
self.assertEqual(self._volutils.block_device_info_get_swap(
empty_block_device_info)['swap_size'], 0)
self.assertIsNone(
self._volutils.block_device_info_get_swap(
{'swap': None})['device_name'])
self.assertEqual(
self._volutils.block_device_info_get_swap(
{'swap': None})['swap_size'], 0)
self.assertIsNone(
self._volutils.block_device_info_get_swap(None)['device_name'])
self.assertEqual(
self._volutils.block_device_info_get_swap(None)['swap_size'], 0)
self.assertEqual(
self._volutils.block_device_info_get_ephemerals(block_device_info),
ephemerals)
self.assertEqual(
self._volutils.block_device_info_get_ephemerals(
empty_block_device_info), [])
self.assertEqual(
self._volutils.block_device_info_get_ephemerals(None), [])
def test_swap_is_usable(self):
self.assertFalse(self._volutils.swap_is_usable(None))
self.assertFalse(self._volutils.swap_is_usable({'device_name': None}))
self.assertFalse(self._volutils.swap_is_usable(
{'device_name': '/dev/sdb', 'swap_size': 0}))
self.assertTrue(self._volutils.swap_is_usable(
{'device_name': '/dev/sdb', 'swap_size': 1}))

View File

@ -32,7 +32,6 @@ from oslo_log import log as logging
from oslo_windows._i18n import _LI
from oslo_windows import _utils
from nova.virt import driver
LOG = logging.getLogger(__name__)
@ -82,16 +81,16 @@ class BaseVolumeUtils(object):
def volume_in_mapping(self, mount_device, block_device_info):
block_device_list = [_utils.strip_dev(vol['mount_device'])
for vol in
driver.block_device_info_get_mapping(
self.block_device_info_get_mapping(
block_device_info)]
swap = driver.block_device_info_get_swap(block_device_info)
if driver.swap_is_usable(swap):
swap = self.block_device_info_get_swap(block_device_info)
if self.swap_is_usable(swap):
block_device_list.append(
_utils.strip_dev(swap['device_name']))
block_device_list += [_utils.strip_dev(
ephemeral['device_name'])
for ephemeral in
driver.block_device_info_get_ephemerals(block_device_info)]
self.block_device_info_get_ephemerals(block_device_info)]
LOG.debug("block_device_list %s", block_device_list)
return _utils.strip_dev(mount_device) in block_device_list
@ -147,3 +146,25 @@ class BaseVolumeUtils(object):
for device in devices:
if device.DeviceNumber == drive_number:
return (device.TargetName, device.ScsiLun)
@staticmethod
def block_device_info_get_mapping(block_device_info):
block_device_info = block_device_info or {}
block_device_mapping = (
block_device_info.get('block_device_mapping') or [])
return block_device_mapping
@staticmethod
def block_device_info_get_swap(block_device_info):
block_device_info = block_device_info or {}
return block_device_info.get('swap') or {'device_name': None,
'swap_size': 0}
@staticmethod
def swap_is_usable(swap):
return swap and swap['device_name'] and swap['swap_size'] > 0
@staticmethod
def block_device_info_get_ephemerals(block_device_info):
block_device_info = block_device_info or {}
ephemerals = block_device_info.get('ephemerals') or []
return ephemerals