Merge "Fix availability zones tests"
This commit is contained in:
commit
3f92a6a827
|
@ -41,14 +41,16 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
|||
raise share_exceptions.ShareReplicationTypeException(
|
||||
replication_type=cls.replication_type
|
||||
)
|
||||
cls.zones = cls.get_availability_zones(client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
extra_specs = {"replication_type": cls.replication_type}
|
||||
cls.share_type = cls._create_share_type(extra_specs)
|
||||
cls.share_type_id = cls.share_type['id']
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type, client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# Create share with above share_type
|
||||
cls.share = cls.create_share(share_type_id=cls.share_type_id,
|
||||
availability_zone=cls.share_zone,
|
||||
|
@ -71,7 +73,8 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
|||
raise self.skipException(
|
||||
msg % ','.join(constants.REPLICATION_PROMOTION_CHOICES))
|
||||
share = self.create_share(
|
||||
share_type_id=self.share_type_id, client=self.admin_client)
|
||||
share_type_id=self.share_type_id, client=self.admin_client,
|
||||
availability_zone=self.share_zone)
|
||||
original_replica = self.admin_client.list_share_replicas(
|
||||
share_id=share['id'])[0]
|
||||
|
||||
|
|
|
@ -42,14 +42,17 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
|||
raise share_exceptions.ShareReplicationTypeException(
|
||||
replication_type=cls.replication_type
|
||||
)
|
||||
cls.zones = cls.get_availability_zones(client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# create share type
|
||||
extra_specs = {"replication_type": cls.replication_type}
|
||||
cls.share_type = cls._create_share_type(extra_specs)
|
||||
cls.share_type_id = cls.share_type['id']
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type, client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# create share
|
||||
cls.share = cls.create_share(size=CONF.share.share_size + 1,
|
||||
share_type_id=cls.share_type_id,
|
||||
|
|
|
@ -687,18 +687,56 @@ class BaseSharesTest(test.BaseTestCase):
|
|||
return sg_snapshot
|
||||
|
||||
@classmethod
|
||||
def get_availability_zones(cls, client=None):
|
||||
def get_availability_zones(cls, client=None, backends=None):
|
||||
"""List the availability zones for "manila-share" services
|
||||
|
||||
that are currently in "up" state.
|
||||
"""
|
||||
client = client or cls.shares_v2_client
|
||||
client = client or cls.admin_shares_v2_client
|
||||
backends = (
|
||||
'|'.join(['^%s$' % backend for backend in backends])
|
||||
if backends else '.*'
|
||||
)
|
||||
cls.services = client.list_services()
|
||||
zones = [service['zone'] for service in cls.services if
|
||||
service['binary'] == "manila-share" and
|
||||
service['state'] == 'up']
|
||||
service['binary'] == 'manila-share' and
|
||||
service['state'] == 'up' and
|
||||
re.search(backends, service['host'])]
|
||||
return zones
|
||||
|
||||
@classmethod
|
||||
def get_pools_matching_share_type(cls, share_type, client=None):
|
||||
client = client or cls.admin_shares_v2_client
|
||||
if utils.is_microversion_supported('2.23'):
|
||||
return client.list_pools(
|
||||
search_opts={'share_type': share_type['id']})['pools']
|
||||
|
||||
pools = client.list_pools(detail=True)['pools']
|
||||
share_type = client.get_share_type(share_type['id'])['share_type']
|
||||
extra_specs = {}
|
||||
for k, v in share_type['extra_specs'].items():
|
||||
extra_specs[k] = (
|
||||
True if six.text_type(v).lower() == 'true'
|
||||
else False if six.text_type(v).lower() == 'false' else v
|
||||
)
|
||||
return [
|
||||
pool for pool in pools if all(y in pool['capabilities'].items()
|
||||
for y in extra_specs.items())
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def get_availability_zones_matching_share_type(cls, share_type,
|
||||
client=None):
|
||||
|
||||
client = client or cls.admin_shares_v2_client
|
||||
pools_matching_share_type = cls.get_pools_matching_share_type(
|
||||
share_type, client=client)
|
||||
backends_matching_share_type = set(
|
||||
[pool['name'].split("#")[0] for pool in pools_matching_share_type]
|
||||
)
|
||||
azs = cls.get_availability_zones(backends=backends_matching_share_type)
|
||||
return azs
|
||||
|
||||
def get_pools_for_replication_domain(self):
|
||||
# Get the list of pools for the replication domain
|
||||
pools = self.admin_client.list_pools(detail=True)['pools']
|
||||
|
|
|
@ -46,10 +46,6 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
|||
raise share_exceptions.ShareReplicationTypeException(
|
||||
replication_type=cls.replication_type
|
||||
)
|
||||
cls.zones = cls.get_availability_zones(client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
cls.extra_specs = cls.add_extra_specs_to_dict(
|
||||
{"replication_type": cls.replication_type})
|
||||
share_type = cls.create_share_type(
|
||||
|
@ -57,6 +53,12 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
|||
extra_specs=cls.extra_specs,
|
||||
client=cls.admin_client)
|
||||
cls.share_type = share_type["share_type"]
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type, client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# Create share with above share_type
|
||||
cls.creation_data = {'kwargs': {
|
||||
'share_type_id': cls.share_type['id'],
|
||||
|
@ -309,10 +311,6 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
|||
raise share_exceptions.ShareReplicationTypeException(
|
||||
replication_type=cls.replication_type
|
||||
)
|
||||
cls.zones = cls.get_availability_zones(client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
cls.extra_specs = cls.add_extra_specs_to_dict(
|
||||
{"replication_type": cls.replication_type})
|
||||
share_type = cls.create_share_type(
|
||||
|
@ -320,6 +318,12 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
|||
extra_specs=cls.extra_specs,
|
||||
client=cls.admin_client)
|
||||
cls.share_type = share_type["share_type"]
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type, client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# Create share with above share_type
|
||||
cls.creation_data = {'kwargs': {
|
||||
'share_type_id': cls.share_type['id'],
|
||||
|
|
|
@ -42,15 +42,17 @@ class ReplicationNegativeTest(base.BaseSharesMixedTest):
|
|||
raise share_exceptions.ShareReplicationTypeException(
|
||||
replication_type=cls.replication_type
|
||||
)
|
||||
cls.zones = cls.get_availability_zones(client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# create share type
|
||||
extra_specs = {"replication_type": cls.replication_type}
|
||||
cls.share_type = cls._create_share_type(extra_specs)
|
||||
cls.share_type_id = cls.share_type['id']
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type, client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# create share with above share_type
|
||||
cls.share1, cls.instance_id1 = cls._create_share_get_instance()
|
||||
|
||||
|
|
|
@ -42,19 +42,16 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
|||
raise share_exceptions.ShareReplicationTypeException(
|
||||
replication_type=cls.replication_type
|
||||
)
|
||||
cls.zones = cls.get_availability_zones(client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
# create share type
|
||||
extra_specs = {"replication_type": cls.replication_type}
|
||||
cls.share_type = cls._create_share_type(extra_specs)
|
||||
cls.share_type_id = cls.share_type['id']
|
||||
# Create share with above share_type
|
||||
cls.creation_data = {'kwargs': {
|
||||
'share_type_id': cls.share_type_id,
|
||||
'availability_zone': cls.share_zone,
|
||||
}}
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type, client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
|
||||
def test_snapshot_after_share_replica(self):
|
||||
|
|
|
@ -78,10 +78,6 @@ class RevertToSnapshotTest(base.BaseSharesMixedTest):
|
|||
raise share_exceptions.ShareReplicationTypeException(
|
||||
replication_type=cls.replication_type
|
||||
)
|
||||
cls.zones = cls.get_availability_zones(client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
extra_specs = cls.add_extra_specs_to_dict({
|
||||
"replication_type": cls.replication_type,
|
||||
constants.REVERT_TO_SNAPSHOT_SUPPORT: True,
|
||||
|
@ -91,6 +87,10 @@ class RevertToSnapshotTest(base.BaseSharesMixedTest):
|
|||
extra_specs=extra_specs,
|
||||
client=cls.admin_client)
|
||||
cls.replicated_share_type = share_type["share_type"]
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.replicated_share_type, client=cls.admin_client)
|
||||
cls.share_zone = cls.zones[0]
|
||||
cls.replica_zone = cls.zones[-1]
|
||||
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
|
||||
@ddt.data(
|
||||
|
|
|
@ -195,7 +195,8 @@ class ShareGroupsTest(base.BaseSharesMixedTest):
|
|||
def test_create_sg_and_share_specifying_az(self, where_specify_az):
|
||||
# Get list of existing availability zones, at least one always
|
||||
# should exist
|
||||
azs = self.shares_v2_client.list_availability_zones()
|
||||
azs = self.get_availability_zones_matching_share_type(
|
||||
self.share_type)
|
||||
|
||||
sg_kwargs = {
|
||||
'share_group_type_id': self.share_group_type_id,
|
||||
|
@ -204,7 +205,7 @@ class ShareGroupsTest(base.BaseSharesMixedTest):
|
|||
'cleanup_in_class': False,
|
||||
}
|
||||
if where_specify_az in ('sg', 'sg_and_share'):
|
||||
sg_kwargs['availability_zone'] = azs[0]['name']
|
||||
sg_kwargs['availability_zone'] = azs[0]
|
||||
|
||||
# Create share group
|
||||
share_group = self.create_share_group(**sg_kwargs)
|
||||
|
@ -215,10 +216,9 @@ class ShareGroupsTest(base.BaseSharesMixedTest):
|
|||
|
||||
self.assertIn('availability_zone', share_group)
|
||||
if where_specify_az in ('sg', 'sg_and_share'):
|
||||
self.assertEqual(azs[0]['name'], share_group['availability_zone'])
|
||||
self.assertEqual(azs[0], share_group['availability_zone'])
|
||||
else:
|
||||
self.assertIn(
|
||||
share_group['availability_zone'], [az['name'] for az in azs])
|
||||
self.assertIn(share_group['availability_zone'], azs)
|
||||
|
||||
# Test 'consistent_snapshot_support' as part of 2.33 API change
|
||||
self.assertIn('consistent_snapshot_support', share_group)
|
||||
|
@ -233,7 +233,7 @@ class ShareGroupsTest(base.BaseSharesMixedTest):
|
|||
'experimental': True,
|
||||
}
|
||||
if where_specify_az == 'sg_and_share':
|
||||
s_kwargs['availability_zone'] = azs[0]['name']
|
||||
s_kwargs['availability_zone'] = azs[0]
|
||||
|
||||
# Create share in share group
|
||||
share = self.create_share(**s_kwargs)
|
||||
|
|
Loading…
Reference in New Issue