Merge "Add test_cases for cinder cli in v2 version"
diff --git a/tempest/cli/simple_read_only/test_cinder.py b/tempest/cli/simple_read_only/test_cinder.py
index 25157a4..eb5df63 100644
--- a/tempest/cli/simple_read_only/test_cinder.py
+++ b/tempest/cli/simple_read_only/test_cinder.py
@@ -136,3 +136,139 @@
if not region:
region = self.config.identity.region
self.cinder('list', flags='--os-region-name ' + region)
+
+
+class SimpleReadOnlyCinderClientV2Test(tempest.cli.ClientTestBase):
+ """Basic, read-only tests for Cinder v2 CLI client.
+
+ Checks return values and output of read-only commands.
+ These tests do not presume any content, nor do they create
+ their own. They only verify the structure of output if present.
+ """
+
+ version_flag = '--os-volume-api-version'
+ version_support = 2
+
+ def _get_resp_from_diff_versions(self, version_tuple, cmd, param=None):
+ # Get each result from different versions.
+ # Note(wingwj): If you want to get each cli response on v1&v2 version,
+ # the value of version_tuple should be (1, 2).
+ # The function will be also available for v3 in future
+
+ resp_set = []
+ for i in set(version_tuple):
+ if not isinstance(i, int) or \
+ i not in range(1, self.version_support + 1):
+ LOG.error("version_num must be a positive integer, "
+ "Cinder supports %s versions now"
+ % self.version_support)
+ continue
+ else:
+ if not param:
+ item = self.cinder(cmd,
+ flags=self.version_flag + ' ' + str(i))
+ else:
+ item = self.cinder(cmd, params=param,
+ flags=self.version_flag + ' ' + str(i))
+ resp_set.append(item)
+
+ return resp_set
+
+ def _check_accordance_between_two_versions(self, input1, input2,
+ expected=True):
+ # Check input1 and input2 is not Empty first
+ self.assertNotEqual("", input1)
+ self.assertNotEqual("", input2)
+ # Compare input1 and input2 based on 'expected' parameter
+ if expected:
+ self.assertEqual(input1, input2)
+ else:
+ self.assertNotEqual(input1, input2)
+
+ def test_cinder_volumes_list_in_v2(self):
+ cmd = 'list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ # This CLI representation in v1/v2 is different.
+ self._check_accordance_between_two_versions(v1, v2, False)
+
+ def test_cinder_absolute_limit_list_in_v2(self):
+ cmd = 'absolute-limits'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_backup_list_in_v2(self):
+ cmd = 'backup-list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_extra_specs_list_in_v2(self):
+ cmd = 'extra-specs-list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_quota_class_show_in_v2(self):
+ cmd = 'quota-class-show'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd, 'abc')
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_quota_defaults_in_v2(self):
+ cmd = 'quota-defaults'
+ v1, v2 = self._get_resp_from_diff_versions(
+ (1, 2), cmd, self.identity.admin_tenant_name)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_quota_show_in_v2(self):
+ cmd = 'quota-show'
+ v1, v2 = self._get_resp_from_diff_versions(
+ (1, 2), cmd, self.identity.admin_tenant_name)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_rate_limits_in_v2(self):
+ cmd = 'rate-limits'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_snapshot_list_in_v2(self):
+ cmd = 'snapshot-list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ # This CLI representation in v1/v2 is different.
+ self._check_accordance_between_two_versions(v1, v2, False)
+
+ def test_cinder_type_list_in_v2(self):
+ cmd = 'type-list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_availability_zone_list_in_v2(self):
+ cmd = 'availability-zone-list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_service_list_in_v2(self):
+ cmd = 'service-list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self.assertNotEqual("", v1)
+ self.assertNotEqual("", v2)
+
+ # The 'Updated_at' and 'State' item may be changed
+ # due to the periodical update-task. Need to omit.
+ v1 = self.parser.listing(v1)
+ v2 = self.parser.listing(v2)
+ for i in v1:
+ del i['Updated_at']
+ del i['State']
+ for j in v2:
+ del j['Updated_at']
+ del j['State']
+ self.assertEqual(v1, v2)
+
+ def test_cinder_transfer_list_in_v2(self):
+ cmd = 'transfer-list'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ self._check_accordance_between_two_versions(v1, v2, True)
+
+ def test_cinder_bash_completion_in_v2(self):
+ cmd = 'bash-completion'
+ v1, v2 = self._get_resp_from_diff_versions((1, 2), cmd)
+ # This CLI representation in v1/v2 is different.
+ self._check_accordance_between_two_versions(v1, v2, False)