diff options
author | Rajat Dhasmana <rajatdhasmana@gmail.com> | 2020-01-16 17:43:32 +0000 |
---|---|---|
committer | Rajat Dhasmana <rajatdhasmana@gmail.com> | 2020-02-12 17:53:58 +0000 |
commit | 8d0d0521c62aafc5cb364dd8033635fd8f88f826 (patch) | |
tree | 2f29bcde2e1387bb0a8124c102c8ff08b417758d | |
parent | ed8e570e6302329f198dd832a0212b28131ce493 (diff) | |
download | python-cinderclient-8d0d0521c62aafc5cb364dd8033635fd8f88f826.tar.gz |
Add filters support for volume transfer
Currently ``id`` and ``volume_id`` filters are working
correctly for transfer-list command.
support for filtering by ``name`` is handled in patch
provided in Depends-On.
Since filtering by all parameters is supported by API,
we can happily add the filters option on the client for
volume transfers.
Also adds functional test for transfers.
Related-Bug: #1860100
Depends-On: https://review.opendev.org/#/c/703658/
Change-Id: I2fd3a6a7b9add65a9a21388df44efb6747065a74
-rw-r--r-- | cinderclient/tests/functional/base.py | 4 | ||||
-rw-r--r-- | cinderclient/tests/functional/test_cli.py | 33 | ||||
-rw-r--r-- | cinderclient/tests/unit/v3/test_shell.py | 32 | ||||
-rw-r--r-- | cinderclient/v3/shell.py | 11 | ||||
-rw-r--r-- | releasenotes/notes/support-filters-transfer-a1e7b728c7895a45.yaml | 6 |
5 files changed, 85 insertions, 1 deletions
diff --git a/cinderclient/tests/functional/base.py b/cinderclient/tests/functional/base.py index 349bd1e..3d2e2f8 100644 --- a/cinderclient/tests/functional/base.py +++ b/cinderclient/tests/functional/base.py @@ -156,7 +156,9 @@ class ClientTestBase(base.ClientTestBase): output = self.cinder(cmd, params=params) object = self._get_property_from_output(output) self.addCleanup(self.object_delete, object_name, object['id']) - self.wait_for_object_status(object_name, object['id'], 'available') + if object_name in ('volume', 'snapshot', 'backup'): + self.wait_for_object_status( + object_name, object['id'], 'available') return object def object_delete(self, object_name, object_id): diff --git a/cinderclient/tests/functional/test_cli.py b/cinderclient/tests/functional/test_cli.py index 0490df9..5f4a64a 100644 --- a/cinderclient/tests/functional/test_cli.py +++ b/cinderclient/tests/functional/test_cli.py @@ -102,3 +102,36 @@ class CinderBackupTests(base.ClientTestBase): self.check_object_deleted('volume', volume['id']) self.object_delete('backup', backup['id']) self.check_object_deleted('backup', backup['id']) + + +class VolumeTransferTests(base.ClientTestBase): + """Check of base cinder volume transfers command""" + + TRANSFER_PROPERTY = ('created_at', 'volume_id', 'id', 'auth_key', 'name') + TRANSFER_SHOW_PROPERTY = ('created_at', 'volume_id', 'id', 'name') + + def test_transfer_create_delete(self): + """Create and delete a volume transfer""" + volume = self.object_create('volume', params='1') + transfer = self.object_create('transfer', params=volume['id']) + self.assert_object_details(self.TRANSFER_PROPERTY, transfer.keys()) + self.object_delete('transfer', transfer['id']) + self.check_object_deleted('transfer', transfer['id']) + self.object_delete('volume', volume['id']) + self.check_object_deleted('volume', volume['id']) + + def test_transfer_show_delete_by_name(self): + """Show volume transfer by name""" + volume = self.object_create('volume', params='1') + self.object_create( + 'transfer', + params=('%s --name TEST_TRANSFER_SHOW' % volume['id'])) + output = self.cinder('transfer-show', params='TEST_TRANSFER_SHOW') + transfer = self._get_property_from_output(output) + self.assertEqual('TEST_TRANSFER_SHOW', transfer['name']) + self.assert_object_details(self.TRANSFER_SHOW_PROPERTY, + transfer.keys()) + self.object_delete('transfer', 'TEST_TRANSFER_SHOW') + self.check_object_deleted('transfer', 'TEST_TRANSFER_SHOW') + self.object_delete('volume', volume['id']) + self.check_object_deleted('volume', volume['id']) diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py index 74e702e..06c3d44 100644 --- a/cinderclient/tests/unit/v3/test_shell.py +++ b/cinderclient/tests/unit/v3/test_shell.py @@ -1560,3 +1560,35 @@ class ShellTest(utils.TestCase): for e in expected_commands: self.assertIn(' ' + e, help_text) + + @ddt.data( + # testcases for list transfers + {'command': + 'transfer-list --filters volume_id=456', + 'expected': + '/os-volume-transfer/detail?volume_id=456'}, + {'command': + 'transfer-list --filters id=123', + 'expected': + '/os-volume-transfer/detail?id=123'}, + {'command': + 'transfer-list --filters name=abc', + 'expected': + '/os-volume-transfer/detail?name=abc'}, + {'command': + 'transfer-list --filters name=abc --filters volume_id=456', + 'expected': + '/os-volume-transfer/detail?name=abc&volume_id=456'}, + {'command': + 'transfer-list --filters id=123 --filters volume_id=456', + 'expected': + '/os-volume-transfer/detail?id=123&volume_id=456'}, + {'command': + 'transfer-list --filters id=123 --filters name=abc', + 'expected': + '/os-volume-transfer/detail?id=123&name=abc'}, + ) + @ddt.unpack + def test_transfer_list_with_filters(self, command, expected): + self.run_command('--os-volume-api-version 3.52 %s' % command) + self.assert_called('GET', expected) diff --git a/cinderclient/v3/shell.py b/cinderclient/v3/shell.py index 9067b06..8c95b76 100644 --- a/cinderclient/v3/shell.py +++ b/cinderclient/v3/shell.py @@ -2569,12 +2569,22 @@ def do_transfer_create(cs, args): default=None, help='Sort keys and directions in the form of <key>[:<asc|desc>].', start_version='3.59') +@utils.arg('--filters', + action=AppendFilters, + type=six.text_type, + nargs='*', + start_version='3.52', + metavar='<key=value>', + default=None, + help="Filter key and value pairs.") def do_transfer_list(cs, args): """Lists all transfers.""" all_tenants = int(os.environ.get("ALL_TENANTS", args.all_tenants)) search_opts = { 'all_tenants': all_tenants, } + if AppendFilters.filters: + search_opts.update(shell_utils.extract_filters(AppendFilters.filters)) sort = getattr(args, 'sort', None) if sort: @@ -2587,3 +2597,4 @@ def do_transfer_list(cs, args): transfers = cs.transfers.list(search_opts=search_opts, sort=sort) columns = ['ID', 'Volume ID', 'Name'] utils.print_list(transfers, columns) + AppendFilters.filters = [] diff --git a/releasenotes/notes/support-filters-transfer-a1e7b728c7895a45.yaml b/releasenotes/notes/support-filters-transfer-a1e7b728c7895a45.yaml new file mode 100644 index 0000000..49308c9 --- /dev/null +++ b/releasenotes/notes/support-filters-transfer-a1e7b728c7895a45.yaml @@ -0,0 +1,6 @@ +--- +features: + - New command option ``--filters`` is added to ``transfer-list`` + command to support filtering. + The ``transfer-list`` command can be used with filters when + communicating with the Block Storage API version 3.52 and higher.
\ No newline at end of file |