summaryrefslogtreecommitdiff
path: root/openstackclient/tests/unit
diff options
context:
space:
mode:
authorHuanxuan Ao <huanxuan.ao@easystack.cn>2016-08-08 12:09:19 +0800
committerHuanxuan Ao <huanxuan.ao@easystack.cn>2016-09-11 14:08:27 +0800
commitd2273ecea5d540f4dacc89772870722355f2492f (patch)
tree61e3a4cadd4800abea2ae9758a4f9ab830294a8e /openstackclient/tests/unit
parent6f4acc45c62310d925c8f33a33c14d37990b6636 (diff)
downloadpython-openstackclient-d2273ecea5d540f4dacc89772870722355f2492f.tar.gz
Implement "volume transfer request delete" command
Add "volume transfer request delete" command in volume v1 and v2. Also add the unit tests, docs, release note and functional tests Change-Id: Ic3d375bc8df3312fac53c1800d75f48376b8c91c Implements: bp cinder-command-support Co-Authored-By: Sheel Rana <ranasheel2000@gmail.com>
Diffstat (limited to 'openstackclient/tests/unit')
-rw-r--r--openstackclient/tests/unit/volume/v1/fakes.py37
-rw-r--r--openstackclient/tests/unit/volume/v1/test_transfer_request.py84
-rw-r--r--openstackclient/tests/unit/volume/v2/fakes.py37
-rw-r--r--openstackclient/tests/unit/volume/v2/test_transfer_request.py84
4 files changed, 242 insertions, 0 deletions
diff --git a/openstackclient/tests/unit/volume/v1/fakes.py b/openstackclient/tests/unit/volume/v1/fakes.py
index f63553fe..c765a3c7 100644
--- a/openstackclient/tests/unit/volume/v1/fakes.py
+++ b/openstackclient/tests/unit/volume/v1/fakes.py
@@ -166,6 +166,43 @@ class FakeTransfer(object):
return transfer
+ @staticmethod
+ def create_transfers(attrs=None, count=2):
+ """Create multiple fake transfers.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes of transfer
+ :param Integer count:
+ The number of transfers to be faked
+ :return:
+ A list of FakeResource objects
+ """
+ transfers = []
+ for n in range(0, count):
+ transfers.append(FakeTransfer.create_one_transfer(attrs))
+
+ return transfers
+
+ @staticmethod
+ def get_transfers(transfers=None, count=2):
+ """Get an iterable MagicMock object with a list of faked transfers.
+
+ If transfers list is provided, then initialize the Mock object with the
+ list. Otherwise create one.
+
+ :param List transfers:
+ A list of FakeResource objects faking transfers
+ :param Integer count:
+ The number of transfers to be faked
+ :return
+ An iterable Mock object with side_effect set to a list of faked
+ transfers
+ """
+ if transfers is None:
+ transfers = FakeTransfer.create_transfers(count)
+
+ return mock.MagicMock(side_effect=transfers)
+
class FakeService(object):
"""Fake one or more Services."""
diff --git a/openstackclient/tests/unit/volume/v1/test_transfer_request.py b/openstackclient/tests/unit/volume/v1/test_transfer_request.py
index a5c31f8d..c3b8dbce 100644
--- a/openstackclient/tests/unit/volume/v1/test_transfer_request.py
+++ b/openstackclient/tests/unit/volume/v1/test_transfer_request.py
@@ -12,6 +12,12 @@
# under the License.
#
+import mock
+from mock import call
+
+from osc_lib import exceptions
+from osc_lib import utils
+
from openstackclient.tests.unit.volume.v1 import fakes as transfer_fakes
from openstackclient.volume.v1 import volume_transfer_request
@@ -97,6 +103,84 @@ class TestTransferCreate(TestTransfer):
self.assertEqual(self.data, data)
+class TestTransferDelete(TestTransfer):
+
+ volume_transfers = transfer_fakes.FakeTransfer.create_transfers(count=2)
+
+ def setUp(self):
+ super(TestTransferDelete, self).setUp()
+
+ self.transfer_mock.get = (
+ transfer_fakes.FakeTransfer.get_transfers(self.volume_transfers))
+ self.transfer_mock.delete.return_value = None
+
+ # Get the command object to mock
+ self.cmd = volume_transfer_request.DeleteTransferRequest(
+ self.app, None)
+
+ def test_transfer_delete(self):
+ arglist = [
+ self.volume_transfers[0].id
+ ]
+ verifylist = [
+ ("transfer_request", [self.volume_transfers[0].id])
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.transfer_mock.delete.assert_called_with(
+ self.volume_transfers[0].id)
+ self.assertIsNone(result)
+
+ def test_delete_multiple_transfers(self):
+ arglist = []
+ for v in self.volume_transfers:
+ arglist.append(v.id)
+ verifylist = [
+ ('transfer_request', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ calls = []
+ for v in self.volume_transfers:
+ calls.append(call(v.id))
+ self.transfer_mock.delete.assert_has_calls(calls)
+ self.assertIsNone(result)
+
+ def test_delete_multiple_transfers_with_exception(self):
+ arglist = [
+ self.volume_transfers[0].id,
+ 'unexist_transfer',
+ ]
+ verifylist = [
+ ('transfer_request', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ find_mock_result = [self.volume_transfers[0], exceptions.CommandError]
+ with mock.patch.object(utils, 'find_resource',
+ side_effect=find_mock_result) as find_mock:
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual('1 of 2 volume transfer requests failed '
+ 'to delete.', str(e))
+
+ find_mock.assert_any_call(
+ self.transfer_mock, self.volume_transfers[0].id)
+ find_mock.assert_any_call(self.transfer_mock, 'unexist_transfer')
+
+ self.assertEqual(2, find_mock.call_count)
+ self.transfer_mock.delete.assert_called_once_with(
+ self.volume_transfers[0].id,
+ )
+
+
class TestTransferList(TestTransfer):
# The Transfers to be listed
diff --git a/openstackclient/tests/unit/volume/v2/fakes.py b/openstackclient/tests/unit/volume/v2/fakes.py
index 51c952cd..e79a9407 100644
--- a/openstackclient/tests/unit/volume/v2/fakes.py
+++ b/openstackclient/tests/unit/volume/v2/fakes.py
@@ -59,6 +59,43 @@ class FakeTransfer(object):
return transfer
+ @staticmethod
+ def create_transfers(attrs=None, count=2):
+ """Create multiple fake transfers.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes of transfer
+ :param Integer count:
+ The number of transfers to be faked
+ :return:
+ A list of FakeResource objects
+ """
+ transfers = []
+ for n in range(0, count):
+ transfers.append(FakeTransfer.create_one_transfer(attrs))
+
+ return transfers
+
+ @staticmethod
+ def get_transfers(transfers=None, count=2):
+ """Get an iterable MagicMock object with a list of faked transfers.
+
+ If transfers list is provided, then initialize the Mock object with the
+ list. Otherwise create one.
+
+ :param List transfers:
+ A list of FakeResource objects faking transfers
+ :param Integer count:
+ The number of transfers to be faked
+ :return
+ An iterable Mock object with side_effect set to a list of faked
+ transfers
+ """
+ if transfers is None:
+ transfers = FakeTransfer.create_transfers(count)
+
+ return mock.MagicMock(side_effect=transfers)
+
class FakeTypeAccess(object):
"""Fake one or more volume type access."""
diff --git a/openstackclient/tests/unit/volume/v2/test_transfer_request.py b/openstackclient/tests/unit/volume/v2/test_transfer_request.py
index 8cc76bef..a18e4c52 100644
--- a/openstackclient/tests/unit/volume/v2/test_transfer_request.py
+++ b/openstackclient/tests/unit/volume/v2/test_transfer_request.py
@@ -12,6 +12,12 @@
# under the License.
#
+import mock
+from mock import call
+
+from osc_lib import exceptions
+from osc_lib import utils
+
from openstackclient.tests.unit.volume.v2 import fakes as transfer_fakes
from openstackclient.volume.v2 import volume_transfer_request
@@ -97,6 +103,84 @@ class TestTransferCreate(TestTransfer):
self.assertEqual(self.data, data)
+class TestTransferDelete(TestTransfer):
+
+ volume_transfers = transfer_fakes.FakeTransfer.create_transfers(count=2)
+
+ def setUp(self):
+ super(TestTransferDelete, self).setUp()
+
+ self.transfer_mock.get = (
+ transfer_fakes.FakeTransfer.get_transfers(self.volume_transfers))
+ self.transfer_mock.delete.return_value = None
+
+ # Get the command object to mock
+ self.cmd = volume_transfer_request.DeleteTransferRequest(
+ self.app, None)
+
+ def test_transfer_delete(self):
+ arglist = [
+ self.volume_transfers[0].id
+ ]
+ verifylist = [
+ ("transfer_request", [self.volume_transfers[0].id])
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.transfer_mock.delete.assert_called_with(
+ self.volume_transfers[0].id)
+ self.assertIsNone(result)
+
+ def test_delete_multiple_transfers(self):
+ arglist = []
+ for v in self.volume_transfers:
+ arglist.append(v.id)
+ verifylist = [
+ ('transfer_request', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ calls = []
+ for v in self.volume_transfers:
+ calls.append(call(v.id))
+ self.transfer_mock.delete.assert_has_calls(calls)
+ self.assertIsNone(result)
+
+ def test_delete_multiple_transfers_with_exception(self):
+ arglist = [
+ self.volume_transfers[0].id,
+ 'unexist_transfer',
+ ]
+ verifylist = [
+ ('transfer_request', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ find_mock_result = [self.volume_transfers[0], exceptions.CommandError]
+ with mock.patch.object(utils, 'find_resource',
+ side_effect=find_mock_result) as find_mock:
+ try:
+ self.cmd.take_action(parsed_args)
+ self.fail('CommandError should be raised.')
+ except exceptions.CommandError as e:
+ self.assertEqual('1 of 2 volume transfer requests failed '
+ 'to delete.', str(e))
+
+ find_mock.assert_any_call(
+ self.transfer_mock, self.volume_transfers[0].id)
+ find_mock.assert_any_call(self.transfer_mock, 'unexist_transfer')
+
+ self.assertEqual(2, find_mock.call_count)
+ self.transfer_mock.delete.assert_called_once_with(
+ self.volume_transfers[0].id,
+ )
+
+
class TestTransferList(TestTransfer):
# The Transfers to be listed