summaryrefslogtreecommitdiff
path: root/openstackclient/tests
diff options
context:
space:
mode:
authorSean McGinnis <sean.mcginnis@gmail.com>2018-10-09 15:24:51 -0500
committerSean McGinnis <sean.mcginnis@gmail.com>2018-10-09 15:31:35 -0500
commit4039d0d94f4eaf277f2b42c33ef873555f84f159 (patch)
tree8986d3b60c907266b555830a761b38e4135c81cf /openstackclient/tests
parent4e6f47e28ee09be7dac8848660bf38bdcd02570c (diff)
downloadpython-openstackclient-4039d0d94f4eaf277f2b42c33ef873555f84f159.tar.gz
Add volume backend capability show command
Adds and equivalend for "cinder get-capabilities" command to show the capabilities supported by a Cinder backend. Story: 1655624 Task: 26947 Change-Id: I38686a26cd503e45ce0102705a6632994ef10274 Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
Diffstat (limited to 'openstackclient/tests')
-rw-r--r--openstackclient/tests/unit/volume/v2/fakes.py61
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume_backend.py73
2 files changed, 134 insertions, 0 deletions
diff --git a/openstackclient/tests/unit/volume/v2/fakes.py b/openstackclient/tests/unit/volume/v2/fakes.py
index 481509f3..ad13f1b9 100644
--- a/openstackclient/tests/unit/volume/v2/fakes.py
+++ b/openstackclient/tests/unit/volume/v2/fakes.py
@@ -193,6 +193,65 @@ class FakeService(object):
return services
+class FakeCapability(object):
+ """Fake capability."""
+
+ @staticmethod
+ def create_one_capability(attrs=None):
+ """Create a fake volume backend capability.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes of the Capabilities.
+ :return:
+ A FakeResource object with capability name and attrs.
+ """
+ # Set default attribute
+ capability_info = {
+ "namespace": "OS::Storage::Capabilities::fake",
+ "vendor_name": "OpenStack",
+ "volume_backend_name": "lvmdriver-1",
+ "pool_name": "pool",
+ "driver_version": "2.0.0",
+ "storage_protocol": "iSCSI",
+ "display_name": "Capabilities of Cinder LVM driver",
+ "description": "Blah, blah.",
+ "visibility": "public",
+ "replication_targets": [],
+ "properties": {
+ "compression": {
+ "title": "Compression",
+ "description": "Enables compression.",
+ "type": "boolean"
+ },
+ "qos": {
+ "title": "QoS",
+ "description": "Enables QoS.",
+ "type": "boolean"
+ },
+ "replication": {
+ "title": "Replication",
+ "description": "Enables replication.",
+ "type": "boolean"
+ },
+ "thin_provisioning": {
+ "title": "Thin Provisioning",
+ "description": "Sets thin provisioning.",
+ "type": "boolean"
+ }
+ }
+ }
+
+ # Overwrite default attributes if there are some attributes set
+ capability_info.update(attrs or {})
+
+ capability = fakes.FakeResource(
+ None,
+ capability_info,
+ loaded=True)
+
+ return capability
+
+
class FakeVolumeClient(object):
def __init__(self, **kwargs):
@@ -233,6 +292,8 @@ class FakeVolumeClient(object):
self.cgsnapshots.resource_class = fakes.FakeResource(None, {})
self.auth_token = kwargs['token']
self.management_url = kwargs['endpoint']
+ self.capabilities = mock.Mock()
+ self.capabilities.resource_class = fakes.FakeResource(None, {})
class TestVolume(utils.TestCommand):
diff --git a/openstackclient/tests/unit/volume/v2/test_volume_backend.py b/openstackclient/tests/unit/volume/v2/test_volume_backend.py
new file mode 100644
index 00000000..73df6032
--- /dev/null
+++ b/openstackclient/tests/unit/volume/v2/test_volume_backend.py
@@ -0,0 +1,73 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
+from openstackclient.volume.v2 import volume_backend
+
+
+class TestShowVolumeCapability(volume_fakes.TestVolume):
+ """Test backend capability functionality."""
+
+ # The capability to be listed
+ capability = volume_fakes.FakeCapability.create_one_capability()
+
+ def setUp(self):
+ super(TestShowVolumeCapability, self).setUp()
+
+ # Get a shortcut to the capability Mock
+ self.capability_mock = self.app.client_manager.volume.capabilities
+ self.capability_mock.get.return_value = self.capability
+
+ # Get the command object to test
+ self.cmd = volume_backend.ShowCapability(self.app, None)
+
+ def test_capability_show(self):
+ arglist = [
+ 'fake',
+ ]
+ verifylist = [
+ ('host', 'fake'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ expected_columns = [
+ 'Title',
+ 'Key',
+ 'Type',
+ 'Description',
+ ]
+
+ # confirming if all expected columns are present in the result.
+ self.assertEqual(expected_columns, columns)
+
+ capabilities = [
+ 'Compression',
+ 'Replication',
+ 'QoS',
+ 'Thin Provisioning',
+ ]
+
+ # confirming if all expected values are present in the result.
+ for cap in data:
+ self.assertTrue(cap[0] in capabilities)
+
+ # checking if proper call was made to get capabilities
+ self.capability_mock.get.assert_called_with(
+ 'fake',
+ )