Create a generic share type (api tests)

Tempest assumes a default share type already created
to work. This means, if a default share type is not
created and not specified in the conf file, tempest
tests fail. A workaround is to create a share type
as part of the environment setup for all the tests
that need it. This patch set does that.

Change-Id: I15880e400df30918762ebd7304244b4a27200168
Closes-Bug: #1743472
This commit is contained in:
Victoria Martinez de la Cruz 2018-02-01 11:27:00 -05:00
parent f572d5f75e
commit f6bc6fa7bc
47 changed files with 611 additions and 276 deletions

View File

@ -32,7 +32,11 @@ class AdminActionsTest(base.BaseSharesAdminTest):
cls.task_states = ["migration_starting", "data_copying_in_progress",
"migration_success", None]
cls.bad_status = "error_deleting"
cls.sh = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.sh = cls.create_share(share_type_id=cls.share_type_id)
cls.sh_instance = (
cls.shares_v2_client.get_instances_of_share(cls.sh["id"])[0]
)
@ -65,7 +69,7 @@ class AdminActionsTest(base.BaseSharesAdminTest):
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_force_delete_share(self):
share = self.create_share()
share = self.create_share(share_type_id=self.share_type_id)
# Change status from 'available' to 'error_deleting'
self.shares_v2_client.reset_state(share["id"], status=self.bad_status)
@ -80,7 +84,8 @@ class AdminActionsTest(base.BaseSharesAdminTest):
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_force_delete_share_instance(self):
share = self.create_share(cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
instances = self.shares_v2_client.get_instances_of_share(share["id"])
# Check that instance was created
self.assertEqual(1, len(instances))

View File

@ -31,7 +31,12 @@ class AdminActionsNegativeTest(base.BaseSharesMixedTest):
super(AdminActionsNegativeTest, cls).resource_setup()
cls.admin_client = cls.admin_shares_v2_client
cls.member_client = cls.shares_v2_client
cls.sh = cls.create_share(client=cls.admin_client)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.sh = cls.create_share(share_type_id=cls.share_type_id,
client=cls.admin_client)
cls.sh_instance = (
cls.admin_client.get_instances_of_share(cls.sh["id"])[0]
)

View File

@ -36,7 +36,12 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
super(ExportLocationsTest, cls).resource_setup()
cls.admin_client = cls.admin_shares_v2_client
cls.member_client = cls.shares_v2_client
cls.share = cls.create_share(client=cls.admin_client)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id,
client=cls.admin_client)
cls.share = cls.admin_client.get_share(cls.share['id'])
cls.share_instances = cls.admin_client.get_instances_of_share(
cls.share['id'])

View File

@ -30,7 +30,12 @@ class ExportLocationsNegativeTest(base.BaseSharesMixedTest):
super(ExportLocationsNegativeTest, cls).resource_setup()
cls.admin_client = cls.admin_shares_v2_client
cls.member_client = cls.shares_v2_client
cls.share = cls.create_share(client=cls.admin_client)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(client=cls.admin_client,
share_type_id=cls.share_type_id)
cls.share = cls.admin_client.get_share(cls.share['id'])
cls.share_instances = cls.admin_client.get_instances_of_share(
cls.share['id'])

View File

@ -69,6 +69,10 @@ class MigrationBase(base.BaseSharesAdminTest):
raise cls.skipException("At least two different pool entries are "
"needed to run share migration tests.")
# create share type (generic)
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
cls.new_type = cls.create_share_type(
name=data_utils.rand_name('new_share_type_for_migration'),
cleanup_in_class=True,
@ -202,7 +206,9 @@ class MigrationBase(base.BaseSharesAdminTest):
def _test_resize_post_migration(self, force_host_assisted, resize):
self._check_migration_enabled(force_host_assisted)
new_size = CONF.share.share_size + 1
share = self.create_share(self.protocol, size=new_size)
share = self.create_share(self.protocol,
size=new_size,
share_type_id=self.share_type_id)
share = self.shares_v2_client.get_share(share['id'])
share, dest_pool = self._setup_migration(share)
@ -259,12 +265,14 @@ class MigrationBase(base.BaseSharesAdminTest):
self.assertNotEmpty(snapshot_list, msg)
snapshot_id_list = [snap['id'] for snap in snapshot_list]
# verify that after migration original snapshots are retained
# Verify that after migration original snapshots are retained
self.assertIn(snapshot1['id'], snapshot_id_list)
self.assertIn(snapshot2['id'], snapshot_id_list)
# Verify that a share can be created from a snapshot after migration
snapshot1_share = self.create_share(
self.protocol, size=share['size'], snapshot_id=snapshot1['id'],
self.protocol,
size=share['size'],
snapshot_id=snapshot1['id'],
share_network_id=share['share_network_id'])
self.assertEqual(snapshot1['id'], snapshot1_share['snapshot_id'])
self._cleanup_share(share)
@ -351,7 +359,8 @@ class MigrationCancelNFSTest(MigrationBase):
def test_migration_cancel(self, force_host_assisted):
self._check_migration_enabled(force_host_assisted)
share = self.create_share(self.protocol)
share = self.create_share(self.protocol,
share_type_id=self.share_type_id)
share = self.shares_v2_client.get_share(share['id'])
share, dest_pool = self._setup_migration(share)
task_state = (constants.TASK_STATE_DATA_COPYING_COMPLETED
@ -392,7 +401,8 @@ class MigrationCancelNFSTest(MigrationBase):
CONF.share.run_migration_with_preserve_snapshots_tests,
'Migration with preserve snapshots tests are disabled.')
def test_migration_cancel_share_with_snapshot(self):
share = self.create_share(self.protocol)
share = self.create_share(self.protocol,
share_type_id=self.share_type_id)
share = self.shares_v2_client.get_share(share['id'])
share, dest_pool = self._setup_migration(share)
@ -421,7 +431,8 @@ class MigrationOppositeDriverModesNFSTest(MigrationBase):
def test_migration_opposite_driver_modes(self, force_host_assisted):
self._check_migration_enabled(force_host_assisted)
share = self.create_share(self.protocol)
share = self.create_share(self.protocol,
share_type_id=self.share_type_id)
share = self.shares_v2_client.get_share(share['id'])
share, dest_pool = self._setup_migration(share, opposite=True)
@ -487,7 +498,8 @@ class MigrationTwoPhaseNFSTest(MigrationBase):
def test_migration_2phase(self, force_host_assisted):
self._check_migration_enabled(force_host_assisted)
share = self.create_share(self.protocol)
share = self.create_share(self.protocol,
share_type_id=self.share_type_id)
share = self.shares_v2_client.get_share(share['id'])
share, dest_pool = self._setup_migration(share)
@ -570,7 +582,9 @@ class MigrationOfShareWithSnapshotNFSTest(MigrationBase):
def test_migrating_share_with_snapshot(self):
ss_type, __ = self._create_share_type_for_snapshot_capability()
share = self.create_share(self.protocol, cleanup_in_class=False)
share = self.create_share(self.protocol,
share_type_id=ss_type['share_type']['id'],
cleanup_in_class=False)
share = self.shares_v2_client.get_share(share['id'])
share, dest_pool = self._setup_migration(share)

View File

@ -54,15 +54,18 @@ class MigrationNegativeTest(base.BaseSharesAdminTest):
raise cls.skipException("At least two different pool entries "
"are needed to run share migration tests.")
# create share type (generic)
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol,
size=CONF.share.share_size + 1)
size=CONF.share.share_size + 1,
share_type_id=cls.share_type_id)
cls.share = cls.shares_client.get_share(cls.share['id'])
cls.default_type = cls.shares_v2_client.list_share_types(
default=True)['share_type']
dest_pool = utils.choose_matching_backend(
cls.share, pools, cls.default_type)
cls.share, pools, cls.share_type)
if not dest_pool or dest_pool.get('name') is None:
raise share_exceptions.ShareMigrationException(
@ -142,7 +145,7 @@ class MigrationNegativeTest(base.BaseSharesAdminTest):
new_share_type_id = None
new_share_network_id = None
if specified:
new_share_type_id = self.default_type['id']
new_share_type_id = self.share_type_id
new_share_network_id = self.share['share_network_id']
self.migrate_share(
self.share['id'], self.share['host'],

View File

@ -39,6 +39,9 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
super(SharesAdminQuotasTest, cls).resource_setup()
cls.user_id = cls.shares_v2_client.user_id
cls.tenant_id = cls.shares_v2_client.tenant_id
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
def test_default_quotas(self):
@ -142,6 +145,12 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
msg = "Quota tests are disabled."
raise cls.skipException(msg)
super(SharesAdminQuotasUpdateTest, cls).resource_setup()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share group type
cls.share_group_type = cls._create_share_group_type()
cls.share_group_type_id = cls.share_group_type['id']
def setUp(self):
super(self.__class__, self).setUp()
@ -206,17 +215,6 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
self.tenant_id, self.user_id, **{quota_key: new_quota})
self.assertEqual(new_quota, int(updated[quota_key]))
def _create_share_type(self):
share_type = self.create_share_type(
data_utils.rand_name("tempest-manila"),
cleanup_in_class=False,
client=self.shares_v2_client,
extra_specs=self.add_extra_specs_to_dict(),
)
if 'share_type' in share_type:
share_type = share_type['share_type']
return share_type
@ddt.data(
('id', True),
('name', False),
@ -600,7 +598,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
@base.skip_if_microversion_lt("2.39")
def test_quotas_usages(self):
# Create share types
st_1, st_2 = (self._create_share_type() for i in (1, 2))
st_1, st_2 = (self._create_share_type()
for i in (1, 2))
# Set quotas for project, user and both share types
self.client.update_quotas(self.tenant_id, shares=3, gigabytes=10)
@ -695,7 +694,10 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
# Create SG1 and check usages
share_group1 = self.create_share_group(
cleanup_in_class=False, client=self.client)
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
cleanup_in_class=False,
client=self.client)
self._check_usages(1, 0)
# Create SGS1 and check usages
@ -705,7 +707,9 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
# Create SG2 from SGS1 and check usages
share_group2 = self.create_share_group(
cleanup_in_class=False, client=self.client,
share_group_type_id=self.share_group_type_id,
cleanup_in_class=False,
client=self.client,
source_share_group_snapshot_id=sg_snapshot['id'])
self._check_usages(2, 1)
@ -713,6 +717,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
self.assertRaises(
lib_exc.OverLimit,
self.create_share_group,
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
client=self.client, cleanup_in_class=False)
self._check_usages(2, 1)

View File

@ -15,7 +15,6 @@
import ddt
from tempest import config
from tempest.lib.common.utils import data_utils
from tempest.lib import exceptions as lib_exc
import testtools
from testtools import testcase as tc
@ -41,6 +40,12 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
super(SharesAdminQuotasNegativeTest, cls).resource_setup()
cls.user_id = cls.shares_client.user_id
cls.tenant_id = cls.shares_client.tenant_id
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share group type
cls.share_group_type = cls._create_share_group_type()
cls.share_group_type_id = cls.share_group_type['id']
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_get_quotas_with_empty_tenant_id(self):
@ -106,6 +111,8 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
self.assertRaises(
lib_exc.OverLimit,
self.create_share_group,
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
client=client,
cleanup_in_class=False)
@ -243,17 +250,6 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
client.tenant_id,
**kwargs)
def _create_share_type(self):
share_type = self.create_share_type(
data_utils.rand_name("tempest-manila"),
cleanup_in_class=False,
client=self.shares_v2_client,
extra_specs=self.add_extra_specs_to_dict(),
)
if 'share_type' in share_type:
share_type = share_type['share_type']
return share_type
@ddt.data('id', 'name')
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@base.skip_if_microversion_lt("2.39")

View File

@ -14,7 +14,6 @@
# under the License.
from tempest import config
from tempest.lib.common.utils import data_utils
import testtools
from testtools import testcase as tc
@ -34,8 +33,6 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ReplicationAdminTest, cls).resource_setup()
# Create share_type
name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
cls.admin_client = cls.admin_shares_v2_client
cls.member_client = cls.shares_v2_client
cls.replication_type = CONF.share.backend_replication_type
@ -48,15 +45,12 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
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(
name,
extra_specs=cls.extra_specs,
client=cls.admin_client)
cls.share_type = share_type["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.share = cls.create_share(share_type_id=cls.share_type["id"],
cls.share = cls.create_share(share_type_id=cls.share_type_id,
availability_zone=cls.share_zone,
client=cls.admin_client)
cls.replica = cls.admin_client.list_share_replicas(
@ -77,7 +71,7 @@ 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)
original_replica = self.admin_client.list_share_replicas(
share_id=share['id'])[0]

View File

@ -11,7 +11,6 @@
# under the License.
from tempest import config
from tempest.lib.common.utils import data_utils
from tempest.lib import exceptions as lib_exc
import testtools
from testtools import testcase as tc
@ -35,8 +34,6 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ReplicationAdminTest, cls).resource_setup()
# Create share_type
name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
cls.admin_client = cls.admin_shares_v2_client
cls.member_client = cls.shares_v2_client
cls.replication_type = CONF.share.backend_replication_type
@ -49,17 +46,13 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
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(
name,
cleanup_in_class=True,
extra_specs=cls.extra_specs,
client=cls.admin_client)
cls.share_type = share_type["share_type"]
# Create share with above share_type
# 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
cls.share = cls.create_share(size=CONF.share.share_size + 1,
share_type_id=cls.share_type["id"],
share_type_id=cls.share_type_id,
availability_zone=cls.share_zone,
client=cls.admin_client)
cls.replica = cls.admin_client.list_share_replicas(
@ -95,7 +88,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
"""Manage a share with replication share type."""
# Create a share and unmanage it
share = self.create_share(size=2,
share_type_id=self.share_type["id"],
share_type_id=self.share_type_id,
availability_zone=self.share_zone,
cleanup_in_class=True,
client=self.admin_client)
@ -110,7 +103,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
# Manage the previously unmanaged share
managed_share = self.admin_client.manage_share(
share['host'], share['share_proto'],
export_path, self.share_type['id'])
export_path, self.share_type_id)
self.admin_client.wait_for_share_status(
managed_share['id'], 'available')
@ -142,7 +135,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
def test_unmanage_replicated_share_with_no_replica(self):
"""Unmanage a replication type share that does not have replica."""
share = self.create_share(size=2,
share_type_id=self.share_type["id"],
share_type_id=self.share_type_id,
availability_zone=self.share_zone,
client=self.admin_client)
self.admin_client.unmanage_share(share['id'])

View File

@ -38,7 +38,7 @@ class SchedulerStatsAdminTest(base.BaseSharesAdminTest):
extra_specs = cls.add_extra_specs_to_dict(extra_specs=extra_specs)
return cls.create_share_type(
name, extra_specs=extra_specs,
client=cls.admin_client)
client=cls.admin_client)["share_type"]
@classmethod
def resource_setup(cls):
@ -168,7 +168,7 @@ class SchedulerStatsAdminTest(base.BaseSharesAdminTest):
def test_pool_list_with_share_type_filter_with_detail(
self, detail, share_type_key):
st = self._create_share_type()
search_opts = {"share_type": st["share_type"][share_type_key]}
search_opts = {"share_type": st[share_type_key]}
kwargs = {'search_opts': search_opts}
if detail:
@ -193,7 +193,7 @@ class SchedulerStatsAdminTest(base.BaseSharesAdminTest):
def test_pool_list_with_share_type_filter_with_detail_negative(
self, detail, share_type_key):
st_negative = self._create_share_type(negative=True)
search_opts = {"share_type": st_negative["share_type"][share_type_key]}
search_opts = {"share_type": st_negative[share_type_key]}
pools = self.admin_client.list_pools(
detail=detail, search_opts=search_opts)['pools']

View File

@ -33,27 +33,27 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
def resource_setup(cls):
super(ShareGroupsTest, cls).resource_setup()
# Create 2 share_types
name = data_utils.rand_name("tempest-manila")
extra_specs = cls.add_extra_specs_to_dict()
share_type = cls.create_share_type(name, extra_specs=extra_specs)
cls.share_type = share_type['share_type']
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
name = data_utils.rand_name("tempest-manila")
share_type = cls.create_share_type(name, extra_specs=extra_specs)
cls.share_type2 = share_type['share_type']
cls.share_type2 = cls._create_share_type()
cls.share_type_id2 = cls.share_type2['id']
# Create a share group type
name = data_utils.rand_name("unique_sgt_name")
cls.sg_type = cls.create_share_group_type(
name=name,
share_types=[cls.share_type['id'], cls.share_type2['id']],
share_types=[cls.share_type_id, cls.share_type_id2],
cleanup_in_class=True,
version=constants.MIN_SHARE_GROUP_MICROVERSION)
cls.sg_type_id = cls.sg_type['id']
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_create_share_group_with_single_share_type_min(self):
share_group = self.create_share_group(
share_group_type_id=self.sg_type['id'],
share_group_type_id=self.sg_type_id,
cleanup_in_class=False,
share_type_ids=[self.share_type['id']],
share_type_ids=[self.share_type_id],
version=constants.MIN_SHARE_GROUP_MICROVERSION)
keys = set(share_group.keys())
@ -65,7 +65,7 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
"actual": keys})
actual_sg_type = share_group['share_group_type_id']
expected_sg_type = self.sg_type['id']
expected_sg_type = self.sg_type_id
self.assertEqual(
expected_sg_type, actual_sg_type,
'Incorrect share group type applied to share group '
@ -73,7 +73,7 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
share_group['id'], expected_sg_type, actual_sg_type))
actual_share_types = share_group['share_types']
expected_share_types = [self.share_type['id']]
expected_share_types = [self.share_type_id]
self.assertEqual(
sorted(expected_share_types),
sorted(actual_share_types),
@ -84,9 +84,9 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_create_share_group_with_multiple_share_types_min(self):
share_group = self.create_share_group(
share_group_type_id=self.sg_type['id'],
share_group_type_id=self.sg_type_id,
cleanup_in_class=False,
share_type_ids=[self.share_type['id'], self.share_type2['id']],
share_type_ids=[self.share_type_id, self.share_type_id2],
version=constants.MIN_SHARE_GROUP_MICROVERSION)
keys = set(share_group.keys())
@ -98,7 +98,7 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
"actual": keys})
actual_sg_type = share_group['share_group_type_id']
expected_sg_type = self.sg_type['id']
expected_sg_type = self.sg_type_id
self.assertEqual(
expected_sg_type, actual_sg_type,
'Incorrect share group type applied to share group %s. '
@ -106,7 +106,7 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
share_group['id'], expected_sg_type, actual_sg_type))
actual_share_types = share_group['share_types']
expected_share_types = [self.share_type['id'], self.share_type2['id']]
expected_share_types = [self.share_type_id, self.share_type_id2]
self.assertEqual(
sorted(expected_share_types),
sorted(actual_share_types),
@ -114,6 +114,8 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
'Expected %s, got %s' % (
share_group['id'], expected_share_types, actual_share_types))
@testtools.skipUnless(
CONF.share.default_share_type_name, "Only if defaults are defined.")
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_default_share_group_type_applied(self):
default_type = self.shares_v2_client.get_default_share_group_type()
@ -146,9 +148,9 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
def test_create_sg_from_snapshot_verify_share_server_information_min(self):
# Create a share group
orig_sg = self.create_share_group(
share_group_type_id=self.sg_type['id'],
share_group_type_id=self.sg_type_id,
cleanup_in_class=False,
share_type_ids=[self.share_type['id']],
share_type_ids=[self.share_type_id],
version=constants.MIN_SHARE_GROUP_MICROVERSION)
# Get latest share group information
@ -163,7 +165,7 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
orig_sg['id'], cleanup_in_class=False,
version=constants.MIN_SHARE_GROUP_MICROVERSION)
new_sg = self.create_share_group(
share_group_type_id=self.sg_type['id'],
share_group_type_id=self.sg_type_id,
cleanup_in_class=False,
version=constants.MIN_SHARE_GROUP_MICROVERSION,
source_share_group_snapshot_id=sg_snapshot['id'])
@ -179,13 +181,13 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
# Create share group type not specifying any group specs
sg_type = self.create_share_group_type(
name=data_utils.rand_name("tempest-manila"),
share_types=[self.share_type['id']],
share_types=[self.share_type_id],
group_specs={},
cleanup_in_class=False)
# Create share group, it should be created always, because we do not
# restrict choice anyhow.
self.create_share_group(
share_type_ids=[self.share_type['id']],
share_type_ids=[self.share_type_id],
share_group_type_id=sg_type['id'],
cleanup_in_class=False)

View File

@ -26,7 +26,11 @@ class ShareInstancesTest(base.BaseSharesAdminTest):
@classmethod
def resource_setup(cls):
super(ShareInstancesTest, cls).resource_setup()
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_get_instances_of_share_v2_3(self):

View File

@ -22,7 +22,11 @@ class ShareInstancesNegativeTest(base.BaseSharesAdminTest):
@classmethod
def resource_setup(cls):
super(ShareInstancesNegativeTest, cls).resource_setup()
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@base.skip_if_microversion_not_supported("2.34")

View File

@ -36,7 +36,11 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
@classmethod
def resource_setup(cls):
super(ShareServersAdminTest, cls).resource_setup()
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
cls.share_network = cls.shares_v2_client.get_share_network(
cls.shares_v2_client.share_network_id)
if not cls.share_network["name"]:
@ -208,7 +212,8 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
neutron_subnet_id=self.share_network['neutron_subnet_id'])
# Create server with share
self.create_share(share_network_id=new_sn['id'])
self.create_share(share_type_id=self.share_type_id,
share_network_id=new_sn['id'])
# List share servers, filtered by share_network_id
servers = self.shares_v2_client.list_share_servers(

View File

@ -32,7 +32,11 @@ class ShareSnapshotInstancesTest(base.BaseSharesAdminTest):
@classmethod
def resource_setup(cls):
super(ShareSnapshotInstancesTest, cls).resource_setup()
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
snap = cls.create_snapshot_wait_for_active(cls.share["id"])
cls.snapshot = cls.shares_v2_client.get_snapshot(snap['id'])

View File

@ -33,7 +33,12 @@ class SnapshotInstancesNegativeTest(base.BaseSharesMixedTest):
super(SnapshotInstancesNegativeTest, cls).resource_setup()
cls.admin_client = cls.admin_shares_v2_client
cls.member_client = cls.shares_v2_client
cls.share = cls.create_share(client=cls.admin_client)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id,
client=cls.admin_client)
cls.snapshot = cls.create_snapshot_wait_for_active(
cls.share["id"], client=cls.admin_client)

View File

@ -33,7 +33,9 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
name = data_utils.rand_name("unique_st_name")
extra_specs = self.add_extra_specs_to_dict({"key": "value"})
return self.create_share_type(
name, extra_specs=extra_specs, client=self.admin_shares_v2_client)
name,
extra_specs=extra_specs,
client=self.admin_shares_v2_client)["share_type"]
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_create_extra_specs_with_user(self):
@ -41,7 +43,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.shares_v2_client.create_share_type_extra_specs,
st["share_type"]["id"],
st["id"],
self.add_extra_specs_to_dict({"key": "new_value"}))
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ -50,7 +52,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.shares_v2_client.get_share_type_extra_specs,
st["share_type"]["id"])
st["id"])
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_get_extra_spec_with_user(self):
@ -58,7 +60,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.shares_v2_client.get_share_type_extra_spec,
st["share_type"]["id"], "key")
st["id"], "key")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_get_extra_specs_with_user(self):
@ -66,13 +68,12 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.shares_v2_client.get_share_type_extra_specs,
st["share_type"]["id"])
st["id"])
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_read_extra_specs_on_share_type_with_user(self):
st = self._create_share_type()
share_type = self.shares_v2_client.get_share_type(
st['share_type']['id'])
share_type = self.shares_v2_client.get_share_type(st['id'])
# Verify a non-admin can only read the required extra-specs
expected_keys = ['driver_handles_share_servers', 'snapshot_support']
if utils.is_microversion_ge(CONF.share.max_api_microversion, '2.24'):
@ -93,7 +94,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.shares_v2_client.update_share_type_extra_spec,
st["share_type"]["id"], "key", "new_value")
st["id"], "key", "new_value")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_update_extra_specs_with_user(self):
@ -101,7 +102,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.shares_v2_client.update_share_type_extra_specs,
st["share_type"]["id"], {"key": "new_value"})
st["id"], {"key": "new_value"})
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_delete_extra_specs_with_user(self):
@ -109,7 +110,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.shares_v2_client.delete_share_type_extra_spec,
st["share_type"]["id"], "key")
st["id"], "key")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_set_too_long_key(self):
@ -118,7 +119,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.BadRequest,
self.admin_shares_v2_client.create_share_type_extra_specs,
st["share_type"]["id"],
st["id"],
self.add_extra_specs_to_dict({too_big_key: "value"}))
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ -128,7 +129,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.BadRequest,
self.admin_shares_v2_client.create_share_type_extra_specs,
st["share_type"]["id"],
st["id"],
self.add_extra_specs_to_dict({"key": too_big_value}))
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ -136,12 +137,12 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
too_big_value = "v" * 256
st = self._create_share_type()
self.admin_shares_v2_client.create_share_type_extra_specs(
st["share_type"]["id"],
st["id"],
self.add_extra_specs_to_dict({"key": "value"}))
self.assertRaises(
lib_exc.BadRequest,
self.admin_shares_v2_client.update_share_type_extra_specs,
st["share_type"]["id"],
st["id"],
self.add_extra_specs_to_dict({"key": too_big_value}))
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ -149,12 +150,12 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
too_big_value = "v" * 256
st = self._create_share_type()
self.admin_shares_v2_client.create_share_type_extra_specs(
st["share_type"]["id"],
st["id"],
self.add_extra_specs_to_dict({"key": "value"}))
self.assertRaises(
lib_exc.BadRequest,
self.admin_shares_v2_client.update_share_type_extra_spec,
st["share_type"]["id"], "key", too_big_value)
st["id"], "key", too_big_value)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_list_es_with_empty_shr_type_id(self):
@ -189,7 +190,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.BadRequest,
self.admin_shares_v2_client.create_share_type_extra_specs,
st["share_type"]["id"], "")
st["id"], "")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_create_es_with_invalid_specs(self):
@ -197,7 +198,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.BadRequest,
self.admin_shares_v2_client.create_share_type_extra_specs,
st["share_type"]["id"], {"": "value_with_empty_key"})
st["id"], {"": "value_with_empty_key"})
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_get_extra_spec_with_empty_key(self):
@ -205,7 +206,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.NotFound,
self.admin_shares_v2_client.get_share_type_extra_spec,
st["share_type"]["id"], "")
st["id"], "")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_get_extra_spec_with_invalid_key(self):
@ -213,7 +214,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.NotFound,
self.admin_shares_v2_client.get_share_type_extra_spec,
st["share_type"]["id"], data_utils.rand_name("fake"))
st["id"], data_utils.rand_name("fake"))
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_get_extra_specs_with_empty_shr_type_id(self):
@ -249,7 +250,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.NotFound,
self.admin_shares_v2_client.delete_share_type_extra_spec,
st["share_type"]["id"], data_utils.rand_name("fake"))
st["id"], data_utils.rand_name("fake"))
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_update_spec_with_empty_shr_type_id(self):
@ -271,7 +272,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.NotFound,
self.admin_shares_v2_client.update_share_type_extra_spec,
st["share_type"]["id"], "", "new_value")
st["id"], "", "new_value")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_update_with_invalid_shr_type_id(self):
@ -286,7 +287,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.BadRequest,
self.admin_shares_v2_client.update_share_type_extra_specs,
st["share_type"]["id"], {"": "new_value"})
st["id"], {"": "new_value"})
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_delete_spec_driver_handles_share_servers(self):
@ -296,7 +297,7 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.admin_shares_v2_client.delete_share_type_extra_spec,
st["share_type"]["id"],
st["id"],
"driver_handles_share_servers")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ -308,4 +309,4 @@ class ExtraSpecsAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Forbidden,
self.admin_shares_v2_client.delete_share_type_extra_spec,
st["share_type"]["id"], "snapshot_support", version=version)
st["id"], "snapshot_support", version=version)

View File

@ -28,7 +28,9 @@ class ShareTypesAdminNegativeTest(base.BaseSharesMixedTest):
name = data_utils.rand_name("unique_st_name")
extra_specs = self.add_extra_specs_to_dict({"key": "value"})
return self.create_share_type(
name, extra_specs=extra_specs, client=self.admin_shares_v2_client)
name,
extra_specs=extra_specs,
client=self.admin_shares_v2_client)["share_type"]
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_create_share_with_nonexistent_share_type(self):
@ -79,7 +81,7 @@ class ShareTypesAdminNegativeTest(base.BaseSharesMixedTest):
st = self._create_share_type()
self.assertRaises(lib_exc.Conflict,
self.create_share_type,
st["share_type"]["name"],
st["name"],
extra_specs=self.add_extra_specs_to_dict(),
client=self.admin_shares_v2_client)
@ -88,7 +90,7 @@ class ShareTypesAdminNegativeTest(base.BaseSharesMixedTest):
st = self._create_share_type()
self.assertRaises(lib_exc.Conflict,
self.admin_shares_v2_client.add_access_to_share_type,
st["share_type"]["id"],
st["id"],
self.admin_shares_v2_client.tenant_id)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ -97,7 +99,7 @@ class ShareTypesAdminNegativeTest(base.BaseSharesMixedTest):
self.assertRaises(
lib_exc.Conflict,
self.admin_shares_v2_client.remove_access_from_share_type,
st["share_type"]["id"],
st["id"],
self.admin_shares_v2_client.tenant_id)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)

View File

@ -35,14 +35,9 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
cls.shares = []
# create share type for share filtering purposes
cls.st_name = data_utils.rand_name("tempest-st-name")
cls.extra_specs = cls.add_extra_specs_to_dict(
{'storage_protocol': CONF.share.capability_storage_protocol})
cls.st = cls.create_share_type(
name=cls.st_name,
cleanup_in_class=True,
extra_specs=cls.extra_specs,
)
specs = {"storage_protocol": CONF.share.capability_storage_protocol}
cls.share_type = cls._create_share_type(specs)
cls.share_type_id = cls.share_type['id']
# create share
cls.share_name = data_utils.rand_name("tempest-share-name")
@ -55,7 +50,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
name=cls.share_name,
description=cls.share_desc,
metadata=cls.metadata,
share_type_id=cls.st['share_type']['id'],
share_type_id=cls.share_type_id,
))
if CONF.share.run_snapshot_tests:
@ -82,6 +77,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
description=cls.share_desc2,
metadata=cls.metadata2,
snapshot_id=cls.snap['id'],
share_type_id=cls.share_type_id,
))
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@ -197,7 +193,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_list_shares_with_detail_filter_by_share_type_id(self):
filters = {'share_type_id': self.st['share_type']['id']}
filters = {'share_type_id': self.share_type_id}
# list shares
shares = self.shares_client.list_shares_with_detail(params=filters)

View File

@ -41,7 +41,12 @@ class SnapshotExportLocationsTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SnapshotExportLocationsTest, cls).resource_setup()
cls.share = cls.create_share(client=cls.admin_client)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id,
client=cls.admin_client)
cls.snapshot = cls.create_snapshot_wait_for_active(
cls.share['id'], client=cls.admin_client)
cls.snapshot = cls.admin_client.get_snapshot(cls.snapshot['id'])

View File

@ -38,7 +38,12 @@ class SnapshotExportLocationsNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SnapshotExportLocationsNegativeTest, cls).resource_setup()
cls.share = cls.create_share(client=cls.admin_client)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id,
client=cls.admin_client)
cls.snapshot = cls.create_snapshot_wait_for_active(
cls.share['id'], client=cls.admin_client)
cls.snapshot = cls.admin_client.get_snapshot(cls.snapshot['id'])

View File

@ -1056,6 +1056,27 @@ class BaseSharesAdminTest(BaseSharesTest):
"""Base test case class for all Shares Admin API tests."""
credentials = ('admin', )
@classmethod
def setup_clients(cls):
super(BaseSharesAdminTest, cls).setup_clients()
# Initialise share clients
cls.admin_shares_v2_client = cls.os_admin.share_v2.SharesV2Client()
@classmethod
def _create_share_type(cls, specs=None):
name = data_utils.rand_name("unique_st_name")
extra_specs = cls.add_extra_specs_to_dict(specs)
return cls.create_share_type(
name, extra_specs=extra_specs,
client=cls.admin_shares_v2_client)['share_type']
@classmethod
def _create_share_group_type(cls):
share_group_type_name = data_utils.rand_name("unique_sgtype_name")
return cls.create_share_group_type(
name=share_group_type_name, share_types=[cls.share_type_id],
client=cls.admin_shares_v2_client)
class BaseSharesMixedTest(BaseSharesTest):
"""Base test case class for all Shares API tests with all user roles."""
@ -1090,3 +1111,18 @@ class BaseSharesMixedTest(BaseSharesTest):
"client": cls.alt_shares_v2_client,
}
cls.class_resources.insert(0, resource)
@classmethod
def _create_share_type(cls, specs=None):
name = data_utils.rand_name("unique_st_name")
extra_specs = cls.add_extra_specs_to_dict(specs)
return cls.create_share_type(
name, extra_specs=extra_specs,
client=cls.admin_shares_v2_client)['share_type']
@classmethod
def _create_share_group_type(cls):
share_group_type_name = data_utils.rand_name("unique_sgtype_name")
return cls.create_share_group_type(
name=share_group_type_name, share_types=[cls.share_type_id],
client=cls.admin_shares_v2_client)

View File

@ -27,7 +27,7 @@ CONF = config.CONF
@base.skip_if_microversion_lt(
constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
@ddt.ddt
class AccessRulesMetadataTest(base.BaseSharesTest):
class AccessRulesMetadataTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
@ -69,7 +69,11 @@ class AccessRulesMetadataTest(base.BaseSharesTest):
'cert': ['tenant_%d.example.com' % i for i in int_range],
'cephx': ['eve%d' % i for i in int_range],
}
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
cls.md1 = {"key1": "value1", "key2": "value2"}
cls.access = cls.shares_v2_client.create_access_rule(
cls.share["id"], cls.access_type,

View File

@ -28,7 +28,7 @@ CONF = config.CONF
@base.skip_if_microversion_lt(
constants.MIN_SHARE_ACCESS_METADATA_MICROVERSION)
@ddt.ddt
class AccessesMetadataNegativeTest(base.BaseSharesTest):
class AccessesMetadataNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
@ -60,7 +60,11 @@ class AccessesMetadataNegativeTest(base.BaseSharesTest):
cls.access_type = "cephx"
cls.access_to = "eve"
cls.shares_v2_client.share_protocol = cls.protocol
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
cls.access = cls.shares_v2_client.create_access_rule(
cls.share["id"], cls.access_type, cls.access_to,
'rw', metadata={u"key1": u"value1"})

View File

@ -18,12 +18,17 @@ from testtools import testcase as tc
from manila_tempest_tests.tests.api import base
class SharesMetadataTest(base.BaseSharesTest):
class SharesMetadataTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SharesMetadataTest, cls).resource_setup()
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_set_metadata_in_share_creation(self):
@ -31,7 +36,9 @@ class SharesMetadataTest(base.BaseSharesTest):
md = {u"key1": u"value1", u"key2": u"value2", }
# create share with metadata
share = self.create_share(metadata=md, cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
metadata=md,
cleanup_in_class=False)
# get metadata of share
metadata = self.shares_client.get_metadata(share["id"])
@ -45,7 +52,8 @@ class SharesMetadataTest(base.BaseSharesTest):
md = {u"key3": u"value3", u"key4": u"value4", u"key.5.1": u"value.5"}
# create share
share = self.create_share(cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
# set metadata
self.shares_client.set_metadata(share["id"], md)
@ -71,7 +79,8 @@ class SharesMetadataTest(base.BaseSharesTest):
md2 = {u"key7": u"value7", u"key8": u"value8", }
# create share
share = self.create_share(cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
# set metadata
self.shares_client.set_metadata(share["id"], md1)

View File

@ -43,12 +43,16 @@ class SharesMetadataAPIOnlyNegativeTest(base.BaseSharesTest):
@ddt.ddt
class SharesMetadataNegativeTest(base.BaseSharesTest):
class SharesMetadataNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SharesMetadataNegativeTest, cls).resource_setup()
cls.share = cls.create_share()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(share_type_id=cls.share_type_id)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
def test_try_set_metadata_with_empty_key(self):

View File

@ -35,8 +35,6 @@ class ReplicationNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ReplicationNegativeTest, cls).resource_setup()
# Create share_type
name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
cls.admin_client = cls.admin_shares_v2_client
cls.replication_type = CONF.share.backend_replication_type
@ -48,20 +46,18 @@ class ReplicationNegativeTest(base.BaseSharesMixedTest):
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(
name,
extra_specs=cls.extra_specs,
client=cls.admin_client)
cls.share_type = share_type["share_type"]
# Create share with above share_type
# 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.share1, cls.instance_id1 = cls._create_share_get_instance()
@classmethod
def _create_share_get_instance(cls):
share = cls.create_share(share_type_id=cls.share_type["id"],
availability_zone=cls.share_zone,)
share = cls.create_share(share_type_id=cls.share_type_id,
availability_zone=cls.share_zone)
share_instances = cls.admin_client.get_instances_of_share(
share["id"], version=_MIN_SUPPORTED_MICROVERSION
)

View File

@ -14,7 +14,6 @@
# under the License.
from tempest import config
from tempest.lib.common.utils import data_utils
import testtools
from testtools import testcase as tc
@ -36,8 +35,6 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ReplicationSnapshotTest, cls).resource_setup()
# Create share_type
name = data_utils.rand_name(constants.TEMPEST_MANILA_PREFIX)
cls.admin_client = cls.admin_shares_v2_client
cls.replication_type = CONF.share.backend_replication_type
@ -49,16 +46,13 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
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(
name,
extra_specs=cls.extra_specs,
client=cls.admin_client)
cls.share_type = share_type["share_type"]
# 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'],
'share_type_id': cls.share_type_id,
'availability_zone': cls.share_zone,
}}
@ -70,7 +64,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
Verify that the snapshot is properly created under replica by
creating a share from that snapshot.
"""
share = self.create_share(share_type_id=self.share_type['id'],
share = self.create_share(share_type_id=self.share_type_id,
availability_zone=self.share_zone)
original_replica = self.shares_v2_client.list_share_replicas(
share["id"])[0]
@ -91,7 +85,8 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
self.assertEqual(constants.STATUS_AVAILABLE, snapshot['status'])
if CONF.share.capability_create_share_from_snapshot_support:
self.create_share(snapshot_id=snapshot['id'])
self.create_share(share_type_id=self.share_type_id,
snapshot_id=snapshot['id'])
@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
def test_snapshot_before_share_replica(self):
@ -101,7 +96,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
share.
Verify snapshot by creating share from the snapshot.
"""
share = self.create_share(share_type_id=self.share_type['id'],
share = self.create_share(share_type_id=self.share_type_id,
availability_zone=self.share_zone)
snapshot = self.create_snapshot_wait_for_active(share["id"])
@ -126,7 +121,8 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
self.assertEqual(constants.STATUS_AVAILABLE, snapshot['status'])
if CONF.share.capability_create_share_from_snapshot_support:
self.create_share(snapshot_id=snapshot['id'])
self.create_share(share_type_id=self.share_type_id,
snapshot_id=snapshot['id'])
@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
def test_snapshot_before_and_after_share_replica(self):
@ -136,7 +132,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
being created.
Verify snapshots by creating share from the snapshots.
"""
share = self.create_share(share_type_id=self.share_type['id'],
share = self.create_share(share_type_id=self.share_type_id,
availability_zone=self.share_zone)
snapshot1 = self.create_snapshot_wait_for_active(share["id"])
@ -169,8 +165,10 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
self.assertEqual(constants.STATUS_AVAILABLE, snapshot2['status'])
if CONF.share.capability_create_share_from_snapshot_support:
self.create_share(snapshot_id=snapshot1['id'])
self.create_share(snapshot_id=snapshot2['id'])
self.create_share(share_type_id=self.share_type_id,
snapshot_id=snapshot1['id'])
self.create_share(share_type_id=self.share_type_id,
snapshot_id=snapshot2['id'])
@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
def test_delete_snapshot_after_adding_replica(self):
@ -180,7 +178,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
snapshot from replica.
"""
share = self.create_share(share_type_id=self.share_type['id'],
share = self.create_share(share_type_id=self.share_type_id,
availability_zone=self.share_zone)
share_replica = self.create_share_replica(share["id"],
self.replica_zone)
@ -199,10 +197,11 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
def test_create_replica_from_snapshot_share(self):
"""Test replica for a share that was created from snapshot."""
share = self.create_share(share_type_id=self.share_type['id'],
share = self.create_share(share_type_id=self.share_type_id,
availability_zone=self.share_zone)
orig_snapshot = self.create_snapshot_wait_for_active(share["id"])
snap_share = self.create_share(snapshot_id=orig_snapshot['id'])
snap_share = self.create_share(share_type_id=self.share_type_id,
snapshot_id=orig_snapshot['id'])
original_replica = self.shares_v2_client.list_share_replicas(
snap_share["id"])[0]
share_replica = self.create_share_replica(snap_share["id"],

View File

@ -77,7 +77,7 @@ def _create_delete_ro_access_rule(self, version):
@ddt.ddt
class ShareIpRulesForNFSTest(base.BaseSharesTest):
class ShareIpRulesForNFSTest(base.BaseSharesMixedTest):
protocol = "nfs"
@classmethod
@ -87,7 +87,13 @@ class ShareIpRulesForNFSTest(base.BaseSharesTest):
cls.protocol not in CONF.share.enable_ip_rules_for_protocols):
msg = "IP rule tests for %s protocol are disabled" % cls.protocol
raise cls.skipException(msg)
cls.share = cls.create_share(cls.protocol)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
cls.access_type = "ip"
cls.access_to = "2.2.2.2"
@ -220,7 +226,7 @@ class ShareIpRulesForCIFSTest(ShareIpRulesForNFSTest):
@ddt.ddt
class ShareUserRulesForNFSTest(base.BaseSharesTest):
class ShareUserRulesForNFSTest(base.BaseSharesMixedTest):
protocol = "nfs"
@classmethod
@ -231,7 +237,14 @@ class ShareUserRulesForNFSTest(base.BaseSharesTest):
CONF.share.enable_user_rules_for_protocols):
msg = "USER rule tests for %s protocol are disabled" % cls.protocol
raise cls.skipException(msg)
cls.share = cls.create_share(cls.protocol)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
cls.access_type = "user"
cls.access_to = CONF.share.username_for_user_rules
@ -303,7 +316,7 @@ class ShareUserRulesForCIFSTest(ShareUserRulesForNFSTest):
@ddt.ddt
class ShareCertRulesForGLUSTERFSTest(base.BaseSharesTest):
class ShareCertRulesForGLUSTERFSTest(base.BaseSharesMixedTest):
protocol = "glusterfs"
@classmethod
@ -314,7 +327,14 @@ class ShareCertRulesForGLUSTERFSTest(base.BaseSharesTest):
CONF.share.enable_cert_rules_for_protocols):
msg = "Cert rule tests for %s protocol are disabled" % cls.protocol
raise cls.skipException(msg)
cls.share = cls.create_share(cls.protocol)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
cls.access_type = "cert"
# Provide access to a client identified by a common name (CN) of the
# certificate that it possesses.
@ -412,7 +432,7 @@ class ShareCertRulesForGLUSTERFSTest(base.BaseSharesTest):
@ddt.ddt
class ShareCephxRulesForCephFSTest(base.BaseSharesTest):
class ShareCephxRulesForCephFSTest(base.BaseSharesMixedTest):
protocol = "cephfs"
@classmethod
@ -424,7 +444,14 @@ class ShareCephxRulesForCephFSTest(base.BaseSharesTest):
msg = ("Cephx rule tests for %s protocol are disabled." %
cls.protocol)
raise cls.skipException(msg)
cls.share = cls.create_share(cls.protocol)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
cls.access_type = "cephx"
# Provide access to a client identified by a cephx auth id.
cls.access_to = "bob"
@ -453,7 +480,7 @@ class ShareCephxRulesForCephFSTest(base.BaseSharesTest):
@ddt.ddt
class ShareRulesTest(base.BaseSharesTest):
class ShareRulesTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
@ -485,7 +512,9 @@ class ShareRulesTest(base.BaseSharesTest):
cls.access_type = "cephx"
cls.access_to = "eve"
cls.shares_v2_client.share_protocol = cls.protocol
cls.share = cls.create_share()
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
cls.share = cls.create_share(share_type_id=cls.share_type_id)
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@ddt.data(*set(
@ -590,7 +619,7 @@ class ShareRulesTest(base.BaseSharesTest):
raise self.skipException(msg)
# create share
share = self.create_share()
share = self.create_share(share_type_id=self.share_type_id)
# create rule
if utils.is_microversion_eq(version, '1.0'):

View File

@ -39,8 +39,12 @@ class ShareIpRulesForNFSNegativeTest(base.BaseSharesMixedTest):
cls.protocol in CONF.share.enable_ip_rules_for_protocols):
msg = "IP rule tests for %s protocol are disabled" % cls.protocol
raise cls.skipException(msg)
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol)
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
if CONF.share.run_snapshot_tests:
# create snapshot
cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
@ -182,7 +186,7 @@ class ShareIpRulesForCIFSNegativeTest(ShareIpRulesForNFSNegativeTest):
@ddt.ddt
class ShareUserRulesForNFSNegativeTest(base.BaseSharesTest):
class ShareUserRulesForNFSNegativeTest(base.BaseSharesMixedTest):
protocol = "nfs"
@classmethod
@ -192,8 +196,12 @@ class ShareUserRulesForNFSNegativeTest(base.BaseSharesTest):
cls.protocol in CONF.share.enable_user_rules_for_protocols):
msg = "USER rule tests for %s protocol are disabled" % cls.protocol
raise cls.skipException(msg)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol)
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
if CONF.share.run_snapshot_tests:
# create snapshot
cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
@ -272,7 +280,7 @@ class ShareUserRulesForCIFSNegativeTest(ShareUserRulesForNFSNegativeTest):
@ddt.ddt
class ShareCertRulesForGLUSTERFSNegativeTest(base.BaseSharesTest):
class ShareCertRulesForGLUSTERFSNegativeTest(base.BaseSharesMixedTest):
protocol = "glusterfs"
@classmethod
@ -282,8 +290,12 @@ class ShareCertRulesForGLUSTERFSNegativeTest(base.BaseSharesTest):
cls.protocol in CONF.share.enable_cert_rules_for_protocols):
msg = "CERT rule tests for %s protocol are disabled" % cls.protocol
raise cls.skipException(msg)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol)
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
if CONF.share.run_snapshot_tests:
# create snapshot
cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
@ -334,7 +346,7 @@ class ShareCertRulesForGLUSTERFSNegativeTest(base.BaseSharesTest):
@ddt.ddt
class ShareCephxRulesForCephFSNegativeTest(base.BaseSharesTest):
class ShareCephxRulesForCephFSNegativeTest(base.BaseSharesMixedTest):
protocol = "cephfs"
@classmethod
@ -345,8 +357,12 @@ class ShareCephxRulesForCephFSNegativeTest(base.BaseSharesTest):
msg = ("CEPHX rule tests for %s protocol are disabled" %
cls.protocol)
raise cls.skipException(msg)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol)
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
cls.access_type = "cephx"
cls.access_to = "david"
@ -378,7 +394,7 @@ def skip_if_cephx_access_type_not_supported_by_client(self, client):
@ddt.ddt
class ShareRulesNegativeTest(base.BaseSharesTest):
class ShareRulesNegativeTest(base.BaseSharesMixedTest):
# Tests independent from rule type and share protocol
@classmethod
@ -394,8 +410,11 @@ class ShareRulesNegativeTest(base.BaseSharesTest):
for p in cls.protocols)):
cls.message = "Rule tests are disabled"
raise cls.skipException(cls.message)
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share()
cls.share = cls.create_share(share_type_id=cls.share_type_id)
if CONF.share.run_snapshot_tests:
# create snapshot
cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])

View File

@ -114,8 +114,16 @@ class SecurityServiceListMixin(object):
@ddt.ddt
class SecurityServicesTest(base.BaseSharesTest,
class SecurityServicesTest(base.BaseSharesMixedTest,
SecurityServiceListMixin):
@classmethod
def resource_setup(cls):
super(SecurityServicesTest, cls).resource_setup()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
def setUp(self):
super(SecurityServicesTest, self).setUp()
ss_ldap_data = {
@ -217,8 +225,9 @@ class SecurityServicesTest(base.BaseSharesTest,
# that fails on wrong data, we expect error here.
# We require any share that uses our share-network.
try:
self.create_share(
share_network_id=fresh_sn["id"], cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
share_network_id=fresh_sn["id"],
cleanup_in_class=False)
except Exception as e:
# we do wait for either 'error' or 'available' status because
# it is the only available statuses for proper deletion.

View File

@ -26,7 +26,7 @@ CONF = config.CONF
LOG = log.getLogger(__name__)
class SecServicesMappingNegativeTest(base.BaseSharesTest):
class SecServicesMappingNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
@ -34,6 +34,9 @@ class SecServicesMappingNegativeTest(base.BaseSharesTest):
cls.sn = cls.create_share_network(cleanup_in_class=True)
cls.ss = cls.create_security_service(cleanup_in_class=True)
cls.cl = cls.shares_client
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_add_sec_service_twice_to_share_network(self):
@ -107,8 +110,9 @@ class SecServicesMappingNegativeTest(base.BaseSharesTest):
# that fails on wrong data, we expect error here.
# We require any share that uses our share-network.
try:
self.create_share(
share_network_id=fresh_sn["id"], cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
share_network_id=fresh_sn["id"],
cleanup_in_class=False)
except Exception as e:
# we do wait for either 'error' or 'available' status because
# it is the only available statuses for proper deletion.

View File

@ -26,7 +26,14 @@ CONF = config.CONF
LOG = log.getLogger(__name__)
class SecurityServicesNegativeTest(base.BaseSharesTest):
class SecurityServicesNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SecurityServicesNegativeTest, cls).resource_setup()
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_create_security_service_with_empty_type(self):
@ -93,8 +100,9 @@ class SecurityServicesNegativeTest(base.BaseSharesTest):
# that fails on wrong data, we expect error here.
# We require any share that uses our share-network.
try:
self.create_share(
share_network_id=fresh_sn["id"], cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
share_network_id=fresh_sn["id"],
cleanup_in_class=False)
except Exception as e:
# we do wait for either 'error' or 'available' status because
# it is the only available statuses for proper deletion.

View File

@ -31,23 +31,38 @@ CONF = config.CONF
CONF.share.run_share_group_tests, 'Share Group tests disabled.')
@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
@ddt.ddt
class ShareGroupActionsTest(base.BaseSharesTest):
class ShareGroupActionsTest(base.BaseSharesMixedTest):
"""Covers share group functionality."""
@classmethod
def resource_setup(cls):
super(ShareGroupActionsTest, cls).resource_setup()
# Create a share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
cls.share_group_type = cls._create_share_group_type()
cls.share_group_type_id = cls.share_group_type['id']
# Create first share group
cls.share_group_name = data_utils.rand_name("tempest-sg-name")
cls.share_group_desc = data_utils.rand_name("tempest-sg-description")
cls.share_group = cls.create_share_group(
name=cls.share_group_name, description=cls.share_group_desc)
name=cls.share_group_name,
description=cls.share_group_desc,
share_group_type_id=cls.share_group_type_id,
share_type_ids=[cls.share_type_id],
)
# Create second share group for purposes of sorting and snapshot
# filtering
cls.share_group2 = cls.create_share_group(
name=cls.share_group_name, description=cls.share_group_desc)
name=cls.share_group_name,
description=cls.share_group_desc,
share_group_type_id=cls.share_group_type_id,
share_type_ids=[cls.share_type_id],
)
# Create 2 shares - inside first and second share groups
cls.share_name = data_utils.rand_name("tempest-share-name")
@ -59,6 +74,7 @@ class ShareGroupActionsTest(base.BaseSharesTest):
'name': cls.share_name,
'description': cls.share_desc,
'size': size,
'share_type_id': cls.share_type_id,
'share_group_id': sg_id,
'experimental': True,
}} for size, sg_id in ((cls.share_size, cls.share_group['id']),
@ -277,6 +293,7 @@ class ShareGroupActionsTest(base.BaseSharesTest):
cleanup_in_class=False,
source_share_group_snapshot_id=self.sg_snapshot['id'],
version=constants.MIN_SHARE_GROUP_MICROVERSION,
share_group_type_id=self.share_group_type_id,
)
new_share_group = self.shares_v2_client.get_share_group(
@ -324,18 +341,28 @@ class ShareGroupActionsTest(base.BaseSharesTest):
@testtools.skipUnless(
CONF.share.run_share_group_tests, 'Share Group tests disabled.')
@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
class ShareGroupRenameTest(base.BaseSharesTest):
class ShareGroupRenameTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ShareGroupRenameTest, cls).resource_setup()
# Create a share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# Create a share group type
cls.share_group_type = cls._create_share_group_type()
cls.share_group_type_id = cls.share_group_type['id']
# Create share group
cls.share_group_name = data_utils.rand_name("tempest-sg-name")
cls.share_group_desc = data_utils.rand_name("tempest-sg-description")
cls.share_group = cls.create_share_group(
name=cls.share_group_name,
description=cls.share_group_desc,
share_group_type_id=cls.share_group_type_id,
share_type_ids=[cls.share_type_id]
)
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
@ -380,6 +407,8 @@ class ShareGroupRenameTest(base.BaseSharesTest):
name=value1,
description=value1,
version=constants.MIN_SHARE_GROUP_MICROVERSION,
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id]
)
self.assertEqual(value1, share_group["name"])
self.assertEqual(value1, share_group["description"])

View File

@ -29,15 +29,30 @@ CONF = config.CONF
CONF.share.run_share_group_tests, 'Share Group tests disabled.')
@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
@ddt.ddt
class ShareGroupsTest(base.BaseSharesTest):
class ShareGroupsTest(base.BaseSharesMixedTest):
"""Covers share group functionality."""
@classmethod
def resource_setup(cls):
super(ShareGroupsTest, cls).resource_setup()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share group type
cls.share_group_type = cls._create_share_group_type()
cls.share_group_type_id = cls.share_group_type['id']
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
def test_create_populate_delete_share_group_min(self):
# Create a share group
share_group = self.create_share_group(
cleanup_in_class=False,
version=constants.MIN_SHARE_GROUP_MICROVERSION)
version=constants.MIN_SHARE_GROUP_MICROVERSION,
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
)
keys = set(share_group.keys())
self.assertTrue(
constants.SHARE_GROUP_DETAIL_REQUIRED_KEYS.issubset(keys),
@ -48,6 +63,7 @@ class ShareGroupsTest(base.BaseSharesTest):
)
# Populate
share = self.create_share(
share_type_id=self.share_type_id,
share_group_id=share_group['id'],
cleanup_in_class=False,
version=constants.MIN_SHARE_GROUP_MICROVERSION,
@ -76,6 +92,8 @@ class ShareGroupsTest(base.BaseSharesTest):
def test_create_delete_empty_share_group_snapshot_min(self):
# Create base share group
share_group = self.create_share_group(
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
cleanup_in_class=False,
version=constants.MIN_SHARE_GROUP_MICROVERSION)
@ -114,6 +132,8 @@ class ShareGroupsTest(base.BaseSharesTest):
def test_create_share_group_from_empty_share_group_snapshot_min(self):
# Create base share group
share_group = self.create_share_group(
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
cleanup_in_class=False,
version=constants.MIN_SHARE_GROUP_MICROVERSION)
@ -130,6 +150,7 @@ class ShareGroupsTest(base.BaseSharesTest):
len(snapshot_members))
new_share_group = self.create_share_group(
share_group_type_id=self.share_group_type_id,
cleanup_in_class=False,
source_share_group_snapshot_id=sg_snapshot['id'],
version=constants.MIN_SHARE_GROUP_MICROVERSION)
@ -177,6 +198,8 @@ class ShareGroupsTest(base.BaseSharesTest):
azs = self.shares_v2_client.list_availability_zones()
sg_kwargs = {
'share_group_type_id': self.share_group_type_id,
'share_type_ids': [self.share_type_id],
'version': '2.34',
'cleanup_in_class': False,
}
@ -203,6 +226,7 @@ class ShareGroupsTest(base.BaseSharesTest):
share_group['consistent_snapshot_support'], ('host', 'pool', None))
s_kwargs = {
'share_type_id': self.share_type_id,
'share_group_id': share_group['id'],
'version': '2.33',
'cleanup_in_class': False,

View File

@ -28,17 +28,27 @@ CONF = config.CONF
@testtools.skipUnless(
CONF.share.run_share_group_tests, 'Share Group tests disabled.')
@base.skip_if_microversion_lt(constants.MIN_SHARE_GROUP_MICROVERSION)
class ShareGroupsNegativeTest(base.BaseSharesTest):
class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ShareGroupsNegativeTest, cls).resource_setup()
# Create a share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# Create a share group type
cls.share_group_type = cls._create_share_group_type()
cls.share_group_type_id = cls.share_group_type['id']
# Create a share group
cls.share_group_name = data_utils.rand_name("tempest-sg-name")
cls.share_group_desc = data_utils.rand_name("tempest-sg-description")
cls.share_group = cls.create_share_group(
name=cls.share_group_name,
description=cls.share_group_desc
description=cls.share_group_desc,
share_group_type_id=cls.share_group_type_id,
share_type_ids=[cls.share_type_id],
)
# Create a share in the share group
cls.share_name = data_utils.rand_name("tempest-share-name")
@ -48,6 +58,7 @@ class ShareGroupsNegativeTest(base.BaseSharesTest):
name=cls.share_name,
description=cls.share_desc,
size=cls.share_size,
share_type_id=cls.share_type_id,
share_group_id=cls.share_group['id'],
experimental=True,
)
@ -56,7 +67,7 @@ class ShareGroupsNegativeTest(base.BaseSharesTest):
cls.sg_snap_desc = data_utils.rand_name(
"tempest-group-snap-description")
cls.sg_snapshot = cls.create_share_group_snapshot_wait_for_active(
cls.share_group["id"],
cls.share_group['id'],
name=cls.sg_snap_name,
description=cls.sg_snap_desc
)
@ -228,6 +239,8 @@ class ShareGroupsNegativeTest(base.BaseSharesTest):
share_group = self.create_share_group(
name='tempest_sg',
description='tempest_sg_desc',
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
cleanup_in_class=False,
version=constants.MIN_SHARE_GROUP_MICROVERSION,
)
@ -246,6 +259,8 @@ class ShareGroupsNegativeTest(base.BaseSharesTest):
name='tempest_sg',
description='tempest_sg_desc',
availability_zone='fake_nonexistent_az',
share_group_type_id=self.share_group_type_id,
share_type_ids=[self.share_type_id],
version=constants.MIN_SHARE_GROUP_MICROVERSION)
@base.skip_if_microversion_lt("2.34")
@ -268,6 +283,7 @@ class ShareGroupsNegativeTest(base.BaseSharesTest):
self.assertRaises(
lib_exc.BadRequest,
self.create_share,
share_type_id=self.share_type_id,
share_group_id=self.share_group['id'],
availability_zone=different_az,
version='2.34')

View File

@ -133,11 +133,16 @@ class ShareNetworkListMixin(object):
self.assertGreaterEqual(sn['created_at'], created_since)
class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
@classmethod
def resource_setup(cls):
super(ShareNetworksTest, cls).resource_setup()
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
ss_data = cls.generate_security_service_data()
cls.ss_ldap = cls.create_security_service(**ss_data)
@ -218,7 +223,8 @@ class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
@testtools.skipIf(
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
def test_update_valid_keys_sh_server_exists(self):
self.create_share(cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
update_dict = {
"name": "new_name",
"description": "new_description",
@ -269,7 +275,8 @@ class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
def test_gateway_with_neutron(self):
subnet_client = self.subnets_client
self.create_share(cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
share_net_details = self.shares_v2_client.get_share_network(
self.shares_v2_client.share_network_id)
subnet_details = subnet_client.show_subnet(
@ -288,7 +295,8 @@ class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
def test_mtu_with_neutron(self):
network_client = self.networks_client
self.create_share(cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
share_net_details = self.shares_v2_client.get_share_network(
self.shares_v2_client.share_network_id)
network_details = network_client.show_network(

View File

@ -23,7 +23,14 @@ from manila_tempest_tests.tests.api import base
CONF = config.CONF
class ShareNetworksNegativeTest(base.BaseSharesTest):
class ShareNetworksNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(ShareNetworksNegativeTest, cls).resource_setup()
# create share type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_get_share_network_without_id(self):
@ -61,7 +68,8 @@ class ShareNetworksNegativeTest(base.BaseSharesTest):
@testtools.skipIf(
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
def test_try_update_invalid_keys_sh_server_exists(self):
self.create_share(cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
self.assertRaises(lib_exc.Forbidden,
self.shares_client.update_share_network,
@ -112,8 +120,9 @@ class ShareNetworksNegativeTest(base.BaseSharesTest):
cleanup_in_class=False)
# Create share with share network
self.create_share(
share_network_id=new_sn['id'], cleanup_in_class=False)
self.create_share(share_type_id=self.share_type_id,
share_network_id=new_sn['id'],
cleanup_in_class=False)
# Try delete share network
self.assertRaises(

View File

@ -22,18 +22,9 @@ from manila_tempest_tests.tests.api import base
class ShareTypesNegativeTest(base.BaseSharesMixedTest):
@classmethod
def _create_share_type(cls):
name = data_utils.rand_name("unique_st_name")
extra_specs = cls.add_extra_specs_to_dict()
return cls.create_share_type(
name, extra_specs=extra_specs,
client=cls.admin_client)
@classmethod
def resource_setup(cls):
super(ShareTypesNegativeTest, cls).resource_setup()
cls.admin_client = cls.admin_shares_v2_client
cls.st = cls._create_share_type()
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@ -47,18 +38,18 @@ class ShareTypesNegativeTest(base.BaseSharesMixedTest):
def test_try_delete_share_type_with_user(self):
self.assertRaises(lib_exc.Forbidden,
self.shares_client.delete_share_type,
self.st["share_type"]["id"])
self.st["id"])
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_add_access_to_share_type_with_user(self):
self.assertRaises(lib_exc.Forbidden,
self.shares_client.add_access_to_share_type,
self.st['share_type']['id'],
self.st['id'],
self.shares_client.tenant_id)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_try_remove_access_from_share_type_with_user(self):
self.assertRaises(lib_exc.Forbidden,
self.shares_client.remove_access_from_share_type,
self.st['share_type']['id'],
self.st['id'],
self.shares_client.tenant_id)

View File

@ -24,7 +24,7 @@ from manila_tempest_tests import utils
CONF = config.CONF
class SharesNFSTest(base.BaseSharesTest):
class SharesNFSTest(base.BaseSharesMixedTest):
"""Covers share functionality, that is related to NFS share type."""
protocol = "nfs"
@ -34,12 +34,18 @@ class SharesNFSTest(base.BaseSharesTest):
if cls.protocol not in CONF.share.enable_protocols:
message = "%s tests are disabled" % cls.protocol
raise cls.skipException(message)
cls.share = cls.create_share(cls.protocol)
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
@tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
def test_create_get_delete_share(self):
share = self.create_share(self.protocol)
share = self.create_share(self.protocol,
share_type_id=self.share_type_id)
detailed_elements = {'name', 'id', 'availability_zone',
'description', 'project_id',
'created_at', 'share_proto', 'metadata',
@ -153,8 +159,10 @@ class SharesNFSTest(base.BaseSharesTest):
self.share["id"], cleanup_in_class=False)
# create share from snapshot
s2 = self.create_share(
self.protocol, snapshot_id=snap["id"], cleanup_in_class=False)
s2 = self.create_share(self.protocol,
share_type_id=self.share_type_id,
snapshot_id=snap["id"],
cleanup_in_class=False)
# The 'status' of the share returned by the create API must be
# set and have value either 'creating' or
@ -189,8 +197,10 @@ class SharesNFSTest(base.BaseSharesTest):
self.share["id"], cleanup_in_class=False)
# create share from snapshot
child = self.create_share(
self.protocol, snapshot_id=snap["id"], cleanup_in_class=False)
child = self.create_share(self.protocol,
share_type_id=self.share_type_id,
snapshot_id=snap["id"],
cleanup_in_class=False)
# The 'status' of the share returned by the create API must be
# set and have value either 'creating' or

View File

@ -29,7 +29,7 @@ LATEST_MICROVERSION = CONF.share.max_api_microversion
@ddt.ddt
class SharesActionsTest(base.BaseSharesTest):
class SharesActionsTest(base.BaseSharesMixedTest):
"""Covers share functionality, that doesn't related to share type."""
@classmethod
@ -38,6 +38,10 @@ class SharesActionsTest(base.BaseSharesTest):
cls.shares = []
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share_name = data_utils.rand_name("tempest-share-name")
cls.share_desc = data_utils.rand_name("tempest-share-description")
@ -49,6 +53,7 @@ class SharesActionsTest(base.BaseSharesTest):
name=cls.share_name,
description=cls.share_desc,
metadata=cls.metadata,
share_type_id=cls.share_type_id,
))
if CONF.share.run_snapshot_tests:
@ -402,12 +407,14 @@ class SharesActionsTest(base.BaseSharesTest):
public_share = self.create_share(
name='public_share',
description='public_share_desc',
share_type_id=self.share_type_id,
is_public=True,
cleanup_in_class=False
)
private_share = self.create_share(
name='private_share',
description='private_share_desc',
share_type_id=self.share_type_id,
is_public=False,
cleanup_in_class=False
)
@ -612,7 +619,8 @@ class SharesActionsTest(base.BaseSharesTest):
CONF.share.run_extend_tests,
"Share extend tests are disabled.")
def test_extend_share(self):
share = self.create_share(cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
new_size = int(share['size']) + 1
# extend share and wait for active status
@ -636,7 +644,9 @@ class SharesActionsTest(base.BaseSharesTest):
"Share shrink tests are disabled.")
def test_shrink_share(self):
size = CONF.share.share_size + 1
share = self.create_share(size=size, cleanup_in_class=False)
share = self.create_share(size=size,
share_type_id=self.share_type_id,
cleanup_in_class=False)
new_size = int(share['size']) - 1
# shrink share and wait for active status
@ -655,17 +665,23 @@ class SharesActionsTest(base.BaseSharesTest):
self.assertEqual(new_size, share_get['size'], msg)
class SharesRenameTest(base.BaseSharesTest):
class SharesRenameTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SharesRenameTest, cls).resource_setup()
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share_name = data_utils.rand_name("tempest-share-name")
cls.share_desc = data_utils.rand_name("tempest-share-description")
cls.share = cls.create_share(
name=cls.share_name, description=cls.share_desc)
name=cls.share_name,
description=cls.share_desc,
share_type_id=cls.share_type_id)
if CONF.share.run_snapshot_tests:
# create snapshot

View File

@ -27,15 +27,21 @@ CONF = config.CONF
@ddt.ddt
class SharesActionsNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SharesActionsNegativeTest, cls).resource_setup()
cls.admin_client = cls.admin_shares_v2_client
cls.share_name = data_utils.rand_name("tempest-share-name")
cls.share_desc = data_utils.rand_name("tempest-share-description")
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(
name=cls.share_name,
description=cls.share_desc)
description=cls.share_desc,
share_type_id=cls.share_type_id)
if CONF.share.run_snapshot_tests:
# create snapshot
cls.snap_name = data_utils.rand_name("tempest-snapshot-name")
@ -93,7 +99,8 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
CONF.share.run_extend_tests,
"Share extend tests are disabled.")
def test_share_extend_with_invalid_share_state(self):
share = self.create_share(cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
new_size = int(share['size']) + 1
# set "error" state
@ -137,7 +144,9 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
"Share shrink tests are disabled.")
def test_share_shrink_with_invalid_share_state(self):
size = CONF.share.share_size + 1
share = self.create_share(size=size, cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
size=size,
cleanup_in_class=False)
new_size = int(share['size']) - 1
# set "error" state

View File

@ -24,13 +24,20 @@ from manila_tempest_tests.tests.api import base
CONF = config.CONF
class SharesNegativeTest(base.BaseSharesTest):
class SharesNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SharesNegativeTest, cls).resource_setup()
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(
name='public_share',
description='public_share_desc',
share_type_id=cls.share_type_id,
is_public=True,
metadata={'key': 'value'}
)
@ -48,7 +55,7 @@ class SharesNegativeTest(base.BaseSharesTest):
# share can not be deleted while snapshot exists
# create share
share = self.create_share()
share = self.create_share(share_type_id=self.share_type_id)
# create snapshot
self.create_snapshot_wait_for_active(share["id"])
@ -70,7 +77,9 @@ class SharesNegativeTest(base.BaseSharesTest):
try: # create share
size = CONF.share.share_size + 1
share = self.create_share(size=size, cleanup_in_class=False)
share = self.create_share(size=size,
share_type_id=self.share_type_id,
cleanup_in_class=False)
except share_exceptions.ShareBuildErrorException:
self.skip(skip_msg)
@ -83,6 +92,7 @@ class SharesNegativeTest(base.BaseSharesTest):
# try create share from snapshot with less size
self.assertRaises(lib_exc.BadRequest,
self.create_share,
share_type_id=self.share_type_id,
snapshot_id=snap["id"],
cleanup_in_class=False)
@ -92,6 +102,7 @@ class SharesNegativeTest(base.BaseSharesTest):
def test_create_share_with_nonexistant_share_network(self):
self.assertRaises(lib_exc.NotFound,
self.shares_client.create_share,
share_type_id=self.share_type_id,
share_network_id="wrong_sn_id")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
@ -107,7 +118,8 @@ class SharesNegativeTest(base.BaseSharesTest):
# have 'create_share_from_snapshot_support'.
# create share
share = self.create_share(cleanup_in_class=False)
share = self.create_share(share_type_id=self.share_type_id,
cleanup_in_class=False)
# get parent's share network
parent_share = self.shares_client.get_share(share["id"])
@ -130,6 +142,7 @@ class SharesNegativeTest(base.BaseSharesTest):
self.assertRaises(
lib_exc.BadRequest,
self.create_share,
share_type_id=self.share_type_id,
cleanup_in_class=False,
share_network_id=new_duplicated_sn["id"],
snapshot_id=snap["id"],
@ -178,7 +191,14 @@ class SharesNegativeTest(base.BaseSharesTest):
'key')
class SharesAPIOnlyNegativeTest(base.BaseSharesTest):
class SharesAPIOnlyNegativeTest(base.BaseSharesMixedTest):
@classmethod
def resource_setup(cls):
super(SharesAPIOnlyNegativeTest, cls).resource_setup()
# create share_type
cls.share_type = cls._create_share_type()
cls.share_type_id = cls.share_type['id']
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_unmanage_share_by_user(self):
@ -209,22 +229,29 @@ class SharesAPIOnlyNegativeTest(base.BaseSharesTest):
def test_create_share_non_existent_az(self):
self.assertRaises(lib_exc.NotFound,
self.shares_v2_client.create_share,
share_type_id=self.share_type_id,
availability_zone='fake_az')
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_create_share_with_zero_size(self):
self.assertRaises(lib_exc.BadRequest,
self.shares_client.create_share, size=0)
self.shares_client.create_share,
share_type_id=self.share_type_id,
size=0)
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_create_share_with_invalid_size(self):
self.assertRaises(lib_exc.BadRequest,
self.shares_client.create_share, size="#$%")
self.shares_client.create_share,
share_type_id=self.share_type_id,
size="#$%")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_create_share_with_out_passing_size(self):
self.assertRaises(lib_exc.BadRequest,
self.shares_client.create_share, size="")
self.shares_client.create_share,
share_type_id=self.share_type_id,
size="")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
@testtools.skipUnless(CONF.share.run_snapshot_tests,
@ -246,12 +273,15 @@ class SharesAPIOnlyNegativeTest(base.BaseSharesTest):
def test_create_share_with_invalid_protocol(self):
self.assertRaises(lib_exc.BadRequest,
self.shares_client.create_share,
share_type_id=self.share_type_id,
share_protocol="nonexistent_protocol")
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_create_share_with_wrong_public_value(self):
self.assertRaises(lib_exc.BadRequest,
self.shares_client.create_share, is_public='truebar')
self.shares_client.create_share,
share_type_id=self.share_type_id,
is_public='truebar')
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
def test_get_share_with_wrong_id(self):

View File

@ -25,14 +25,21 @@ from manila_tempest_tests.tests.api import base
CONF = config.CONF
class BaseShareSnapshotRulesTest(base.BaseSharesTest):
class BaseShareSnapshotRulesTest(base.BaseSharesMixedTest):
protocol = ""
@classmethod
def resource_setup(cls):
super(BaseShareSnapshotRulesTest, cls).resource_setup()
cls.share = cls.create_share(cls.protocol)
# create share_type
extra_specs = {'mount_snapshot_support': 'True'}
cls.share_type = cls._create_share_type(extra_specs)
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
cls.snapshot = cls.create_snapshot_wait_for_active(cls.share['id'])
def _test_create_delete_access_rules(self, access_to):

View File

@ -42,9 +42,13 @@ class SnapshotIpRulesForNFSNegativeTest(
msg = "IP rule tests for %s protocol are disabled." % cls.protocol
raise cls.skipException(msg)
super(SnapshotIpRulesForNFSNegativeTest, cls).resource_setup()
# create share type
extra_specs = {'mount_snapshot_support': 'True'}
cls.share_type = cls._create_share_type(extra_specs)
cls.share_type_id = cls.share_type['id']
# create share
cls.share = cls.create_share(cls.protocol)
cls.share = cls.create_share(cls.protocol,
share_type_id=cls.share_type_id)
cls.snap = cls.create_snapshot_wait_for_active(cls.share["id"])
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)

View File

@ -164,5 +164,7 @@ def get_configured_extra_specs(variation=None):
CONF.share.multitenancy_enabled)
extra_specs['snapshot_support'] = (
CONF.share.capability_snapshot_support)
extra_specs['create_share_from_snapshot_support'] = (
CONF.share.capability_create_share_from_snapshot_support)
return extra_specs