|
14 | 14 | import copy |
15 | 15 | import mock |
16 | 16 |
|
| 17 | +from mock import call |
17 | 18 | from openstackclient.common import exceptions |
18 | 19 | from openstackclient.common import utils |
19 | 20 | from openstackclient.network.v2 import network |
@@ -321,33 +322,88 @@ def test_create_with_domain_identityv2(self): |
321 | 322 |
|
322 | 323 | class TestDeleteNetwork(TestNetwork): |
323 | 324 |
|
324 | | - # The network to delete. |
325 | | - _network = network_fakes.FakeNetwork.create_one_network() |
326 | | - |
327 | 325 | def setUp(self): |
328 | 326 | super(TestDeleteNetwork, self).setUp() |
329 | 327 |
|
| 328 | + # The networks to delete |
| 329 | + self._networks = network_fakes.FakeNetwork.create_networks(count=3) |
| 330 | + |
330 | 331 | self.network.delete_network = mock.Mock(return_value=None) |
331 | 332 |
|
332 | | - self.network.find_network = mock.Mock(return_value=self._network) |
| 333 | + self.network.find_network = network_fakes.FakeNetwork.get_networks( |
| 334 | + networks=self._networks) |
333 | 335 |
|
334 | 336 | # Get the command object to test |
335 | 337 | self.cmd = network.DeleteNetwork(self.app, self.namespace) |
336 | 338 |
|
337 | | - def test_delete(self): |
| 339 | + def test_delete_one_network(self): |
338 | 340 | arglist = [ |
339 | | - self._network.name, |
| 341 | + self._networks[0].name, |
340 | 342 | ] |
341 | 343 | verifylist = [ |
342 | | - ('network', [self._network.name]), |
| 344 | + ('network', [self._networks[0].name]), |
343 | 345 | ] |
| 346 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 347 | + |
| 348 | + result = self.cmd.take_action(parsed_args) |
344 | 349 |
|
| 350 | + self.network.delete_network.assert_called_once_with(self._networks[0]) |
| 351 | + self.assertIsNone(result) |
| 352 | + |
| 353 | + def test_delete_multiple_networks(self): |
| 354 | + arglist = [] |
| 355 | + for n in self._networks: |
| 356 | + arglist.append(n.id) |
| 357 | + verifylist = [ |
| 358 | + ('network', arglist), |
| 359 | + ] |
345 | 360 | parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 361 | + |
346 | 362 | result = self.cmd.take_action(parsed_args) |
347 | 363 |
|
348 | | - self.network.delete_network.assert_called_once_with(self._network) |
| 364 | + calls = [] |
| 365 | + for n in self._networks: |
| 366 | + calls.append(call(n)) |
| 367 | + self.network.delete_network.assert_has_calls(calls) |
349 | 368 | self.assertIsNone(result) |
350 | 369 |
|
| 370 | + def test_delete_multiple_networks_exception(self): |
| 371 | + arglist = [ |
| 372 | + self._networks[0].id, |
| 373 | + 'xxxx-yyyy-zzzz', |
| 374 | + self._networks[1].id, |
| 375 | + ] |
| 376 | + verifylist = [ |
| 377 | + ('network', arglist), |
| 378 | + ] |
| 379 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 380 | + |
| 381 | + # Fake exception in find_network() |
| 382 | + ret_find = [ |
| 383 | + self._networks[0], |
| 384 | + exceptions.NotFound('404'), |
| 385 | + self._networks[1], |
| 386 | + ] |
| 387 | + self.network.find_network = mock.Mock(side_effect=ret_find) |
| 388 | + |
| 389 | + # Fake exception in delete_network() |
| 390 | + ret_delete = [ |
| 391 | + None, |
| 392 | + exceptions.NotFound('404'), |
| 393 | + ] |
| 394 | + self.network.delete_network = mock.Mock(side_effect=ret_delete) |
| 395 | + |
| 396 | + self.assertRaises(exceptions.CommandError, self.cmd.take_action, |
| 397 | + parsed_args) |
| 398 | + |
| 399 | + # The second call of find_network() should fail. So delete_network() |
| 400 | + # was only called twice. |
| 401 | + calls = [ |
| 402 | + call(self._networks[0]), |
| 403 | + call(self._networks[1]), |
| 404 | + ] |
| 405 | + self.network.delete_network.assert_has_calls(calls) |
| 406 | + |
351 | 407 |
|
352 | 408 | class TestListNetwork(TestNetwork): |
353 | 409 |
|
@@ -730,36 +786,97 @@ def test_create_default_options(self): |
730 | 786 |
|
731 | 787 | class TestDeleteNetworkCompute(TestNetworkCompute): |
732 | 788 |
|
733 | | - # The network to delete. |
734 | | - _network = compute_fakes.FakeNetwork.create_one_network() |
735 | | - |
736 | 789 | def setUp(self): |
737 | 790 | super(TestDeleteNetworkCompute, self).setUp() |
738 | 791 |
|
739 | 792 | self.app.client_manager.network_endpoint_enabled = False |
740 | 793 |
|
| 794 | + # The networks to delete |
| 795 | + self._networks = compute_fakes.FakeNetwork.create_networks(count=3) |
| 796 | + |
741 | 797 | self.compute.networks.delete.return_value = None |
742 | 798 |
|
743 | 799 | # Return value of utils.find_resource() |
744 | | - self.compute.networks.get.return_value = self._network |
| 800 | + self.compute.networks.get = \ |
| 801 | + compute_fakes.FakeNetwork.get_networks(networks=self._networks) |
745 | 802 |
|
746 | 803 | # Get the command object to test |
747 | 804 | self.cmd = network.DeleteNetwork(self.app, None) |
748 | 805 |
|
749 | | - def test_network_delete(self): |
| 806 | + def test_delete_one_network(self): |
750 | 807 | arglist = [ |
751 | | - self._network.label, |
| 808 | + self._networks[0].label, |
752 | 809 | ] |
753 | 810 | verifylist = [ |
754 | | - ('network', [self._network.label]), |
| 811 | + ('network', [self._networks[0].label]), |
755 | 812 | ] |
| 813 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 814 | + |
| 815 | + result = self.cmd.take_action(parsed_args) |
756 | 816 |
|
| 817 | + self.compute.networks.delete.assert_called_once_with( |
| 818 | + self._networks[0].id) |
| 819 | + self.assertIsNone(result) |
| 820 | + |
| 821 | + def test_delete_multiple_networks(self): |
| 822 | + arglist = [] |
| 823 | + for n in self._networks: |
| 824 | + arglist.append(n.label) |
| 825 | + verifylist = [ |
| 826 | + ('network', arglist), |
| 827 | + ] |
757 | 828 | parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 829 | + |
758 | 830 | result = self.cmd.take_action(parsed_args) |
759 | 831 |
|
760 | | - self.compute.networks.delete.assert_called_once_with(self._network.id) |
| 832 | + calls = [] |
| 833 | + for n in self._networks: |
| 834 | + calls.append(call(n.id)) |
| 835 | + self.compute.networks.delete.assert_has_calls(calls) |
761 | 836 | self.assertIsNone(result) |
762 | 837 |
|
| 838 | + def test_delete_multiple_networks_exception(self): |
| 839 | + arglist = [ |
| 840 | + self._networks[0].id, |
| 841 | + 'xxxx-yyyy-zzzz', |
| 842 | + self._networks[1].id, |
| 843 | + ] |
| 844 | + verifylist = [ |
| 845 | + ('network', arglist), |
| 846 | + ] |
| 847 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 848 | + |
| 849 | + # Fake exception in utils.find_resource() |
| 850 | + # In compute v2, we use utils.find_resource() to find a network. |
| 851 | + # It calls get() several times, but find() only one time. So we |
| 852 | + # choose to fake get() always raise exception, then pass through. |
| 853 | + # And fake find() to find the real network or not. |
| 854 | + self.compute.networks.get.side_effect = Exception() |
| 855 | + ret_find = [ |
| 856 | + self._networks[0], |
| 857 | + Exception(), |
| 858 | + self._networks[1], |
| 859 | + ] |
| 860 | + self.compute.networks.find.side_effect = ret_find |
| 861 | + |
| 862 | + # Fake exception in delete() |
| 863 | + ret_delete = [ |
| 864 | + None, |
| 865 | + Exception(), |
| 866 | + ] |
| 867 | + self.compute.networks.delete = mock.Mock(side_effect=ret_delete) |
| 868 | + |
| 869 | + self.assertRaises(exceptions.CommandError, self.cmd.take_action, |
| 870 | + parsed_args) |
| 871 | + |
| 872 | + # The second call of utils.find_resource() should fail. So delete() |
| 873 | + # was only called twice. |
| 874 | + calls = [ |
| 875 | + call(self._networks[0].id), |
| 876 | + call(self._networks[1].id), |
| 877 | + ] |
| 878 | + self.compute.networks.delete.assert_has_calls(calls) |
| 879 | + |
763 | 880 |
|
764 | 881 | class TestListNetworkCompute(TestNetworkCompute): |
765 | 882 |
|
|
0 commit comments