Refactor TestVolumeShow with FakeVolume

In the meantime, add some static methods in FakeVolume for ease of use
and add info() method with "property" decorator in FakeResource to allow
those static methods to get fake information.

Change-Id: I98ad520f32afd529fda77a4592f645130282537f
Co-Authored-By: xiexs <xiexs@cn.fujitsu.com>
Implements: blueprint improve-volume-unittest-framework
This commit is contained in:
ting.wang 2016-05-12 10:13:13 +08:00 committed by ting wang
parent 553e154960
commit 0fa2e8df92
3 changed files with 54 additions and 9 deletions
openstackclient/tests

@ -189,6 +189,10 @@ class FakeResource(object):
def keys(self):
return self._info.keys()
@property
def info(self):
return self._info
class FakeResponse(requests.Response):

@ -451,6 +451,44 @@ class FakeVolume(object):
return mock.MagicMock(side_effect=volumes)
@staticmethod
def get_volume_columns(volume=None):
"""Get the volume columns from a faked volume object.
:param volume:
A FakeResource objects faking volume
:return
A tuple which may include the following keys:
('id', 'name', 'description', 'status', 'size', 'volume_type',
'metadata', 'snapshot', 'availability_zone', 'attachments')
"""
if volume is not None:
return tuple(k for k in sorted(volume.keys()))
return tuple([])
@staticmethod
def get_volume_data(volume=None):
"""Get the volume data from a faked volume object.
:param volume:
A FakeResource objects faking volume
:return
A tuple which may include the following values:
('ce26708d', 'fake_volume', 'fake description', 'available',
20, 'fake_lvmdriver-1', "Alpha='a', Beta='b', Gamma='g'",
1, 'nova', [{'device': '/dev/ice', 'server_id': '1233'}])
"""
data_list = []
if volume is not None:
for x in sorted(volume.keys()):
if x == 'tags':
# The 'tags' should be format_list
data_list.append(
common_utils.format_list(volume.info.get(x)))
else:
data_list.append(volume.info.get(x))
return tuple(data_list)
class FakeAvailabilityZone(object):
"""Fake one or more volume availability zones (AZs)."""

@ -772,27 +772,30 @@ class TestVolumeShow(TestVolume):
def setUp(self):
super(TestVolumeShow, self).setUp()
self.volumes_mock.get.return_value = fakes.FakeResource(
None,
copy.deepcopy(volume_fakes.VOLUME),
loaded=True)
self._volume = volume_fakes.FakeVolume.create_one_volume()
self.volumes_mock.get.return_value = self._volume
# Get the command object to test
self.cmd = volume.ShowVolume(self.app, None)
def test_volume_show(self):
arglist = [
volume_fakes.volume_id
self._volume.id
]
verifylist = [
("volume", volume_fakes.volume_id)
("volume", self._volume.id)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.get.assert_called_with(volume_fakes.volume_id)
self.volumes_mock.get.assert_called_with(self._volume.id)
self.assertEqual(volume_fakes.VOLUME_columns, columns)
self.assertEqual(volume_fakes.VOLUME_data, data)
self.assertEqual(
volume_fakes.FakeVolume.get_volume_columns(self._volume),
columns)
self.assertEqual(
volume_fakes.FakeVolume.get_volume_data(self._volume),
data)
class TestVolumeSet(TestVolume):