summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-09-22 11:19:28 +0000
committerGerrit Code Review <review@openstack.org>2016-09-22 11:19:28 +0000
commit80ce3bee6fef0c3fed0816b8f0a5908cc5999fd3 (patch)
tree97b4d1f2565e7541e90b3bb0e060b00226d83bc8 /openstackclient
parent5dc8151b5851d8b0af0231733cd7bbc55ad1a4c8 (diff)
parent3ef7e29dd01a848ad08ce1b66deb9c5c3b1a4b1e (diff)
downloadpython-openstackclient-80ce3bee6fef0c3fed0816b8f0a5908cc5999fd3.tar.gz
Merge "Implement "volume transfer request show/accept" command"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/tests/functional/volume/v1/test_transfer_request.py38
-rw-r--r--openstackclient/tests/functional/volume/v2/test_transfer_request.py38
-rw-r--r--openstackclient/tests/unit/volume/v1/fakes.py2
-rw-r--r--openstackclient/tests/unit/volume/v1/test_transfer_request.py98
-rw-r--r--openstackclient/tests/unit/volume/v2/fakes.py2
-rw-r--r--openstackclient/tests/unit/volume/v2/test_transfer_request.py98
-rw-r--r--openstackclient/volume/v1/volume_transfer_request.py49
-rw-r--r--openstackclient/volume/v2/volume_transfer_request.py49
8 files changed, 368 insertions, 6 deletions
diff --git a/openstackclient/tests/functional/volume/v1/test_transfer_request.py b/openstackclient/tests/functional/volume/v1/test_transfer_request.py
index d8406b02..e03cd717 100644
--- a/openstackclient/tests/functional/volume/v1/test_transfer_request.py
+++ b/openstackclient/tests/functional/volume/v1/test_transfer_request.py
@@ -47,7 +47,45 @@ class TransferRequestTests(common.BaseVolumeTests):
cls.assertOutput('', raw_output_transfer)
cls.assertOutput('', raw_output_volume)
+ def test_volume_transfer_request_accept(self):
+ volume_name = uuid.uuid4().hex
+ name = uuid.uuid4().hex
+
+ # create a volume
+ opts = self.get_opts(['display_name'])
+ raw_output = self.openstack(
+ 'volume create --size 1 ' + volume_name + opts)
+ self.assertEqual(volume_name + '\n', raw_output)
+
+ # create volume transfer request for the volume
+ # and get the auth_key of the new transfer request
+ opts = self.get_opts(['auth_key'])
+ auth_key = self.openstack(
+ 'volume transfer request create ' +
+ volume_name +
+ ' --name ' + name + opts)
+ self.assertNotEqual('', auth_key)
+
+ # accept the volume transfer request
+ opts = self.get_opts(self.FIELDS)
+ raw_output = self.openstack(
+ 'volume transfer request accept ' + name +
+ ' ' + auth_key + opts)
+ self.assertEqual(name + '\n', raw_output)
+
+ # the volume transfer will be removed by default after accepted
+ # so just need to delete the volume here
+ raw_output = self.openstack(
+ 'volume delete ' + volume_name)
+ self.assertEqual('', raw_output)
+
def test_volume_transfer_request_list(self):
opts = self.get_opts(self.HEADERS)
raw_output = self.openstack('volume transfer request list' + opts)
self.assertIn(self.NAME, raw_output)
+
+ def test_volume_transfer_request_show(self):
+ opts = self.get_opts(self.FIELDS)
+ raw_output = self.openstack(
+ 'volume transfer request show ' + self.NAME + opts)
+ self.assertEqual(self.NAME + '\n', raw_output)
diff --git a/openstackclient/tests/functional/volume/v2/test_transfer_request.py b/openstackclient/tests/functional/volume/v2/test_transfer_request.py
index 4f02238b..1791f8ac 100644
--- a/openstackclient/tests/functional/volume/v2/test_transfer_request.py
+++ b/openstackclient/tests/functional/volume/v2/test_transfer_request.py
@@ -47,7 +47,45 @@ class TransferRequestTests(common.BaseVolumeTests):
cls.assertOutput('', raw_output_transfer)
cls.assertOutput('', raw_output_volume)
+ def test_volume_transfer_request_accept(self):
+ volume_name = uuid.uuid4().hex
+ name = uuid.uuid4().hex
+
+ # create a volume
+ opts = self.get_opts(self.FIELDS)
+ raw_output = self.openstack(
+ 'volume create --size 1 ' + volume_name + opts)
+ self.assertEqual(volume_name + '\n', raw_output)
+
+ # create volume transfer request for the volume
+ # and get the auth_key of the new transfer request
+ opts = self.get_opts(['auth_key'])
+ auth_key = self.openstack(
+ 'volume transfer request create ' +
+ volume_name +
+ ' --name ' + name + opts)
+ self.assertNotEqual('', auth_key)
+
+ # accept the volume transfer request
+ opts = self.get_opts(self.FIELDS)
+ raw_output = self.openstack(
+ 'volume transfer request accept ' + name +
+ ' ' + auth_key + opts)
+ self.assertEqual(name + '\n', raw_output)
+
+ # the volume transfer will be removed by default after accepted
+ # so just need to delete the volume here
+ raw_output = self.openstack(
+ 'volume delete ' + volume_name)
+ self.assertEqual('', raw_output)
+
def test_volume_transfer_request_list(self):
opts = self.get_opts(self.HEADERS)
raw_output = self.openstack('volume transfer request list' + opts)
self.assertIn(self.NAME, raw_output)
+
+ def test_volume_transfer_request_show(self):
+ opts = self.get_opts(self.FIELDS)
+ raw_output = self.openstack(
+ 'volume transfer request show ' + self.NAME + opts)
+ self.assertEqual(self.NAME + '\n', raw_output)
diff --git a/openstackclient/tests/unit/volume/v1/fakes.py b/openstackclient/tests/unit/volume/v1/fakes.py
index 33374499..ef52e4b0 100644
--- a/openstackclient/tests/unit/volume/v1/fakes.py
+++ b/openstackclient/tests/unit/volume/v1/fakes.py
@@ -146,8 +146,6 @@ class FakeTransfer(object):
"""
# Set default attribute
transfer_info = {
- 'auth_key': 'key-' + uuid.uuid4().hex,
- 'created_at': 'time-' + uuid.uuid4().hex,
'volume_id': 'volume-id-' + uuid.uuid4().hex,
'name': 'fake_transfer_name',
'id': 'id-' + uuid.uuid4().hex,
diff --git a/openstackclient/tests/unit/volume/v1/test_transfer_request.py b/openstackclient/tests/unit/volume/v1/test_transfer_request.py
index e89c5056..b3788d6e 100644
--- a/openstackclient/tests/unit/volume/v1/test_transfer_request.py
+++ b/openstackclient/tests/unit/volume/v1/test_transfer_request.py
@@ -36,6 +36,53 @@ class TestTransfer(transfer_fakes.TestVolumev1):
self.volumes_mock.reset_mock()
+class TestTransferAccept(TestTransfer):
+
+ columns = (
+ 'id',
+ 'name',
+ 'volume_id',
+ )
+
+ def setUp(self):
+ super(TestTransferAccept, self).setUp()
+
+ self.volume_transfer = (
+ transfer_fakes.FakeTransfer.create_one_transfer())
+ self.data = (
+ self.volume_transfer.id,
+ self.volume_transfer.name,
+ self.volume_transfer.volume_id,
+ )
+
+ self.transfer_mock.get.return_value = self.volume_transfer
+ self.transfer_mock.accept.return_value = self.volume_transfer
+
+ # Get the command object to test
+ self.cmd = volume_transfer_request.AcceptTransferRequest(
+ self.app, None)
+
+ def test_transfer_accept(self):
+ arglist = [
+ self.volume_transfer.id,
+ 'auth_key',
+ ]
+ verifylist = [
+ ('transfer_request', self.volume_transfer.id),
+ ('auth_key', 'auth_key'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.transfer_mock.get.assert_called_once_with(
+ self.volume_transfer.id)
+ self.transfer_mock.accept.assert_called_once_with(
+ self.volume_transfer.id, 'auth_key')
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
+
class TestTransferCreate(TestTransfer):
volume = transfer_fakes.FakeVolume.create_one_volume()
@@ -52,7 +99,10 @@ class TestTransferCreate(TestTransfer):
super(TestTransferCreate, self).setUp()
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
- attrs={'volume_id': self.volume.id})
+ attrs={'volume_id': self.volume.id,
+ 'auth_key': 'key',
+ 'created_at': 'time'}
+ )
self.data = (
self.volume_transfer.auth_key,
self.volume_transfer.created_at,
@@ -266,3 +316,49 @@ class TestTransferList(TestTransfer):
detailed=True,
search_opts={'all_tenants': 1}
)
+
+
+class TestTransferShow(TestTransfer):
+
+ columns = (
+ 'created_at',
+ 'id',
+ 'name',
+ 'volume_id',
+ )
+
+ def setUp(self):
+ super(TestTransferShow, self).setUp()
+
+ self.volume_transfer = (
+ transfer_fakes.FakeTransfer.create_one_transfer(
+ attrs={'created_at': 'time'})
+ )
+ self.data = (
+ self.volume_transfer.created_at,
+ self.volume_transfer.id,
+ self.volume_transfer.name,
+ self.volume_transfer.volume_id,
+ )
+
+ self.transfer_mock.get.return_value = self.volume_transfer
+
+ # Get the command object to test
+ self.cmd = volume_transfer_request.ShowTransferRequest(
+ self.app, None)
+
+ def test_transfer_show(self):
+ arglist = [
+ self.volume_transfer.id,
+ ]
+ verifylist = [
+ ('transfer_request', self.volume_transfer.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.transfer_mock.get.assert_called_once_with(
+ self.volume_transfer.id)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
diff --git a/openstackclient/tests/unit/volume/v2/fakes.py b/openstackclient/tests/unit/volume/v2/fakes.py
index 8d7ac831..2aeea60a 100644
--- a/openstackclient/tests/unit/volume/v2/fakes.py
+++ b/openstackclient/tests/unit/volume/v2/fakes.py
@@ -52,8 +52,6 @@ class FakeTransfer(object):
"""
# Set default attribute
transfer_info = {
- 'auth_key': 'key-' + uuid.uuid4().hex,
- 'created_at': 'time-' + uuid.uuid4().hex,
'volume_id': 'volume-id-' + uuid.uuid4().hex,
'name': 'fake_transfer_name',
'id': 'id-' + uuid.uuid4().hex,
diff --git a/openstackclient/tests/unit/volume/v2/test_transfer_request.py b/openstackclient/tests/unit/volume/v2/test_transfer_request.py
index b4f89089..8cd6534b 100644
--- a/openstackclient/tests/unit/volume/v2/test_transfer_request.py
+++ b/openstackclient/tests/unit/volume/v2/test_transfer_request.py
@@ -36,6 +36,53 @@ class TestTransfer(transfer_fakes.TestVolume):
self.volumes_mock.reset_mock()
+class TestTransferAccept(TestTransfer):
+
+ columns = (
+ 'id',
+ 'name',
+ 'volume_id',
+ )
+
+ def setUp(self):
+ super(TestTransferAccept, self).setUp()
+
+ self.volume_transfer = (
+ transfer_fakes.FakeTransfer.create_one_transfer())
+ self.data = (
+ self.volume_transfer.id,
+ self.volume_transfer.name,
+ self.volume_transfer.volume_id,
+ )
+
+ self.transfer_mock.get.return_value = self.volume_transfer
+ self.transfer_mock.accept.return_value = self.volume_transfer
+
+ # Get the command object to test
+ self.cmd = volume_transfer_request.AcceptTransferRequest(
+ self.app, None)
+
+ def test_transfer_accept(self):
+ arglist = [
+ self.volume_transfer.id,
+ 'auth_key',
+ ]
+ verifylist = [
+ ('transfer_request', self.volume_transfer.id),
+ ('auth_key', 'auth_key'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.transfer_mock.get.assert_called_once_with(
+ self.volume_transfer.id)
+ self.transfer_mock.accept.assert_called_once_with(
+ self.volume_transfer.id, 'auth_key')
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
+
class TestTransferCreate(TestTransfer):
volume = transfer_fakes.FakeVolume.create_one_volume()
@@ -52,7 +99,10 @@ class TestTransferCreate(TestTransfer):
super(TestTransferCreate, self).setUp()
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
- attrs={'volume_id': self.volume.id})
+ attrs={'volume_id': self.volume.id,
+ 'auth_key': 'key',
+ 'created_at': 'time'}
+ )
self.data = (
self.volume_transfer.auth_key,
self.volume_transfer.created_at,
@@ -266,3 +316,49 @@ class TestTransferList(TestTransfer):
detailed=True,
search_opts={'all_tenants': 1}
)
+
+
+class TestTransferShow(TestTransfer):
+
+ columns = (
+ 'created_at',
+ 'id',
+ 'name',
+ 'volume_id',
+ )
+
+ def setUp(self):
+ super(TestTransferShow, self).setUp()
+
+ self.volume_transfer = (
+ transfer_fakes.FakeTransfer.create_one_transfer(
+ attrs={'created_at': 'time'})
+ )
+ self.data = (
+ self.volume_transfer.created_at,
+ self.volume_transfer.id,
+ self.volume_transfer.name,
+ self.volume_transfer.volume_id,
+ )
+
+ self.transfer_mock.get.return_value = self.volume_transfer
+
+ # Get the command object to test
+ self.cmd = volume_transfer_request.ShowTransferRequest(
+ self.app, None)
+
+ def test_transfer_show(self):
+ arglist = [
+ self.volume_transfer.id,
+ ]
+ verifylist = [
+ ('transfer_request', self.volume_transfer.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.transfer_mock.get.assert_called_once_with(
+ self.volume_transfer.id)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
diff --git a/openstackclient/volume/v1/volume_transfer_request.py b/openstackclient/volume/v1/volume_transfer_request.py
index a985f8e5..4d6f2161 100644
--- a/openstackclient/volume/v1/volume_transfer_request.py
+++ b/openstackclient/volume/v1/volume_transfer_request.py
@@ -27,6 +27,34 @@ from openstackclient.i18n import _
LOG = logging.getLogger(__name__)
+class AcceptTransferRequest(command.ShowOne):
+ """Accept volume transfer request."""
+
+ def get_parser(self, prog_name):
+ parser = super(AcceptTransferRequest, self).get_parser(prog_name)
+ parser.add_argument(
+ 'transfer_request',
+ metavar="<transfer-request>",
+ help=_('Volume transfer request to accept (name or ID)'),
+ )
+ parser.add_argument(
+ 'auth_key',
+ metavar="<auth-key>",
+ help=_('Authentication key of transfer request'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ volume_client = self.app.client_manager.volume
+ transfer_request_id = utils.find_resource(
+ volume_client.transfers, parsed_args.transfer_request).id
+ transfer_accept = volume_client.transfers.accept(
+ transfer_request_id, parsed_args.auth_key)
+ transfer_accept._info.pop("links", None)
+
+ return zip(*sorted(six.iteritems(transfer_accept._info)))
+
+
class CreateTransferRequest(command.ShowOne):
"""Create volume transfer request."""
@@ -120,3 +148,24 @@ class ListTransferRequest(command.Lister):
return (column_headers, (
utils.get_item_properties(s, columns)
for s in volume_transfer_result))
+
+
+class ShowTransferRequest(command.ShowOne):
+ """Show volume transfer request details."""
+
+ def get_parser(self, prog_name):
+ parser = super(ShowTransferRequest, self).get_parser(prog_name)
+ parser.add_argument(
+ 'transfer_request',
+ metavar="<transfer-request>",
+ help=_('Volume transfer request to display (name or ID)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ volume_client = self.app.client_manager.volume
+ volume_transfer_request = utils.find_resource(
+ volume_client.transfers, parsed_args.transfer_request)
+ volume_transfer_request._info.pop("links", None)
+
+ return zip(*sorted(six.iteritems(volume_transfer_request._info)))
diff --git a/openstackclient/volume/v2/volume_transfer_request.py b/openstackclient/volume/v2/volume_transfer_request.py
index 8e79807c..9008fe3c 100644
--- a/openstackclient/volume/v2/volume_transfer_request.py
+++ b/openstackclient/volume/v2/volume_transfer_request.py
@@ -27,6 +27,34 @@ from openstackclient.i18n import _
LOG = logging.getLogger(__name__)
+class AcceptTransferRequest(command.ShowOne):
+ """Accept volume transfer request."""
+
+ def get_parser(self, prog_name):
+ parser = super(AcceptTransferRequest, self).get_parser(prog_name)
+ parser.add_argument(
+ 'transfer_request',
+ metavar="<transfer-request>",
+ help=_('Volume transfer request to accept (name or ID)'),
+ )
+ parser.add_argument(
+ 'auth_key',
+ metavar="<auth-key>",
+ help=_('Authentication key of transfer request'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ volume_client = self.app.client_manager.volume
+ transfer_request_id = utils.find_resource(
+ volume_client.transfers, parsed_args.transfer_request).id
+ transfer_accept = volume_client.transfers.accept(
+ transfer_request_id, parsed_args.auth_key)
+ transfer_accept._info.pop("links", None)
+
+ return zip(*sorted(six.iteritems(transfer_accept._info)))
+
+
class CreateTransferRequest(command.ShowOne):
"""Create volume transfer request."""
@@ -120,3 +148,24 @@ class ListTransferRequest(command.Lister):
return (column_headers, (
utils.get_item_properties(s, columns)
for s in volume_transfer_result))
+
+
+class ShowTransferRequest(command.ShowOne):
+ """Show volume transfer request details."""
+
+ def get_parser(self, prog_name):
+ parser = super(ShowTransferRequest, self).get_parser(prog_name)
+ parser.add_argument(
+ 'transfer_request',
+ metavar="<transfer-request>",
+ help=_('Volume transfer request to display (name or ID)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ volume_client = self.app.client_manager.volume
+ volume_transfer_request = utils.find_resource(
+ volume_client.transfers, parsed_args.transfer_request)
+ volume_transfer_request._info.pop("links", None)
+
+ return zip(*sorted(six.iteritems(volume_transfer_request._info)))