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

* Add volume list tests for v1 (a copy of the v2 tests)
* Converts volume v2 tests to use Identity v3 so domains can be tested
* Add volume list (v2) tests for new options
* Re-orders volume list options (both v1 and v2) to match
* MArks the new volume list (v2) options as v2-only in doc

Change-Id: I2181b2c48cfde2147d7d0ef135322df8a81e7ce8
This commit is contained in:
Dean Troyer 2015-10-16 16:02:07 -05:00
parent 9f51ccdf8c
commit 195a0edeb7
6 changed files with 366 additions and 27 deletions

View File

@ -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

View File

@ -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):

View File

@ -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
)

View File

@ -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',

View File

@ -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',

View File

@ -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',