|
13 | 13 |
|
14 | 14 | import mock |
15 | 15 |
|
| 16 | +from mock import call |
| 17 | +from openstackclient.common import exceptions |
16 | 18 | from openstackclient.common import utils |
17 | 19 | from openstackclient.network.v2 import port |
18 | 20 | from openstackclient.tests.network.v2 import fakes as network_fakes |
@@ -174,30 +176,82 @@ def test_create_full_options(self): |
174 | 176 |
|
175 | 177 | class TestDeletePort(TestPort): |
176 | 178 |
|
177 | | - # The port to delete. |
178 | | - _port = network_fakes.FakePort.create_one_port() |
| 179 | + # Ports to delete. |
| 180 | + _ports = network_fakes.FakePort.create_ports(count=2) |
179 | 181 |
|
180 | 182 | def setUp(self): |
181 | 183 | super(TestDeletePort, self).setUp() |
182 | 184 |
|
183 | 185 | self.network.delete_port = mock.Mock(return_value=None) |
184 | | - self.network.find_port = mock.Mock(return_value=self._port) |
| 186 | + self.network.find_port = network_fakes.FakePort.get_ports( |
| 187 | + ports=self._ports) |
185 | 188 | # Get the command object to test |
186 | 189 | self.cmd = port.DeletePort(self.app, self.namespace) |
187 | 190 |
|
188 | | - def test_delete(self): |
| 191 | + def test_port_delete(self): |
189 | 192 | arglist = [ |
190 | | - self._port.name, |
| 193 | + self._ports[0].name, |
191 | 194 | ] |
192 | 195 | verifylist = [ |
193 | | - ('port', [self._port.name]), |
| 196 | + ('port', [self._ports[0].name]), |
194 | 197 | ] |
195 | 198 | parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
196 | 199 |
|
197 | 200 | result = self.cmd.take_action(parsed_args) |
198 | | - self.network.delete_port.assert_called_once_with(self._port) |
| 201 | + self.network.find_port.assert_called_once_with( |
| 202 | + self._ports[0].name, ignore_missing=False) |
| 203 | + self.network.delete_port.assert_called_once_with(self._ports[0]) |
199 | 204 | self.assertIsNone(result) |
200 | 205 |
|
| 206 | + def test_multi_ports_delete(self): |
| 207 | + arglist = [] |
| 208 | + verifylist = [] |
| 209 | + |
| 210 | + for p in self._ports: |
| 211 | + arglist.append(p.name) |
| 212 | + verifylist = [ |
| 213 | + ('port', arglist), |
| 214 | + ] |
| 215 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 216 | + |
| 217 | + result = self.cmd.take_action(parsed_args) |
| 218 | + |
| 219 | + calls = [] |
| 220 | + for p in self._ports: |
| 221 | + calls.append(call(p)) |
| 222 | + self.network.delete_port.assert_has_calls(calls) |
| 223 | + self.assertIsNone(result) |
| 224 | + |
| 225 | + def test_multi_ports_delete_with_exception(self): |
| 226 | + arglist = [ |
| 227 | + self._ports[0].name, |
| 228 | + 'unexist_port', |
| 229 | + ] |
| 230 | + verifylist = [ |
| 231 | + ('port', |
| 232 | + [self._ports[0].name, 'unexist_port']), |
| 233 | + ] |
| 234 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 235 | + |
| 236 | + find_mock_result = [self._ports[0], exceptions.CommandError] |
| 237 | + self.network.find_port = ( |
| 238 | + mock.MagicMock(side_effect=find_mock_result) |
| 239 | + ) |
| 240 | + |
| 241 | + try: |
| 242 | + self.cmd.take_action(parsed_args) |
| 243 | + self.fail('CommandError should be raised.') |
| 244 | + except exceptions.CommandError as e: |
| 245 | + self.assertEqual('1 of 2 ports failed to delete.', str(e)) |
| 246 | + |
| 247 | + self.network.find_port.assert_any_call( |
| 248 | + self._ports[0].name, ignore_missing=False) |
| 249 | + self.network.find_port.assert_any_call( |
| 250 | + 'unexist_port', ignore_missing=False) |
| 251 | + self.network.delete_port.assert_called_once_with( |
| 252 | + self._ports[0] |
| 253 | + ) |
| 254 | + |
201 | 255 |
|
202 | 256 | class TestListPort(TestPort): |
203 | 257 |
|
|
0 commit comments