Improve Tempest tests for consistency groups

Resource setup for 'ConsistencyGroupActionsTest' test class is
inefficient. It creates three separate shares waiting for 'available'
status going one by one. It can be improved by creating three shares
at once and then waiting for their status. So, update resource setup
for mentioned class and do related minor updates for tests of that
class.

Change-Id: Ibd82796866851cba22b417fad34f41dc2aa756e8
Closes-Bug: #1493406
This commit is contained in:
Valeriy Ponomaryov 2015-11-18 19:17:46 +02:00
parent f15e0bf123
commit 429bd1fec6
2 changed files with 56 additions and 99 deletions

View File

@ -70,31 +70,16 @@ class ConsistencyGroupActionsTest(base.BaseSharesAdminTest):
def test_create_cg_from_multi_typed_populated_cgsnapshot_v2_4(self):
share_name = data_utils.rand_name("tempest-share-name")
share_desc = data_utils.rand_name("tempest-share-description")
share_size = 1
share = self.create_share(
cleanup_in_class=False,
name=share_name,
description=share_desc,
size=share_size,
consistency_group_id=self.consistency_group['id'],
share_type_id=self.share_type['id'],
client=self.shares_v2_client,
version='2.4',
)
share_name2 = data_utils.rand_name("tempest-share-name")
share_desc2 = data_utils.rand_name("tempest-share-description")
share_size2 = 1
share2 = self.create_share(
cleanup_in_class=False,
name=share_name2,
description=share_desc2,
size=share_size2,
consistency_group_id=self.consistency_group['id'],
share_type_id=self.share_type2['id'],
client=self.shares_v2_client,
version='2.4',
)
shares = self.create_shares([
{'kwargs': {
'cleanup_in_class': False,
'name': share_name,
'description': share_desc,
'consistency_group_id': self.consistency_group['id'],
'share_type_id': st_id,
}} for st_id in (self.share_type['id'], self.share_type2['id'])
])
cg_shares = self.shares_v2_client.list_shares(
detailed=True,
@ -103,7 +88,7 @@ class ConsistencyGroupActionsTest(base.BaseSharesAdminTest):
)
cg_share_ids = [s['id'] for s in cg_shares]
for share_id in [share['id'], share2['id']]:
for share_id in (shares[0]['id'], shares[1]['id']):
self.assertIn(share_id, cg_share_ids, 'Share %s not in '
'consistency group %s.' %
(share_id, self.consistency_group['id']))

View File

@ -39,78 +39,52 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
@classmethod
def resource_setup(cls):
super(ConsistencyGroupActionsTest, cls).resource_setup()
# Create consistency group
# Create first consistency group
cls.cg_name = data_utils.rand_name("tempest-cg-name")
cls.cg_desc = data_utils.rand_name("tempest-cg-description")
cls.consistency_group = cls.create_consistency_group(
name=cls.cg_name,
description=cls.cg_desc,
)
# Create 2 shares inside consistency group
cls.share_name = data_utils.rand_name("tempest-share-name")
cls.share_desc = data_utils.rand_name("tempest-share-description")
cls.share_size = 1
cls.share = cls.create_share(
name=cls.share_name,
description=cls.share_desc,
size=cls.share_size,
consistency_group_id=cls.consistency_group['id'],
metadata={'key': 'value'},
client=cls.shares_v2_client,
)
cls.share_name2 = data_utils.rand_name("tempest-share-name")
cls.share_desc2 = data_utils.rand_name("tempest-share-description")
cls.share_size2 = 2
cls.share2 = cls.create_share(
name=cls.share_name2,
description=cls.share_desc2,
size=cls.share_size2,
consistency_group_id=cls.consistency_group['id'],
client=cls.shares_v2_client,
)
cls.cgsnap_name = data_utils.rand_name("tempest-cgsnap-name")
cls.cgsnap_desc = data_utils.rand_name("tempest-cgsnap-description")
cls.cgsnapshot = cls.create_cgsnapshot_wait_for_active(
cls.consistency_group["id"],
name=cls.cgsnap_name,
description=cls.cgsnap_desc)
cls.cg = cls.create_consistency_group(
name=cls.cg_name, description=cls.cg_desc)
# Create second consistency group for purposes of sorting and snapshot
# filtering
cls.cg_name2 = data_utils.rand_name("tempest-cg-name")
cls.cg_desc2 = data_utils.rand_name("tempest-cg-description")
cls.consistency_group2 = cls.create_consistency_group(
name=cls.cg_name2,
description=cls.cg_desc2,
)
cls.cg2 = cls.create_consistency_group(
name=cls.cg_name, description=cls.cg_desc)
# Create 1 share in second consistency group
cls.share_name3 = data_utils.rand_name("tempest-share-name")
cls.share_desc3 = data_utils.rand_name("tempest-share-description")
cls.share3 = cls.create_share(
name=cls.share_name3,
description=cls.share_desc3,
size=cls.share_size,
consistency_group_id=cls.consistency_group2['id'],
client=cls.shares_v2_client,
)
# Create 2 shares inside first CG and 1 inside second CG
cls.share_name = data_utils.rand_name("tempest-share-name")
cls.share_desc = data_utils.rand_name("tempest-share-description")
cls.share_size = 1
cls.share_size2 = 2
cls.shares = cls.create_shares([
{'kwargs': {
'name': cls.share_name,
'description': cls.share_desc,
'size': size,
'consistency_group_id': cg_id,
}} for size, cg_id in ((cls.share_size, cls.cg['id']),
(cls.share_size2, cls.cg['id']),
(cls.share_size, cls.cg2['id']))
])
# Create CG snapshots
cls.cgsnap_name = data_utils.rand_name("tempest-cgsnap-name")
cls.cgsnap_desc = data_utils.rand_name("tempest-cgsnap-description")
cls.cgsnapshot = cls.create_cgsnapshot_wait_for_active(
cls.cg["id"],
name=cls.cgsnap_name,
description=cls.cgsnap_desc)
cls.cgsnap_name2 = data_utils.rand_name("tempest-cgsnap-name")
cls.cgsnap_desc2 = data_utils.rand_name("tempest-cgsnap-description")
cls.cgsnapshot2 = cls.create_cgsnapshot_wait_for_active(
cls.consistency_group2['id'],
name=cls.cgsnap_name2,
description=cls.cgsnap_desc2)
cls.cg2['id'], name=cls.cgsnap_name, description=cls.cgsnap_desc)
@test.attr(type=["gate", ])
def test_get_consistency_group_v2_4(self):
# Get consistency group
consistency_group = self.shares_v2_client.get_consistency_group(
self.consistency_group['id'], version='2.4')
self.cg['id'], version='2.4')
# Verify keys
actual_keys = set(consistency_group.keys())
@ -135,7 +109,7 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
def test_get_share_v2_4(self):
# Get share
share = self.shares_v2_client.get_share(self.share['id'],
share = self.shares_v2_client.get_share(self.shares[0]['id'],
version='2.4')
# Verify keys
@ -164,9 +138,8 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
self.assertEqual(self.share_size, int(share["size"]), msg)
msg = "Expected consistency_group_id: '%s', actual value: '%s'" % (
self.consistency_group["id"], share["consistency_group_id"])
self.assertEqual(
self.consistency_group["id"], share["consistency_group_id"], msg)
self.cg["id"], share["consistency_group_id"])
self.assertEqual(self.cg["id"], share["consistency_group_id"], msg)
@test.attr(type=["gate", ])
def test_list_consistency_groups_v2_4(self):
@ -180,8 +153,7 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
consistency_groups]
# Consistency group ids are in list exactly once
for cg_id in [self.consistency_group["id"],
self.consistency_group2["id"]]:
for cg_id in (self.cg["id"], self.cg2["id"]):
gen = [cgid["id"] for cgid in consistency_groups
if cgid["id"] == cg_id]
msg = ("Expected id %s exactly once in consistency group list" %
@ -200,8 +172,7 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
for cg in consistency_groups]
# Consistency group ids are in list exactly once
for cg_id in [self.consistency_group["id"],
self.consistency_group2["id"]]:
for cg_id in (self.cg["id"], self.cg2["id"]):
gen = [cgid["id"] for cgid in consistency_groups
if cgid["id"] == cg_id]
msg = ("Expected id %s exactly once in consistency group list" %
@ -213,7 +184,7 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
shares = self.shares_v2_client.list_shares(
detailed=True,
params={'consistency_group_id': self.consistency_group['id']},
params={'consistency_group_id': self.cg['id']},
version='2.4'
)
@ -222,18 +193,19 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
self.assertEqual(2, len(shares),
'Incorrect number of shares returned. Expected 2, '
'got %s' % len(shares))
self.assertIn(self.share['id'], share_ids,
self.assertIn(self.shares[0]['id'], share_ids,
'Share %s expected in returned list, but got %s'
% (self.share['id'], share_ids))
self.assertIn(self.share2['id'], share_ids,
% (self.shares[0]['id'], share_ids))
self.assertIn(self.shares[1]['id'], share_ids,
'Share %s expected in returned list, but got %s'
% (self.share['id'], share_ids))
% (self.shares[0]['id'], share_ids))
@test.attr(type=["gate", ])
def test_get_cgsnapshot_v2_4(self):
# Get consistency group
consistency_group = self.shares_v2_client.get_consistency_group(
self.consistency_group['id'], version='2.4')
self.cg['id'], version='2.4')
# Verify keys
actual_keys = set(consistency_group.keys())
@ -265,11 +237,11 @@ class ConsistencyGroupActionsTest(base.BaseSharesTest):
'Unexpected number of cgsnapshot members. Expected '
'2, got %s.' % len(cgsnapshot_members))
# Verify each share is represented in the cgsnapshot appropriately
for share_id in [self.share['id'], self.share2['id']]:
for share_id in (self.shares[0]['id'], self.shares[1]['id']):
self.assertIn(share_id, member_share_ids,
'Share missing %s missing from cgsnapshot. Found %s.'
% (share_id, member_share_ids))
for share in [self.share, self.share2]:
for share in (self.shares[0], self.shares[1]):
for member in cgsnapshot_members:
if share['id'] == member['share_id']:
self.assertEqual(share['size'], member['size'])