Merge "Follow-on for volume list - add tests, clean help"
This commit is contained in:
commit
0f74e80c4b
@ -109,34 +109,44 @@ List volumes
|
||||
[--status <status>]
|
||||
[--long]
|
||||
|
||||
.. option:: --all-projects
|
||||
|
||||
.. option:: --project <project>
|
||||
|
||||
Filter results by project (name or ID) (admin only)
|
||||
|
||||
*Volume version 2 only*
|
||||
|
||||
.. option:: --project-domain <project-domain>
|
||||
|
||||
Domain the project belongs to (name or ID).
|
||||
This can be used in case collisions between project names exist.
|
||||
|
||||
*Volume version 2 only*
|
||||
|
||||
.. option:: --user <user>
|
||||
|
||||
Filter results by user (name or ID) (admin only)
|
||||
|
||||
*Volume version 2 only*
|
||||
|
||||
.. option:: --user-domain <user-domain>
|
||||
|
||||
Domain the user belongs to (name or ID).
|
||||
This can be used in case collisions between user names exist.
|
||||
|
||||
*Volume version 2 only*
|
||||
|
||||
.. option:: --name <name>
|
||||
|
||||
Filter results by name
|
||||
Filter results by volume name
|
||||
|
||||
.. option:: --status <status>
|
||||
|
||||
Filter results by status
|
||||
|
||||
.. option:: --all-projects
|
||||
|
||||
Include all projects (admin only)
|
||||
|
||||
.. option:: --long
|
||||
|
||||
List additional fields in output
|
||||
|
@ -527,6 +527,188 @@ class TestVolumeCreate(TestVolume):
|
||||
self.assertEqual(datalist, data)
|
||||
|
||||
|
||||
class TestVolumeList(TestVolume):
|
||||
|
||||
def setUp(self):
|
||||
super(TestVolumeList, self).setUp()
|
||||
|
||||
self.volumes_mock.list.return_value = [
|
||||
fakes.FakeResource(
|
||||
None,
|
||||
copy.deepcopy(volume_fakes.VOLUME),
|
||||
loaded=True,
|
||||
),
|
||||
]
|
||||
|
||||
# Get the command object to test
|
||||
self.cmd = volume.ListVolume(self.app, None)
|
||||
|
||||
def test_volume_list_no_options(self):
|
||||
arglist = []
|
||||
verifylist = [
|
||||
('long', False),
|
||||
('all_projects', False),
|
||||
('name', None),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
)
|
||||
self.assertEqual(collist, columns)
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
'',
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_name(self):
|
||||
arglist = [
|
||||
'--name', volume_fakes.volume_name,
|
||||
]
|
||||
verifylist = [
|
||||
('long', False),
|
||||
('all_projects', False),
|
||||
('name', volume_fakes.volume_name),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
)
|
||||
self.assertEqual(collist, tuple(columns))
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
'',
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_status(self):
|
||||
arglist = [
|
||||
'--status', volume_fakes.volume_status,
|
||||
]
|
||||
verifylist = [
|
||||
('long', False),
|
||||
('all_projects', False),
|
||||
('name', None),
|
||||
('status', volume_fakes.volume_status),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
)
|
||||
self.assertEqual(collist, tuple(columns))
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
'',
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_all_projects(self):
|
||||
arglist = [
|
||||
'--all-projects',
|
||||
]
|
||||
verifylist = [
|
||||
('long', False),
|
||||
('all_projects', True),
|
||||
('name', None),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
)
|
||||
self.assertEqual(collist, columns)
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
'',
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_long(self):
|
||||
arglist = [
|
||||
'--long',
|
||||
]
|
||||
verifylist = [
|
||||
('long', True),
|
||||
('all_projects', False),
|
||||
('name', None),
|
||||
('status', None),
|
||||
]
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Type',
|
||||
'Bootable',
|
||||
'Attached to',
|
||||
'Properties',
|
||||
)
|
||||
self.assertEqual(collist, columns)
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
volume_fakes.volume_type,
|
||||
'',
|
||||
'',
|
||||
"Alpha='a', Beta='b', Gamma='g'",
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
|
||||
class TestVolumeSet(TestVolume):
|
||||
|
||||
def setUp(self):
|
||||
|
@ -16,7 +16,7 @@ import copy
|
||||
import mock
|
||||
|
||||
from openstackclient.tests import fakes
|
||||
from openstackclient.tests.identity.v2_0 import fakes as identity_fakes
|
||||
from openstackclient.tests.identity.v3 import fakes as identity_fakes
|
||||
from openstackclient.tests.image.v2 import fakes as image_fakes
|
||||
from openstackclient.tests import utils
|
||||
|
||||
@ -212,7 +212,7 @@ class TestVolume(utils.TestCommand):
|
||||
endpoint=fakes.AUTH_URL,
|
||||
token=fakes.AUTH_TOKEN
|
||||
)
|
||||
self.app.client_manager.identity = identity_fakes.FakeIdentityv2Client(
|
||||
self.app.client_manager.identity = identity_fakes.FakeIdentityv3Client(
|
||||
endpoint=fakes.AUTH_URL,
|
||||
token=fakes.AUTH_TOKEN
|
||||
)
|
||||
|
@ -15,7 +15,7 @@
|
||||
import copy
|
||||
|
||||
from openstackclient.tests import fakes
|
||||
from openstackclient.tests.identity.v2_0 import fakes as identity_fakes
|
||||
from openstackclient.tests.identity.v3 import fakes as identity_fakes
|
||||
from openstackclient.tests.volume.v2 import fakes as volume_fakes
|
||||
from openstackclient.volume.v2 import volume
|
||||
|
||||
@ -27,7 +27,7 @@ class TestVolume(volume_fakes.TestVolume):
|
||||
self.volumes_mock = self.app.client_manager.volume.volumes
|
||||
self.volumes_mock.reset_mock()
|
||||
|
||||
self.projects_mock = self.app.client_manager.identity.tenants
|
||||
self.projects_mock = self.app.client_manager.identity.projects
|
||||
self.projects_mock.reset_mock()
|
||||
|
||||
self.users_mock = self.app.client_manager.identity.users
|
||||
@ -560,32 +560,145 @@ class TestVolumeList(TestVolume):
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_all_projects_option(self):
|
||||
def test_volume_list_project(self):
|
||||
arglist = [
|
||||
'--all-projects',
|
||||
'--project', identity_fakes.project_name,
|
||||
]
|
||||
verifylist = [
|
||||
('project', identity_fakes.project_name),
|
||||
('long', False),
|
||||
('all_projects', True),
|
||||
('name', None),
|
||||
('all_projects', False),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = [
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
]
|
||||
self.assertEqual(collist, columns)
|
||||
)
|
||||
self.assertEqual(collist, tuple(columns))
|
||||
|
||||
server = volume_fakes.volume_attachment_server['server_id']
|
||||
device = volume_fakes.volume_attachment_server['device']
|
||||
msg = 'Attached to %s on %s ' % (server, device)
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
msg,
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_project_domain(self):
|
||||
arglist = [
|
||||
'--project', identity_fakes.project_name,
|
||||
'--project-domain', identity_fakes.domain_name,
|
||||
]
|
||||
verifylist = [
|
||||
('project', identity_fakes.project_name),
|
||||
('project_domain', identity_fakes.domain_name),
|
||||
('long', False),
|
||||
('all_projects', False),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
)
|
||||
self.assertEqual(collist, tuple(columns))
|
||||
|
||||
server = volume_fakes.volume_attachment_server['server_id']
|
||||
device = volume_fakes.volume_attachment_server['device']
|
||||
msg = 'Attached to %s on %s ' % (server, device)
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
msg,
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_user(self):
|
||||
arglist = [
|
||||
'--user', identity_fakes.user_name,
|
||||
]
|
||||
verifylist = [
|
||||
('user', identity_fakes.user_name),
|
||||
('long', False),
|
||||
('all_projects', False),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
)
|
||||
self.assertEqual(collist, tuple(columns))
|
||||
|
||||
server = volume_fakes.volume_attachment_server['server_id']
|
||||
device = volume_fakes.volume_attachment_server['device']
|
||||
msg = 'Attached to %s on %s ' % (server, device)
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
msg,
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_user_domain(self):
|
||||
arglist = [
|
||||
'--user', identity_fakes.user_name,
|
||||
'--user-domain', identity_fakes.domain_name,
|
||||
]
|
||||
verifylist = [
|
||||
('user', identity_fakes.user_name),
|
||||
('user_domain', identity_fakes.domain_name),
|
||||
('long', False),
|
||||
('all_projects', False),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = (
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
)
|
||||
self.assertEqual(collist, tuple(columns))
|
||||
|
||||
server = volume_fakes.volume_attachment_server['server_id']
|
||||
device = volume_fakes.volume_attachment_server['device']
|
||||
msg = 'Attached to %s on %s ' % (server, device)
|
||||
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
@ -666,6 +779,41 @@ class TestVolumeList(TestVolume):
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_all_projects(self):
|
||||
arglist = [
|
||||
'--all-projects',
|
||||
]
|
||||
verifylist = [
|
||||
('long', False),
|
||||
('all_projects', True),
|
||||
('name', None),
|
||||
('status', None),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
collist = [
|
||||
'ID',
|
||||
'Display Name',
|
||||
'Status',
|
||||
'Size',
|
||||
'Attached to',
|
||||
]
|
||||
self.assertEqual(collist, columns)
|
||||
|
||||
server = volume_fakes.volume_attachment_server['server_id']
|
||||
device = volume_fakes.volume_attachment_server['device']
|
||||
msg = 'Attached to %s on %s ' % (server, device)
|
||||
datalist = ((
|
||||
volume_fakes.volume_id,
|
||||
volume_fakes.volume_name,
|
||||
volume_fakes.volume_status,
|
||||
volume_fakes.volume_size,
|
||||
msg,
|
||||
), )
|
||||
self.assertEqual(datalist, tuple(data))
|
||||
|
||||
def test_volume_list_long(self):
|
||||
arglist = [
|
||||
'--long',
|
||||
|
@ -206,16 +206,16 @@ class ListVolume(lister.Lister):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(ListVolume, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'--name',
|
||||
metavar='<name>',
|
||||
help='Filter results by volume name',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--status',
|
||||
metavar='<status>',
|
||||
help='Filter results by status',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--name',
|
||||
metavar='<name>',
|
||||
help='Filter results by name',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--all-projects',
|
||||
action='store_true',
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
import copy
|
||||
import logging
|
||||
import os
|
||||
|
||||
from cliff import command
|
||||
from cliff import lister
|
||||
@ -200,12 +199,6 @@ class ListVolume(lister.Lister):
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(ListVolume, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'--all-projects',
|
||||
action='store_true',
|
||||
default=bool(int(os.environ.get("ALL_PROJECTS", 0))),
|
||||
help='Include all projects (admin only)',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--project',
|
||||
metavar='<project-id>',
|
||||
@ -221,13 +214,19 @@ class ListVolume(lister.Lister):
|
||||
parser.add_argument(
|
||||
'--name',
|
||||
metavar='<name>',
|
||||
help='Filter results by name',
|
||||
help='Filter results by volume name',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--status',
|
||||
metavar='<status>',
|
||||
help='Filter results by status',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--all-projects',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='Include all projects (admin only)',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--long',
|
||||
action='store_true',
|
||||
|
Loading…
x
Reference in New Issue
Block a user