Update share quota functional tests

- Updates the existent functional tests to accomplish with the two
  new quotas for share replicas.
- Add new functional tests for share replicas

Depends-On: I8ba7bc6f167c28d6c169b2187d0e1bda7cad3f69
Change-Id: I9c5df364bca666bbc32fb10b100a38f78888088a
This commit is contained in:
silvacarloss 2020-03-11 13:57:18 +00:00
parent 9d229583b0
commit ca4dd9f101
7 changed files with 318 additions and 15 deletions

View File

@ -30,7 +30,7 @@ ShareGroup = [
help="The minimum api microversion is configured to be the "
"value of the minimum microversion supported by Manila."),
cfg.StrOpt("max_api_microversion",
default="2.52",
default="2.53",
help="The maximum api microversion is configured to be the "
"value of the latest microversion supported by Manila."),
cfg.StrOpt("region",

View File

@ -1032,8 +1032,9 @@ class SharesV2Client(shares_client.SharesClient):
snapshots=None, gigabytes=None, snapshot_gigabytes=None,
share_networks=None,
share_groups=None, share_group_snapshots=None,
force=True, share_type=None,
url=None, version=LATEST_MICROVERSION):
force=True, share_type=None, share_replicas=None,
replica_gigabytes=None, url=None,
version=LATEST_MICROVERSION):
if url is None:
url = self._get_quotas_url(version)
url += '/%s' % tenant_id
@ -1056,6 +1057,10 @@ class SharesV2Client(shares_client.SharesClient):
put_body["share_groups"] = share_groups
if share_group_snapshots is not None:
put_body["share_group_snapshots"] = share_group_snapshots
if share_replicas is not None:
put_body["share_replicas"] = share_replicas
if replica_gigabytes is not None:
put_body["replica_gigabytes"] = replica_gigabytes
put_body = json.dumps({"quota_set": put_body})
resp, body = self.put(url, put_body, version=version)

View File

@ -26,6 +26,8 @@ from manila_tempest_tests import utils
CONF = config.CONF
PRE_SHARE_GROUPS_MICROVERSION = "2.39"
SHARE_GROUPS_MICROVERSION = "2.40"
PRE_SHARE_REPLICA_QUOTAS_MICROVERSION = "2.52"
SHARE_REPLICA_QUOTAS_MICROVERSION = "2.53"
@ddt.ddt
@ -54,6 +56,9 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
if utils.is_microversion_supported(SHARE_GROUPS_MICROVERSION):
self.assertGreater(int(quotas["share_groups"]), -2)
self.assertGreater(int(quotas["share_group_snapshots"]), -2)
if utils.share_replica_quotas_are_supported():
self.assertGreater(int(quotas["share_replicas"]), -2)
self.assertGreater(int(quotas["replica_gigabytes"]), -2)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
def test_show_quotas(self):
@ -66,6 +71,9 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
if utils.is_microversion_supported(SHARE_GROUPS_MICROVERSION):
self.assertGreater(int(quotas["share_groups"]), -2)
self.assertGreater(int(quotas["share_group_snapshots"]), -2)
if utils.share_replica_quotas_are_supported():
self.assertGreater(int(quotas["share_replicas"]), -2)
self.assertGreater(int(quotas["replica_gigabytes"]), -2)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
def test_show_quotas_for_user(self):
@ -79,6 +87,9 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
if utils.is_microversion_supported(SHARE_GROUPS_MICROVERSION):
self.assertGreater(int(quotas["share_groups"]), -2)
self.assertGreater(int(quotas["share_group_snapshots"]), -2)
if utils.share_replica_quotas_are_supported():
self.assertGreater(int(quotas["share_replicas"]), -2)
self.assertGreater(int(quotas["replica_gigabytes"]), -2)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@base.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
@ -99,6 +110,17 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
for key in ('share_groups', 'share_group_snapshots'):
self.assertNotIn(key, quotas)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@base.skip_if_microversion_not_supported(
PRE_SHARE_REPLICA_QUOTAS_MICROVERSION)
def test_show_replica_quotas_for_user_using_too_old_microversion(self):
quotas = self.shares_v2_client.show_quotas(
self.tenant_id, self.user_id,
version=PRE_SHARE_REPLICA_QUOTAS_MICROVERSION)
for key in('share_replicas', 'replica_gigabytes'):
self.assertNotIn(key, quotas)
@ddt.data(
('id', True),
('name', False),
@ -107,6 +129,10 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@base.skip_if_microversion_lt("2.39")
def test_show_share_type_quotas(self, share_type_key, is_st_public):
# Check if the used microversion supports 'share_replica' and
# 'replica_gigabytes' quotas
replica_quotas_supported = utils.share_replica_quotas_are_supported()
# Create share type
share_type = self.create_share_type(
data_utils.rand_name("tempest-manila"),
@ -117,6 +143,12 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
if 'share_type' in share_type:
share_type = share_type['share_type']
keys = ['shares', 'gigabytes', 'snapshots', 'snapshot_gigabytes']
if replica_quotas_supported:
keys.append('share_replicas')
keys.append('replica_gigabytes')
# Get current project quotas
p_quotas = self.shares_v2_client.show_quotas(self.tenant_id)
@ -125,7 +157,7 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
self.tenant_id, share_type=share_type[share_type_key])
# Share type quotas have values equal to project's
for key in ('shares', 'gigabytes', 'snapshots', 'snapshot_gigabytes'):
for key in keys:
self.assertEqual(st_quotas[key], p_quotas[key])
# Verify that we do not have share groups related quotas
@ -215,6 +247,31 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
self.tenant_id, self.user_id, **{quota_key: new_quota})
self.assertEqual(new_quota, int(updated[quota_key]))
@ddt.data(("share_replicas", False),
("share_replicas", True),
("replica_gigabytes", False),
("replica_gigabytes", True),
)
@ddt.unpack
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@base.skip_if_microversion_not_supported(SHARE_REPLICA_QUOTAS_MICROVERSION)
def test_update_user_quota_replica_related(self, quota_key, use_user_id):
kwargs = {}
# Update the kwargs with user_id in case the user_id need to be
# specified in the request
kwargs.update({'user_id': self.user_id}) if use_user_id else None
quotas = self.client.show_quotas(self.tenant_id, **kwargs)
new_quota = int(quotas[quota_key]) - 1
# Add the updated quota into the kwargs
kwargs.update({quota_key: new_quota})
# Set the new quota based on tenant or tenant and user_id
updated = self.client.update_quotas(
self.tenant_id, **kwargs)
self.assertEqual(new_quota, int(updated[quota_key]))
@ddt.data(
('id', True),
('name', False),
@ -223,14 +280,22 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@base.skip_if_microversion_lt("2.39")
def test_update_share_type_quota(self, share_type_key, is_st_public):
# Check if the used microversion supports 'share_replica' and
# 'replica_gigabytes' quotas
replica_quotas_supported = utils.share_replica_quotas_are_supported()
share_type = self._create_share_type()
# Get current quotas
quotas = self.client.show_quotas(
self.tenant_id, share_type=share_type[share_type_key])
quota_keys = ['shares', 'gigabytes', 'snapshots', 'snapshot_gigabytes']
if replica_quotas_supported:
quota_keys.append('share_replicas')
quota_keys.append('replica_gigabytes')
# Update quotas
for q in ('shares', 'gigabytes', 'snapshots', 'snapshot_gigabytes'):
for q in quota_keys:
new_quota = int(quotas[q]) - 1
# Set new quota
@ -242,7 +307,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
current_quotas = self.client.show_quotas(
self.tenant_id, share_type=share_type[share_type_key])
for q in ('shares', 'gigabytes', 'snapshots', 'snapshot_gigabytes'):
for q in quota_keys:
self.assertEqual(int(quotas[q]) - 1, current_quotas[q])
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@ -368,6 +433,9 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
data["share_groups"] = int(custom["share_groups"]) + 2
data["share_group_snapshots"] = (
int(custom["share_group_snapshots"]) + 2)
if utils.share_replica_quotas_are_supported():
data["share_replicas"] = int(custom["share_replicas"]) + 2
data["replica_gigabytes"] = int(custom["replica_gigabytes"]) + 2
# set new quota
updated = self.client.update_quotas(self.tenant_id, **data)
@ -385,6 +453,11 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
self.assertEqual(
data["share_group_snapshots"],
int(updated["share_group_snapshots"]))
if utils.share_replica_quotas_are_supported():
self.assertEqual(
data["share_replicas"], int(updated["share_replicas"]))
self.assertEqual(
data["replica_gigabytes"], int(updated["replica_gigabytes"]))
# Reset customized quotas
self.client.reset_quotas(self.tenant_id)
@ -406,6 +479,21 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
self.assertEqual(
int(default["share_group_snapshots"]),
int(reseted["share_group_snapshots"]))
if utils.share_replica_quotas_are_supported():
self.assertEqual(
int(default["share_replicas"]), int(reseted["share_replicas"]))
self.assertEqual(
int(default["replica_gigabytes"]),
int(reseted["replica_gigabytes"]))
def _get_new_replica_quota_values(self, default_quotas, value_to_set):
new_values = {
'share_replicas': int(
default_quotas['share_replicas']) + value_to_set,
'replica_gigabytes': int(
default_quotas['replica_gigabytes']) + value_to_set
}
return new_values
@ddt.data(
('id', True),
@ -416,17 +504,34 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
@base.skip_if_microversion_lt("2.39")
def test_reset_share_type_quotas(self, share_type_key, is_st_public):
share_type = self._create_share_type()
quota_keys = ['shares', 'snapshots', 'gigabytes', 'snapshot_gigabytes']
# get default_quotas
default_quotas = self.client.default_quotas(self.tenant_id)
kwargs = {}
# check if the replica_gigabytes and share_replicas quotas are
# supported
if utils.share_replica_quotas_are_supported():
kwargs.update(self._get_new_replica_quota_values(
default_quotas, 5))
quota_keys.append('share_replicas')
quota_keys.append('replica_gigabytes')
# set new quota for project
updated_p_quota = self.client.update_quotas(
self.tenant_id,
shares=int(default_quotas['shares']) + 5,
snapshots=int(default_quotas['snapshots']) + 5,
gigabytes=int(default_quotas['gigabytes']) + 5,
snapshot_gigabytes=int(default_quotas['snapshot_gigabytes']) + 5)
snapshot_gigabytes=int(default_quotas['snapshot_gigabytes']) + 5,
**kwargs
)
if utils.share_replica_quotas_are_supported():
kwargs.update(self._get_new_replica_quota_values(
default_quotas, 3))
# set new quota for project
self.client.update_quotas(
@ -435,7 +540,9 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
shares=int(default_quotas['shares']) + 3,
snapshots=int(default_quotas['snapshots']) + 3,
gigabytes=int(default_quotas['gigabytes']) + 3,
snapshot_gigabytes=int(default_quotas['snapshot_gigabytes']) + 3)
snapshot_gigabytes=int(default_quotas['snapshot_gigabytes']) + 3,
**kwargs
)
# reset share type quotas
self.client.reset_quotas(
@ -445,7 +552,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
current_p_quota = self.client.show_quotas(self.tenant_id)
current_st_quota = self.client.show_quotas(
self.tenant_id, share_type=share_type[share_type_key])
for key in ('shares', 'snapshots', 'gigabytes', 'snapshot_gigabytes'):
for key in quota_keys:
self.assertEqual(updated_p_quota[key], current_p_quota[key])
# Default share type quotas are current project quotas
@ -561,6 +668,30 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
self.assertEqual(-1, quotas.get('share_group_snapshots'))
@ddt.data("share_replicas", "replica_gigabytes")
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@utils.skip_if_microversion_not_supported(
SHARE_REPLICA_QUOTAS_MICROVERSION)
def test_unlimited_quota_for_replica_quotas(self, quota_key):
kwargs = {quota_key: -1}
self.client.update_quotas(self.tenant_id, **kwargs)
quotas = self.client.show_quotas(self.tenant_id)
self.assertEqual(-1, quotas.get(quota_key))
@ddt.data("share_replicas", "replica_gigabytes")
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@utils.skip_if_microversion_not_supported(
SHARE_REPLICA_QUOTAS_MICROVERSION)
def test_unlimited_user_quota_for_replica_quotas(self, quota_key):
kwargs = {quota_key: -1}
self.client.update_quotas(self.tenant_id, self.user_id, **kwargs)
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
self.assertEqual(-1, quotas.get(quota_key))
@ddt.data(11, -1)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
def test_update_user_quotas_bigger_than_project_quota(self, user_quota):

View File

@ -14,6 +14,7 @@
# under the License.
import ddt
import manila_tempest_tests.tests.api.test_replication_negative as rep_neg_test
from tempest import config
from tempest.lib import exceptions as lib_exc
import testtools
@ -25,6 +26,8 @@ from manila_tempest_tests import utils
CONF = config.CONF
PRE_SHARE_GROUPS_MICROVERSION = "2.39"
SHARE_GROUPS_MICROVERSION = "2.40"
PRE_SHARE_REPLICA_QUOTAS_MICROVERSION = "2.52"
SHARE_REPLICA_QUOTAS_MICROVERSION = "2.53"
@ddt.ddt
@ -88,6 +91,21 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
lib_exc.BadRequest,
client.update_quotas, client.tenant_id, **kwargs)
@ddt.data(
{"share_replicas": -2},
{"replica_gigabytes": -2},
)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@utils.skip_if_microversion_not_supported(
SHARE_REPLICA_QUOTAS_MICROVERSION)
def test_update_replica_quotas_wrong_data(self, kwargs):
# -1 is acceptable value as unlimited
client = self.get_client_with_isolated_creds(client_version='2')
self.assertRaises(
lib_exc.BadRequest,
client.update_quotas, client.tenant_id, **kwargs)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_create_share_with_size_bigger_than_quota(self):
quotas = self.shares_client.show_quotas(
@ -196,6 +214,26 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
force=False,
share_networks=bigger_value)
@ddt.data("share_replicas", "replica_gigabytes")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@utils.skip_if_microversion_not_supported(
SHARE_REPLICA_QUOTAS_MICROVERSION)
def test_try_set_user_quota_replicas_bigger_than_tenant_quota(self, key):
client = self.get_client_with_isolated_creds(client_version='2')
# get current quotas for tenant
tenant_quotas = client.show_quotas(client.tenant_id)
# try set user quota for snapshots bigger than tenant quota
bigger_value = int(tenant_quotas[key]) + 2
kwargs = {key: bigger_value}
self.assertRaises(lib_exc.BadRequest,
client.update_quotas,
client.tenant_id,
client.user_id,
force=False,
**kwargs)
@ddt.data(
('quota-sets', '2.0', 'show_quotas'),
('quota-sets', '2.0', 'default_quotas'),
@ -302,6 +340,24 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
client.tenant_id,
**kwargs)
@ddt.data("share_replicas", "replica_gigabytes")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@base.skip_if_microversion_not_supported(SHARE_REPLICA_QUOTAS_MICROVERSION)
def test_share_replica_quotas_using_too_old_microversion(self, quota_key):
client = self.get_client_with_isolated_creds(client_version='2')
tenant_quotas = client.show_quotas(
client.tenant_id, version=SHARE_REPLICA_QUOTAS_MICROVERSION)
kwargs = {
"version": PRE_SHARE_REPLICA_QUOTAS_MICROVERSION,
quota_key: tenant_quotas[quota_key],
}
self.assertRaises(
lib_exc.BadRequest,
client.update_quotas,
client.tenant_id,
**kwargs)
@ddt.data('show', 'reset', 'update')
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@base.skip_if_microversion_lt("2.38")
@ -366,3 +422,77 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
self.assertRaises(lib_exc.OverLimit,
self.create_share,
share_type_id=self.share_type_id)
@ddt.ddt
class ReplicaQuotasNegativeTest(rep_neg_test.ReplicationNegativeBase):
@classmethod
def skip_checks(cls):
super(ReplicaQuotasNegativeTest, cls).skip_checks()
if not CONF.share.run_quota_tests:
msg = "Quota tests are disabled."
raise cls.skipException(msg)
utils.check_skip_if_microversion_lt(SHARE_REPLICA_QUOTAS_MICROVERSION)
def _modify_quotas_for_test(self, quota_key, new_limit):
kwargs = {quota_key: new_limit}
# Get the original quota values
original_quota = self.admin_client.show_quotas(self.tenant_id)
# Update the current quotas
self.admin_client.update_quotas(self.tenant_id, **kwargs)
# Save the previous value
old_quota_values = {quota_key: original_quota[quota_key]}
# Get the updated quotas and add a cleanup
updated_quota = self.admin_client.show_quotas(self.tenant_id)
self.addCleanup(self.admin_client.update_quotas,
self.tenant_id,
**old_quota_values)
# Make sure that the new value was properly set
self.assertEqual(new_limit, updated_quota[quota_key])
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@ddt.data(('share_replicas', 2), ('replica_gigabytes', None))
@ddt.unpack
def test_create_replica_over_replica_limit(self, quota_key, new_limit):
# Define the quota values to be updated
new_limit = (int(self.share1['size'] * 2)
if quota_key == 'replica_gigabytes' else new_limit)
# Create an inactive share replica
self.create_share_replica(
self.share1["id"], self.replica_zone, cleanup_in_class=False)
# Modify the quota limit for this test
self._modify_quotas_for_test(quota_key, new_limit)
# Make sure that the request to create a third one will fail
self.assertRaises(lib_exc.OverLimit,
self.create_share_replica,
self.share1['id'],
availability_zone=self.replica_zone)
@testtools.skipUnless(
CONF.share.run_extend_tests,
"Share extend tests are disabled.")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
def test_extend_replica_over_limit(self):
# Define the quota values to be updated
quota_key = 'replica_gigabytes'
# Modify the quota limit for this test
self._modify_quotas_for_test(quota_key, new_limit=self.share1['size'])
new_size = self.share1['size'] + 1
# Make sure that the request to create a third one will fail
self.assertRaises(lib_exc.OverLimit,
self.shares_v2_client.extend_share,
self.share1['id'],
new_size)

View File

@ -15,12 +15,15 @@
import ddt
import itertools
from manila_tempest_tests import utils
from tempest import config
from testtools import testcase as tc
from manila_tempest_tests.tests.api import base
CONF = config.CONF
PRE_SHARE_REPLICAS_MICROVERSION = "2.52"
SHARE_REPLICAS_MICROVERSION = "2.53"
@ddt.ddt
@ -39,35 +42,49 @@ class SharesQuotasTest(base.BaseSharesTest):
@ddt.data('shares_client', 'shares_v2_client')
def test_default_quotas(self, client_name):
quotas = getattr(self, client_name).default_quotas(self.tenant_id)
uses_v2_client = client_name == 'shares_v2_client'
self.assertGreater(int(quotas["gigabytes"]), -2)
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
self.assertGreater(int(quotas["shares"]), -2)
self.assertGreater(int(quotas["snapshots"]), -2)
self.assertGreater(int(quotas["share_networks"]), -2)
if utils.share_replica_quotas_are_supported() and uses_v2_client:
self.assertGreater(int(quotas["share_replicas"]), -2)
self.assertGreater(int(quotas["replica_gigabytes"]), -2)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@ddt.data('shares_client', 'shares_v2_client')
def test_show_quotas(self, client_name):
quotas = getattr(self, client_name).show_quotas(self.tenant_id)
uses_v2_client = client_name == 'shares_v2_client'
self.assertGreater(int(quotas["gigabytes"]), -2)
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
self.assertGreater(int(quotas["shares"]), -2)
self.assertGreater(int(quotas["snapshots"]), -2)
self.assertGreater(int(quotas["share_networks"]), -2)
if utils.share_replica_quotas_are_supported() and uses_v2_client:
self.assertGreater(int(quotas["share_replicas"]), -2)
self.assertGreater(int(quotas["replica_gigabytes"]), -2)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@ddt.data('shares_client', 'shares_v2_client')
def test_show_quotas_for_user(self, client_name):
quotas = getattr(self, client_name).show_quotas(
self.tenant_id, self.user_id)
uses_v2_client = client_name == 'shares_v2_client'
self.assertGreater(int(quotas["gigabytes"]), -2)
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
self.assertGreater(int(quotas["shares"]), -2)
self.assertGreater(int(quotas["snapshots"]), -2)
self.assertGreater(int(quotas["share_networks"]), -2)
if utils.share_replica_quotas_are_supported() and uses_v2_client:
self.assertGreater(int(quotas["share_replicas"]), -2)
self.assertGreater(int(quotas["replica_gigabytes"]), -2)
@ddt.data(
*itertools.product(set(("2.25", CONF.share.max_api_microversion)),
(True, False)),
*itertools.product(set(("2.53", CONF.share.max_api_microversion)),
(True, False))
)
@ddt.unpack
@ -75,14 +92,27 @@ class SharesQuotasTest(base.BaseSharesTest):
@base.skip_if_microversion_not_supported("2.25")
def test_show_quotas_detail(self, microversion, with_user):
quota_args = {"tenant_id": self.tenant_id, "version": microversion, }
keys = ['gigabytes', 'snapshot_gigabytes', 'shares',
'snapshots', 'share_networks']
if utils.is_microversion_ge(microversion, SHARE_REPLICAS_MICROVERSION):
keys.append('share_replicas')
keys.append('replica_gigabytes')
if with_user:
quota_args.update({"user_id": self.user_id})
quotas = self.shares_v2_client.detail_quotas(**quota_args)
quota_keys = list(quotas.keys())
for outer in ('gigabytes', 'snapshot_gigabytes', 'shares',
'snapshots', 'share_networks'):
for outer in keys:
self.assertIn(outer, quota_keys)
outer_keys = list(quotas[outer].keys())
for inner in ('in_use', 'limit', 'reserved'):
self.assertIn(inner, outer_keys)
self.assertGreater(int(quotas[outer][inner]), -2)
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
@base.skip_if_microversion_not_supported(PRE_SHARE_REPLICAS_MICROVERSION)
def test_quota_detail_2_52_no_share_replica_quotas(self):
quota_args = {"tenant_id": self.tenant_id,
"version": PRE_SHARE_REPLICAS_MICROVERSION}
quotas = self.shares_v2_client.detail_quotas(**quota_args)
self.assertNotIn('share_replicas', quotas.keys())
self.assertNotIn('replica_gigabytes', quotas.keys())

View File

@ -28,11 +28,10 @@ CONF = config.CONF
_MIN_SUPPORTED_MICROVERSION = '2.11'
class ReplicationNegativeTest(base.BaseSharesMixedTest):
class ReplicationNegativeBase(base.BaseSharesMixedTest):
@classmethod
def skip_checks(cls):
super(ReplicationNegativeTest, cls).skip_checks()
super(ReplicationNegativeBase, cls).skip_checks()
if not CONF.share.run_replication_tests:
raise cls.skipException('Replication tests are disabled.')
@ -40,7 +39,7 @@ class ReplicationNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ReplicationNegativeTest, cls).resource_setup()
super(ReplicationNegativeBase, cls).resource_setup()
cls.admin_client = cls.admin_shares_v2_client
cls.replication_type = CONF.share.backend_replication_type
cls.multitenancy_enabled = (
@ -80,6 +79,9 @@ class ReplicationNegativeTest(base.BaseSharesMixedTest):
instance_id = share_instances[0]["id"]
return share, instance_id
class ReplicationNegativeTest(ReplicationNegativeBase):
def _is_replication_type_promotable(self):
if (self.replication_type
not in constants.REPLICATION_PROMOTION_CHOICES):

View File

@ -23,6 +23,7 @@ import testtools
CONF = config.CONF
SHARE_NETWORK_SUBNETS_MICROVERSION = '2.51'
SHARE_REPLICA_QUOTAS_MICROVERSION = "2.53"
def get_microversion_as_tuple(microversion_str):
@ -202,6 +203,10 @@ def share_network_subnets_are_supported():
return is_microversion_supported(SHARE_NETWORK_SUBNETS_MICROVERSION)
def share_replica_quotas_are_supported():
return is_microversion_supported(SHARE_REPLICA_QUOTAS_MICROVERSION)
def share_network_get_default_subnet(share_network):
return next((
subnet for subnet in share_network.get('share_network_subnets', [])