diff options
| author | Sheel Rana <ranasheel2000@gmail.com> | 2016-05-01 12:07:46 +0530 |
|---|---|---|
| committer | Rui Chen <chenrui.momo@gmail.com> | 2016-07-20 16:54:58 +0800 |
| commit | 5e8957ef7f4acea1ece06378c050021b64ea3f6f (patch) | |
| tree | a739029aacfd736dacef67c0d434479b33b18360 /openstackclient/tests | |
| parent | 55c1c575d63f4e9e6fc3f4dbb6c572e841b513d9 (diff) | |
| download | python-openstackclient-5e8957ef7f4acea1ece06378c050021b64ea3f6f.tar.gz | |
Show project access for volume type
OSC does not support to show project access details for
private volume types. This patch will provide support
for showing project access details for private volume types.
Closes-Bug:#1554891
Implements: bp cinder-command-support
Change-Id: I218fb07a6e69033e9f8570748eee1df8df9d6fdc
Diffstat (limited to 'openstackclient/tests')
| -rw-r--r-- | openstackclient/tests/volume/v2/fakes.py | 33 | ||||
| -rw-r--r-- | openstackclient/tests/volume/v2/test_type.py | 72 |
2 files changed, 105 insertions, 0 deletions
diff --git a/openstackclient/tests/volume/v2/fakes.py b/openstackclient/tests/volume/v2/fakes.py index 74e30a41..6809bebd 100644 --- a/openstackclient/tests/volume/v2/fakes.py +++ b/openstackclient/tests/volume/v2/fakes.py @@ -76,6 +76,38 @@ class FakeTransfer(object): return transfer +class FakeTypeAccess(object): + """Fake one or more volume type access.""" + + @staticmethod + def create_one_type_access(attrs=None): + """Create a fake volume type access for project. + + :param Dictionary attrs: + A dictionary with all attributes + :return: + A FakeResource object, with Volume_type_ID and Project_ID. + """ + if attrs is None: + attrs = {} + + # Set default attributes. + type_access_attrs = { + 'volume_type_id': 'volume-type-id-' + uuid.uuid4().hex, + 'project_id': 'project-id-' + uuid.uuid4().hex, + } + + # Overwrite default attributes. + type_access_attrs.update(attrs) + + type_access = fakes.FakeResource( + None, + type_access_attrs, + loaded=True) + + return type_access + + class FakeServiceClient(object): def __init__(self, **kwargs): @@ -666,6 +698,7 @@ class FakeType(object): "name": 'type-name-' + uuid.uuid4().hex, "description": 'type-description-' + uuid.uuid4().hex, "extra_specs": {"foo": "bar"}, + "is_public": True, } # Overwrite default attributes. diff --git a/openstackclient/tests/volume/v2/test_type.py b/openstackclient/tests/volume/v2/test_type.py index a7db2e49..e148bba4 100644 --- a/openstackclient/tests/volume/v2/test_type.py +++ b/openstackclient/tests/volume/v2/test_type.py @@ -13,6 +13,7 @@ # import copy +import mock from osc_lib import exceptions from osc_lib import utils @@ -46,6 +47,7 @@ class TestTypeCreate(TestType): columns = ( 'description', 'id', + 'is_public', 'name', ) @@ -56,6 +58,7 @@ class TestTypeCreate(TestType): self.data = ( self.new_volume_type.description, self.new_volume_type.id, + True, self.new_volume_type.name, ) @@ -357,8 +360,10 @@ class TestTypeSet(TestType): class TestTypeShow(TestType): columns = ( + 'access_project_ids', 'description', 'id', + 'is_public', 'name', 'properties', ) @@ -368,8 +373,10 @@ class TestTypeShow(TestType): self.volume_type = volume_fakes.FakeType.create_one_type() self.data = ( + None, self.volume_type.description, self.volume_type.id, + True, self.volume_type.name, utils.format_dict(self.volume_type.extra_specs) ) @@ -394,6 +401,71 @@ class TestTypeShow(TestType): self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) + def test_type_show_with_access(self): + arglist = [ + self.volume_type.id + ] + verifylist = [ + ("volume_type", self.volume_type.id) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + private_type = volume_fakes.FakeType.create_one_type( + attrs={'is_public': False}) + type_access_list = volume_fakes.FakeTypeAccess.create_one_type_access() + with mock.patch.object(self.types_mock, 'get', + return_value=private_type): + with mock.patch.object(self.types_access_mock, 'list', + return_value=[type_access_list]): + columns, data = self.cmd.take_action(parsed_args) + self.types_mock.get.assert_called_once_with( + self.volume_type.id) + self.types_access_mock.list.assert_called_once_with( + private_type.id) + + self.assertEqual(self.columns, columns) + private_type_data = ( + utils.format_list([type_access_list.project_id]), + private_type.description, + private_type.id, + private_type.is_public, + private_type.name, + utils.format_dict(private_type.extra_specs) + ) + self.assertEqual(private_type_data, data) + + def test_type_show_with_list_access_exec(self): + arglist = [ + self.volume_type.id + ] + verifylist = [ + ("volume_type", self.volume_type.id) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + private_type = volume_fakes.FakeType.create_one_type( + attrs={'is_public': False}) + with mock.patch.object(self.types_mock, 'get', + return_value=private_type): + with mock.patch.object(self.types_access_mock, 'list', + side_effect=Exception()): + columns, data = self.cmd.take_action(parsed_args) + self.types_mock.get.assert_called_once_with( + self.volume_type.id) + self.types_access_mock.list.assert_called_once_with( + private_type.id) + + self.assertEqual(self.columns, columns) + private_type_data = ( + None, + private_type.description, + private_type.id, + private_type.is_public, + private_type.name, + utils.format_dict(private_type.extra_specs) + ) + self.assertEqual(private_type_data, data) + class TestTypeUnset(TestType): |
