Merge "Follow-on for volume list - add tests, clean help"

This commit is contained in:
Jenkins
2015-10-19 22:46:43 +00:00
committed by Gerrit Code Review
6 changed files with 366 additions and 27 deletions

View File

@@ -109,34 +109,44 @@ List volumes
[--status <status>] [--status <status>]
[--long] [--long]
.. option:: --all-projects
.. option:: --project <project> .. option:: --project <project>
Filter results by project (name or ID) (admin only) Filter results by project (name or ID) (admin only)
*Volume version 2 only*
.. option:: --project-domain <project-domain> .. option:: --project-domain <project-domain>
Domain the project belongs to (name or ID). Domain the project belongs to (name or ID).
This can be used in case collisions between project names exist. This can be used in case collisions between project names exist.
*Volume version 2 only*
.. option:: --user <user> .. option:: --user <user>
Filter results by user (name or ID) (admin only) Filter results by user (name or ID) (admin only)
*Volume version 2 only*
.. option:: --user-domain <user-domain> .. option:: --user-domain <user-domain>
Domain the user belongs to (name or ID). Domain the user belongs to (name or ID).
This can be used in case collisions between user names exist. This can be used in case collisions between user names exist.
*Volume version 2 only*
.. option:: --name <name> .. option:: --name <name>
Filter results by name Filter results by volume name
.. option:: --status <status> .. option:: --status <status>
Filter results by status Filter results by status
.. option:: --all-projects
Include all projects (admin only)
.. option:: --long .. option:: --long
List additional fields in output List additional fields in output

View File

@@ -527,6 +527,188 @@ class TestVolumeCreate(TestVolume):
self.assertEqual(datalist, data) 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): class TestVolumeSet(TestVolume):
def setUp(self): def setUp(self):

View File

@@ -16,7 +16,7 @@ import copy
import mock import mock
from openstackclient.tests import fakes 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.image.v2 import fakes as image_fakes
from openstackclient.tests import utils from openstackclient.tests import utils
@@ -212,7 +212,7 @@ class TestVolume(utils.TestCommand):
endpoint=fakes.AUTH_URL, endpoint=fakes.AUTH_URL,
token=fakes.AUTH_TOKEN token=fakes.AUTH_TOKEN
) )
self.app.client_manager.identity = identity_fakes.FakeIdentityv2Client( self.app.client_manager.identity = identity_fakes.FakeIdentityv3Client(
endpoint=fakes.AUTH_URL, endpoint=fakes.AUTH_URL,
token=fakes.AUTH_TOKEN token=fakes.AUTH_TOKEN
) )

View File

@@ -15,7 +15,7 @@
import copy import copy
from openstackclient.tests import fakes 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.tests.volume.v2 import fakes as volume_fakes
from openstackclient.volume.v2 import volume 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 = self.app.client_manager.volume.volumes
self.volumes_mock.reset_mock() 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.projects_mock.reset_mock()
self.users_mock = self.app.client_manager.identity.users self.users_mock = self.app.client_manager.identity.users
@@ -560,32 +560,145 @@ class TestVolumeList(TestVolume):
), ) ), )
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
def test_volume_list_all_projects_option(self): def test_volume_list_project(self):
arglist = [ arglist = [
'--all-projects', '--project', identity_fakes.project_name,
] ]
verifylist = [ verifylist = [
('project', identity_fakes.project_name),
('long', False), ('long', False),
('all_projects', True), ('all_projects', False),
('name', None),
('status', None), ('status', None),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
collist = [ collist = (
'ID', 'ID',
'Display Name', 'Display Name',
'Status', 'Status',
'Size', 'Size',
'Attached to', 'Attached to',
] )
self.assertEqual(collist, columns) self.assertEqual(collist, tuple(columns))
server = volume_fakes.volume_attachment_server['server_id'] server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device'] device = volume_fakes.volume_attachment_server['device']
msg = 'Attached to %s on %s ' % (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 = (( datalist = ((
volume_fakes.volume_id, volume_fakes.volume_id,
volume_fakes.volume_name, volume_fakes.volume_name,
@@ -666,6 +779,41 @@ class TestVolumeList(TestVolume):
), ) ), )
self.assertEqual(datalist, tuple(data)) 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): def test_volume_list_long(self):
arglist = [ arglist = [
'--long', '--long',

View File

@@ -206,16 +206,16 @@ class ListVolume(lister.Lister):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(ListVolume, self).get_parser(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( parser.add_argument(
'--status', '--status',
metavar='<status>', metavar='<status>',
help='Filter results by status', help='Filter results by status',
) )
parser.add_argument(
'--name',
metavar='<name>',
help='Filter results by name',
)
parser.add_argument( parser.add_argument(
'--all-projects', '--all-projects',
action='store_true', action='store_true',

View File

@@ -16,7 +16,6 @@
import copy import copy
import logging import logging
import os
from cliff import command from cliff import command
from cliff import lister from cliff import lister
@@ -200,12 +199,6 @@ class ListVolume(lister.Lister):
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(ListVolume, self).get_parser(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( parser.add_argument(
'--project', '--project',
metavar='<project-id>', metavar='<project-id>',
@@ -221,13 +214,19 @@ class ListVolume(lister.Lister):
parser.add_argument( parser.add_argument(
'--name', '--name',
metavar='<name>', metavar='<name>',
help='Filter results by name', help='Filter results by volume name',
) )
parser.add_argument( parser.add_argument(
'--status', '--status',
metavar='<status>', metavar='<status>',
help='Filter results by 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( parser.add_argument(
'--long', '--long',
action='store_true', action='store_true',