summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
authorHuanxuan Ao <huanxuan.ao@easystack.cn>2016-06-03 17:29:41 +0800
committerHuanxuan Ao <huanxuan.ao@easystack.cn>2016-06-07 16:00:54 +0800
commiteb421f6dabead63318139e2db5d0d11498c40a68 (patch)
treef64a725b57568e4cda397e1446bd2ad12bca654b /openstackclient/tests
parent48ffd8cf4b05b6836f48b8b509af61cb09550ae9 (diff)
downloadpython-openstackclient-eb421f6dabead63318139e2db5d0d11498c40a68.tar.gz
Support error handling for "port delete" command
"Port delete" command supported deleting multi ports before but didn't support error handing, This patch add the error handling following the rules in doc/source/command-errors.rst. Change-Id: I4ea69f2279763626d6a27cad1ca0ee99822d016d Partially-Implements: blueprint multi-argument-network
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/network/v2/test_port.py68
1 files changed, 61 insertions, 7 deletions
diff --git a/openstackclient/tests/network/v2/test_port.py b/openstackclient/tests/network/v2/test_port.py
index f2aa26cf..bb23cf63 100644
--- a/openstackclient/tests/network/v2/test_port.py
+++ b/openstackclient/tests/network/v2/test_port.py
@@ -13,6 +13,8 @@
import mock
+from mock import call
+from openstackclient.common import exceptions
from openstackclient.common import utils
from openstackclient.network.v2 import port
from openstackclient.tests.network.v2 import fakes as network_fakes
@@ -174,30 +176,82 @@ class TestCreatePort(TestPort):
class TestDeletePort(TestPort):
- # The port to delete.
- _port = network_fakes.FakePort.create_one_port()
+ # Ports to delete.
+ _ports = network_fakes.FakePort.create_ports(count=2)
def setUp(self):
super(TestDeletePort, self).setUp()
self.network.delete_port = mock.Mock(return_value=None)
- self.network.find_port = mock.Mock(return_value=self._port)
+ self.network.find_port = network_fakes.FakePort.get_ports(
+ ports=self._ports)
# Get the command object to test
self.cmd = port.DeletePort(self.app, self.namespace)
- def test_delete(self):
+ def test_port_delete(self):
arglist = [
- self._port.name,
+ self._ports[0].name,
]
verifylist = [
- ('port', [self._port.name]),
+ ('port', [self._ports[0].name]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.network.delete_port.assert_called_once_with(self._port)
+ self.network.find_port.assert_called_once_with(
+ self._ports[0].name, ignore_missing=False)
+ self.network.delete_port.assert_called_once_with(self._ports[0])
self.assertIsNone(result)
+ def test_multi_ports_delete(self):
+ arglist = []
+ verifylist = []
+
+ for p in self._ports:
+ arglist.append(p.name)
+ verifylist = [
+ ('port', arglist),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ calls = []
+ for p in self._ports:
+ calls.append(call(p))
+ self.network.delete_port.assert_has_calls(calls)
+ self.assertIsNone(result)
+
+ def test_multi_ports_delete_with_exception(self):
+ arglist = [
+ self._ports[0].name,
+ 'unexist_port',
+ ]
+ verifylist = [
+ ('port',
+ [self._ports[0].name, 'unexist_port']),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ find_mock_result = [self._ports[0], exceptions.CommandError]
+ self.network.find_port = (
+ mock.MagicMock(side_effect=find_mock_result)
+ )
+
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual('1 of 2 ports failed to delete.', str(e))
+
+ self.network.find_port.assert_any_call(
+ self._ports[0].name, ignore_missing=False)
+ self.network.find_port.assert_any_call(
+ 'unexist_port', ignore_missing=False)
+ self.network.delete_port.assert_called_once_with(
+ self._ports[0]
+ )
+
class TestListPort(TestPort):