Skip to content

Commit 3ef7e29

Browse files
author
Huanxuan Ao
committed
Implement "volume transfer request show/accept" command
Add "volume transfer request show" and "volume transfer accept" commands in volume v1 and v2. Also add the unit tests, docs, release note and functional tests Implements: bp cinder-command-support Co-Authored-By: Sheel Rana <ranasheel2000@gmail.com> Change-Id: I5787fc486b3401307125caa316f517b9c96a95a5
1 parent 69c4f60 commit 3ef7e29

11 files changed

Lines changed: 411 additions & 7 deletions

File tree

doc/source/command-objects/volume-transfer-request.rst

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,27 @@ volume transfer request
44

55
Block Storage v1, v2
66

7+
volume transfer request accept
8+
------------------------------
9+
10+
Accept volume transfer request
11+
12+
.. program:: volume transfer request accept
13+
.. code:: bash
14+
15+
os volume transfer request accept
16+
<transfer-request>
17+
<auth-key>
18+
19+
.. _volume_transfer_request_accept:
20+
.. describe:: <transfer-request>
21+
22+
Volume transfer request to accept (name or ID)
23+
24+
.. describe:: <auth-key>
25+
26+
Authentication key of transfer request
27+
728
volume transfer request create
829
------------------------------
930

@@ -56,3 +77,19 @@ Lists all volume transfer requests.
5677

5778
Shows detail for all projects. Admin only.
5879
(defaults to False)
80+
81+
volume transfer request show
82+
----------------------------
83+
84+
Show volume transfer request details
85+
86+
.. program:: volume transfer request show
87+
.. code:: bash
88+
89+
os volume transfer request show
90+
<transfer-request>
91+
92+
.. _volume_transfer_request_show-transfer-request:
93+
.. describe:: <transfer-request>
94+
95+
Volume transfer request to display (name or ID)

openstackclient/tests/functional/volume/v1/test_transfer_request.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,45 @@ def tearDownClass(cls):
4747
cls.assertOutput('', raw_output_transfer)
4848
cls.assertOutput('', raw_output_volume)
4949

50+
def test_volume_transfer_request_accept(self):
51+
volume_name = uuid.uuid4().hex
52+
name = uuid.uuid4().hex
53+
54+
# create a volume
55+
opts = self.get_opts(['display_name'])
56+
raw_output = self.openstack(
57+
'volume create --size 1 ' + volume_name + opts)
58+
self.assertEqual(volume_name + '\n', raw_output)
59+
60+
# create volume transfer request for the volume
61+
# and get the auth_key of the new transfer request
62+
opts = self.get_opts(['auth_key'])
63+
auth_key = self.openstack(
64+
'volume transfer request create ' +
65+
volume_name +
66+
' --name ' + name + opts)
67+
self.assertNotEqual('', auth_key)
68+
69+
# accept the volume transfer request
70+
opts = self.get_opts(self.FIELDS)
71+
raw_output = self.openstack(
72+
'volume transfer request accept ' + name +
73+
' ' + auth_key + opts)
74+
self.assertEqual(name + '\n', raw_output)
75+
76+
# the volume transfer will be removed by default after accepted
77+
# so just need to delete the volume here
78+
raw_output = self.openstack(
79+
'volume delete ' + volume_name)
80+
self.assertEqual('', raw_output)
81+
5082
def test_volume_transfer_request_list(self):
5183
opts = self.get_opts(self.HEADERS)
5284
raw_output = self.openstack('volume transfer request list' + opts)
5385
self.assertIn(self.NAME, raw_output)
86+
87+
def test_volume_transfer_request_show(self):
88+
opts = self.get_opts(self.FIELDS)
89+
raw_output = self.openstack(
90+
'volume transfer request show ' + self.NAME + opts)
91+
self.assertEqual(self.NAME + '\n', raw_output)

openstackclient/tests/functional/volume/v2/test_transfer_request.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,45 @@ def tearDownClass(cls):
4747
cls.assertOutput('', raw_output_transfer)
4848
cls.assertOutput('', raw_output_volume)
4949

50+
def test_volume_transfer_request_accept(self):
51+
volume_name = uuid.uuid4().hex
52+
name = uuid.uuid4().hex
53+
54+
# create a volume
55+
opts = self.get_opts(self.FIELDS)
56+
raw_output = self.openstack(
57+
'volume create --size 1 ' + volume_name + opts)
58+
self.assertEqual(volume_name + '\n', raw_output)
59+
60+
# create volume transfer request for the volume
61+
# and get the auth_key of the new transfer request
62+
opts = self.get_opts(['auth_key'])
63+
auth_key = self.openstack(
64+
'volume transfer request create ' +
65+
volume_name +
66+
' --name ' + name + opts)
67+
self.assertNotEqual('', auth_key)
68+
69+
# accept the volume transfer request
70+
opts = self.get_opts(self.FIELDS)
71+
raw_output = self.openstack(
72+
'volume transfer request accept ' + name +
73+
' ' + auth_key + opts)
74+
self.assertEqual(name + '\n', raw_output)
75+
76+
# the volume transfer will be removed by default after accepted
77+
# so just need to delete the volume here
78+
raw_output = self.openstack(
79+
'volume delete ' + volume_name)
80+
self.assertEqual('', raw_output)
81+
5082
def test_volume_transfer_request_list(self):
5183
opts = self.get_opts(self.HEADERS)
5284
raw_output = self.openstack('volume transfer request list' + opts)
5385
self.assertIn(self.NAME, raw_output)
86+
87+
def test_volume_transfer_request_show(self):
88+
opts = self.get_opts(self.FIELDS)
89+
raw_output = self.openstack(
90+
'volume transfer request show ' + self.NAME + opts)
91+
self.assertEqual(self.NAME + '\n', raw_output)

openstackclient/tests/unit/volume/v1/fakes.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,6 @@ def create_one_transfer(attrs=None):
146146
"""
147147
# Set default attribute
148148
transfer_info = {
149-
'auth_key': 'key-' + uuid.uuid4().hex,
150-
'created_at': 'time-' + uuid.uuid4().hex,
151149
'volume_id': 'volume-id-' + uuid.uuid4().hex,
152150
'name': 'fake_transfer_name',
153151
'id': 'id-' + uuid.uuid4().hex,

openstackclient/tests/unit/volume/v1/test_transfer_request.py

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,53 @@ def setUp(self):
3636
self.volumes_mock.reset_mock()
3737

3838

39+
class TestTransferAccept(TestTransfer):
40+
41+
columns = (
42+
'id',
43+
'name',
44+
'volume_id',
45+
)
46+
47+
def setUp(self):
48+
super(TestTransferAccept, self).setUp()
49+
50+
self.volume_transfer = (
51+
transfer_fakes.FakeTransfer.create_one_transfer())
52+
self.data = (
53+
self.volume_transfer.id,
54+
self.volume_transfer.name,
55+
self.volume_transfer.volume_id,
56+
)
57+
58+
self.transfer_mock.get.return_value = self.volume_transfer
59+
self.transfer_mock.accept.return_value = self.volume_transfer
60+
61+
# Get the command object to test
62+
self.cmd = volume_transfer_request.AcceptTransferRequest(
63+
self.app, None)
64+
65+
def test_transfer_accept(self):
66+
arglist = [
67+
self.volume_transfer.id,
68+
'auth_key',
69+
]
70+
verifylist = [
71+
('transfer_request', self.volume_transfer.id),
72+
('auth_key', 'auth_key'),
73+
]
74+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
75+
76+
columns, data = self.cmd.take_action(parsed_args)
77+
78+
self.transfer_mock.get.assert_called_once_with(
79+
self.volume_transfer.id)
80+
self.transfer_mock.accept.assert_called_once_with(
81+
self.volume_transfer.id, 'auth_key')
82+
self.assertEqual(self.columns, columns)
83+
self.assertEqual(self.data, data)
84+
85+
3986
class TestTransferCreate(TestTransfer):
4087

4188
volume = transfer_fakes.FakeVolume.create_one_volume()
@@ -52,7 +99,10 @@ def setUp(self):
5299
super(TestTransferCreate, self).setUp()
53100

54101
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
55-
attrs={'volume_id': self.volume.id})
102+
attrs={'volume_id': self.volume.id,
103+
'auth_key': 'key',
104+
'created_at': 'time'}
105+
)
56106
self.data = (
57107
self.volume_transfer.auth_key,
58108
self.volume_transfer.created_at,
@@ -266,3 +316,49 @@ def test_transfer_list_with_argument(self):
266316
detailed=True,
267317
search_opts={'all_tenants': 1}
268318
)
319+
320+
321+
class TestTransferShow(TestTransfer):
322+
323+
columns = (
324+
'created_at',
325+
'id',
326+
'name',
327+
'volume_id',
328+
)
329+
330+
def setUp(self):
331+
super(TestTransferShow, self).setUp()
332+
333+
self.volume_transfer = (
334+
transfer_fakes.FakeTransfer.create_one_transfer(
335+
attrs={'created_at': 'time'})
336+
)
337+
self.data = (
338+
self.volume_transfer.created_at,
339+
self.volume_transfer.id,
340+
self.volume_transfer.name,
341+
self.volume_transfer.volume_id,
342+
)
343+
344+
self.transfer_mock.get.return_value = self.volume_transfer
345+
346+
# Get the command object to test
347+
self.cmd = volume_transfer_request.ShowTransferRequest(
348+
self.app, None)
349+
350+
def test_transfer_show(self):
351+
arglist = [
352+
self.volume_transfer.id,
353+
]
354+
verifylist = [
355+
('transfer_request', self.volume_transfer.id),
356+
]
357+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
358+
359+
columns, data = self.cmd.take_action(parsed_args)
360+
361+
self.transfer_mock.get.assert_called_once_with(
362+
self.volume_transfer.id)
363+
self.assertEqual(self.columns, columns)
364+
self.assertEqual(self.data, data)

openstackclient/tests/unit/volume/v2/fakes.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ def create_one_transfer(attrs=None):
5252
"""
5353
# Set default attribute
5454
transfer_info = {
55-
'auth_key': 'key-' + uuid.uuid4().hex,
56-
'created_at': 'time-' + uuid.uuid4().hex,
5755
'volume_id': 'volume-id-' + uuid.uuid4().hex,
5856
'name': 'fake_transfer_name',
5957
'id': 'id-' + uuid.uuid4().hex,

openstackclient/tests/unit/volume/v2/test_transfer_request.py

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,53 @@ def setUp(self):
3636
self.volumes_mock.reset_mock()
3737

3838

39+
class TestTransferAccept(TestTransfer):
40+
41+
columns = (
42+
'id',
43+
'name',
44+
'volume_id',
45+
)
46+
47+
def setUp(self):
48+
super(TestTransferAccept, self).setUp()
49+
50+
self.volume_transfer = (
51+
transfer_fakes.FakeTransfer.create_one_transfer())
52+
self.data = (
53+
self.volume_transfer.id,
54+
self.volume_transfer.name,
55+
self.volume_transfer.volume_id,
56+
)
57+
58+
self.transfer_mock.get.return_value = self.volume_transfer
59+
self.transfer_mock.accept.return_value = self.volume_transfer
60+
61+
# Get the command object to test
62+
self.cmd = volume_transfer_request.AcceptTransferRequest(
63+
self.app, None)
64+
65+
def test_transfer_accept(self):
66+
arglist = [
67+
self.volume_transfer.id,
68+
'auth_key',
69+
]
70+
verifylist = [
71+
('transfer_request', self.volume_transfer.id),
72+
('auth_key', 'auth_key'),
73+
]
74+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
75+
76+
columns, data = self.cmd.take_action(parsed_args)
77+
78+
self.transfer_mock.get.assert_called_once_with(
79+
self.volume_transfer.id)
80+
self.transfer_mock.accept.assert_called_once_with(
81+
self.volume_transfer.id, 'auth_key')
82+
self.assertEqual(self.columns, columns)
83+
self.assertEqual(self.data, data)
84+
85+
3986
class TestTransferCreate(TestTransfer):
4087

4188
volume = transfer_fakes.FakeVolume.create_one_volume()
@@ -52,7 +99,10 @@ def setUp(self):
5299
super(TestTransferCreate, self).setUp()
53100

54101
self.volume_transfer = transfer_fakes.FakeTransfer.create_one_transfer(
55-
attrs={'volume_id': self.volume.id})
102+
attrs={'volume_id': self.volume.id,
103+
'auth_key': 'key',
104+
'created_at': 'time'}
105+
)
56106
self.data = (
57107
self.volume_transfer.auth_key,
58108
self.volume_transfer.created_at,
@@ -266,3 +316,49 @@ def test_transfer_list_with_argument(self):
266316
detailed=True,
267317
search_opts={'all_tenants': 1}
268318
)
319+
320+
321+
class TestTransferShow(TestTransfer):
322+
323+
columns = (
324+
'created_at',
325+
'id',
326+
'name',
327+
'volume_id',
328+
)
329+
330+
def setUp(self):
331+
super(TestTransferShow, self).setUp()
332+
333+
self.volume_transfer = (
334+
transfer_fakes.FakeTransfer.create_one_transfer(
335+
attrs={'created_at': 'time'})
336+
)
337+
self.data = (
338+
self.volume_transfer.created_at,
339+
self.volume_transfer.id,
340+
self.volume_transfer.name,
341+
self.volume_transfer.volume_id,
342+
)
343+
344+
self.transfer_mock.get.return_value = self.volume_transfer
345+
346+
# Get the command object to test
347+
self.cmd = volume_transfer_request.ShowTransferRequest(
348+
self.app, None)
349+
350+
def test_transfer_show(self):
351+
arglist = [
352+
self.volume_transfer.id,
353+
]
354+
verifylist = [
355+
('transfer_request', self.volume_transfer.id),
356+
]
357+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
358+
359+
columns, data = self.cmd.take_action(parsed_args)
360+
361+
self.transfer_mock.get.assert_called_once_with(
362+
self.volume_transfer.id)
363+
self.assertEqual(self.columns, columns)
364+
self.assertEqual(self.data, data)

0 commit comments

Comments
 (0)