Skip to content

Commit c8c29e8

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add unit test for multi volume types delete"
2 parents 2fb5ac0 + 28f9a9c commit c8c29e8

2 files changed

Lines changed: 73 additions & 5 deletions

File tree

openstackclient/tests/unit/volume/v2/fakes.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,3 +903,23 @@ def create_types(attrs=None, count=2):
903903
volume_types.append(volume_type)
904904

905905
return volume_types
906+
907+
@staticmethod
908+
def get_types(types=None, count=2):
909+
"""Get an iterable MagicMock object with a list of faked types.
910+
911+
If types list is provided, then initialize the Mock object with the
912+
list. Otherwise create one.
913+
914+
:param List types:
915+
A list of FakeResource objects faking types
916+
:param Integer count:
917+
The number of types to be faked
918+
:return
919+
An iterable Mock object with side_effect set to a list of faked
920+
types
921+
"""
922+
if types is None:
923+
types = FakeType.create_types(count)
924+
925+
return mock.Mock(side_effect=types)

openstackclient/tests/unit/volume/v2/test_type.py

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#
1414

1515
import mock
16+
from mock import call
1617

1718
from osc_lib import exceptions
1819
from osc_lib import utils
@@ -133,31 +134,78 @@ def test_public_type_create_with_project(self):
133134

134135
class TestTypeDelete(TestType):
135136

136-
volume_type = volume_fakes.FakeType.create_one_type()
137+
volume_types = volume_fakes.FakeType.create_types(count=2)
137138

138139
def setUp(self):
139140
super(TestTypeDelete, self).setUp()
140141

141-
self.types_mock.get.return_value = self.volume_type
142+
self.types_mock.get = volume_fakes.FakeType.get_types(
143+
self.volume_types)
142144
self.types_mock.delete.return_value = None
143145

144146
# Get the command object to mock
145147
self.cmd = volume_type.DeleteVolumeType(self.app, None)
146148

147149
def test_type_delete(self):
148150
arglist = [
149-
self.volume_type.id
151+
self.volume_types[0].id
150152
]
151153
verifylist = [
152-
("volume_types", [self.volume_type.id])
154+
("volume_types", [self.volume_types[0].id])
153155
]
154156
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
155157

156158
result = self.cmd.take_action(parsed_args)
157159

158-
self.types_mock.delete.assert_called_with(self.volume_type)
160+
self.types_mock.delete.assert_called_with(self.volume_types[0])
159161
self.assertIsNone(result)
160162

163+
def test_delete_multiple_types(self):
164+
arglist = []
165+
for t in self.volume_types:
166+
arglist.append(t.id)
167+
verifylist = [
168+
('volume_types', arglist),
169+
]
170+
171+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
172+
result = self.cmd.take_action(parsed_args)
173+
174+
calls = []
175+
for t in self.volume_types:
176+
calls.append(call(t))
177+
self.types_mock.delete.assert_has_calls(calls)
178+
self.assertIsNone(result)
179+
180+
def test_delete_multiple_types_with_exception(self):
181+
arglist = [
182+
self.volume_types[0].id,
183+
'unexist_type',
184+
]
185+
verifylist = [
186+
('volume_types', arglist),
187+
]
188+
189+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
190+
191+
find_mock_result = [self.volume_types[0], exceptions.CommandError]
192+
with mock.patch.object(utils, 'find_resource',
193+
side_effect=find_mock_result) as find_mock:
194+
try:
195+
self.cmd.take_action(parsed_args)
196+
self.fail('CommandError should be raised.')
197+
except exceptions.CommandError as e:
198+
self.assertEqual('1 of 2 volume types failed to delete.',
199+
str(e))
200+
find_mock.assert_any_call(
201+
self.types_mock, self.volume_types[0].id)
202+
find_mock.assert_any_call(self.types_mock, 'unexist_type')
203+
204+
self.assertEqual(2, find_mock.call_count)
205+
self.types_mock.delete.assert_called_once_with(
206+
self.volume_types[0]
207+
)
208+
161209

162210
class TestTypeList(TestType):
163211

0 commit comments

Comments
 (0)