|
12 | 12 | # |
13 | 13 |
|
14 | 14 | import mock |
| 15 | +from mock import call |
15 | 16 |
|
| 17 | +from osc_lib import exceptions |
16 | 18 | from osc_lib import utils as osc_utils |
17 | 19 |
|
18 | 20 | from openstackclient.network.v2 import router |
@@ -202,32 +204,82 @@ def test_create_with_AZ_hints(self): |
202 | 204 |
|
203 | 205 | class TestDeleteRouter(TestRouter): |
204 | 206 |
|
205 | | - # The router to delete. |
206 | | - _router = network_fakes.FakeRouter.create_one_router() |
| 207 | + # The routers to delete. |
| 208 | + _routers = network_fakes.FakeRouter.create_routers(count=2) |
207 | 209 |
|
208 | 210 | def setUp(self): |
209 | 211 | super(TestDeleteRouter, self).setUp() |
210 | 212 |
|
211 | 213 | self.network.delete_router = mock.Mock(return_value=None) |
212 | 214 |
|
213 | | - self.network.find_router = mock.Mock(return_value=self._router) |
| 215 | + self.network.find_router = ( |
| 216 | + network_fakes.FakeRouter.get_routers(self._routers)) |
214 | 217 |
|
215 | 218 | # Get the command object to test |
216 | 219 | self.cmd = router.DeleteRouter(self.app, self.namespace) |
217 | 220 |
|
218 | | - def test_delete(self): |
| 221 | + def test_router_delete(self): |
219 | 222 | arglist = [ |
220 | | - self._router.name, |
| 223 | + self._routers[0].name, |
221 | 224 | ] |
222 | 225 | verifylist = [ |
223 | | - ('router', [self._router.name]), |
| 226 | + ('router', [self._routers[0].name]), |
| 227 | + ] |
| 228 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 229 | + |
| 230 | + result = self.cmd.take_action(parsed_args) |
| 231 | + self.network.delete_router.assert_called_once_with(self._routers[0]) |
| 232 | + self.assertIsNone(result) |
| 233 | + |
| 234 | + def test_multi_routers_delete(self): |
| 235 | + arglist = [] |
| 236 | + verifylist = [] |
| 237 | + |
| 238 | + for r in self._routers: |
| 239 | + arglist.append(r.name) |
| 240 | + verifylist = [ |
| 241 | + ('router', arglist), |
224 | 242 | ] |
225 | 243 | parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
226 | 244 |
|
227 | 245 | result = self.cmd.take_action(parsed_args) |
228 | | - self.network.delete_router.assert_called_once_with(self._router) |
| 246 | + |
| 247 | + calls = [] |
| 248 | + for r in self._routers: |
| 249 | + calls.append(call(r)) |
| 250 | + self.network.delete_router.assert_has_calls(calls) |
229 | 251 | self.assertIsNone(result) |
230 | 252 |
|
| 253 | + def test_multi_routers_delete_with_exception(self): |
| 254 | + arglist = [ |
| 255 | + self._routers[0].name, |
| 256 | + 'unexist_router', |
| 257 | + ] |
| 258 | + verifylist = [ |
| 259 | + ('router', |
| 260 | + [self._routers[0].name, 'unexist_router']), |
| 261 | + ] |
| 262 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 263 | + |
| 264 | + find_mock_result = [self._routers[0], exceptions.CommandError] |
| 265 | + self.network.find_router = ( |
| 266 | + mock.MagicMock(side_effect=find_mock_result) |
| 267 | + ) |
| 268 | + |
| 269 | + try: |
| 270 | + self.cmd.take_action(parsed_args) |
| 271 | + self.fail('CommandError should be raised.') |
| 272 | + except exceptions.CommandError as e: |
| 273 | + self.assertEqual('1 of 2 routers failed to delete.', str(e)) |
| 274 | + |
| 275 | + self.network.find_router.assert_any_call( |
| 276 | + self._routers[0].name, ignore_missing=False) |
| 277 | + self.network.find_router.assert_any_call( |
| 278 | + 'unexist_router', ignore_missing=False) |
| 279 | + self.network.delete_router.assert_called_once_with( |
| 280 | + self._routers[0] |
| 281 | + ) |
| 282 | + |
231 | 283 |
|
232 | 284 | class TestListRouter(TestRouter): |
233 | 285 |
|
|
0 commit comments