Improve functional tests

add logging in address association waiter.
add timeout for snapshot creation
fail test if resource can't be cleanuped

Change-Id: I7d805e5b49c359599e26c6f44d68289beee928f7
This commit is contained in:
Andrey Pavlov 2016-02-09 13:11:32 +03:00
parent ea4cab81f7
commit ae0941588d
2 changed files with 15 additions and 4 deletions

17
base.py
View File

@ -364,7 +364,10 @@ class EC2TestCase(base.BaseTestCase):
(cls.friendly_function_call_str(function, *pos_args,
**kw_args),
str((tb[0], tb[1], tb[2]))))
cls.cleanUpItem(function, pos_args, kw_args)
res = cls.cleanUpItem(function, pos_args, kw_args)
if not res:
fail_count += 1
LOG.error('Failure in cleanup for: %s' % str(kw_args))
except BaseException:
fail_count += 1
LOG.exception('Failure in cleanup for: %s' % str(kw_args))
@ -375,6 +378,7 @@ class EC2TestCase(base.BaseTestCase):
@classmethod
def cleanUpItem(cls, function, pos_args, kw_args):
attempts_left = 10
interval = 1
deleted = False
while not deleted and attempts_left > 0:
try:
@ -390,11 +394,13 @@ class EC2TestCase(base.BaseTestCase):
waiter().wait_delete(obj_id)
except botocore.exceptions.ClientError as e:
LOG.exception('Exception occured in cleanup waiting')
return False
except botocore.exceptions.ClientError as e:
error_code = e.response['Error']['Code']
for err in cls._VALID_CLEANUP_ERRORS:
if err in error_code:
deleted = True
break
else:
hook_res = False
key = (function.__name__, error_code)
@ -405,10 +411,13 @@ class EC2TestCase(base.BaseTestCase):
hook_res = hook(obj_id)
if not hook_res:
LOG.error('Cleanup failed: %s', e, exc_info=True)
return
return False
LOG.error('Retrying cleanup due to: %s', e)
time.sleep(1)
time.sleep(interval)
attempts_left -= 1
interval += 1
return deleted
@classmethod
def friendly_function_name_simple(cls, call_able):
@ -477,6 +486,8 @@ class EC2TestCase(base.BaseTestCase):
data = cls.client.describe_addresses(
Filters=[{'Name': 'association-id', 'Values': [assoc_id]}])
LOG.debug('Addresses: %s' % str(data.get('Addresses')))
if ('Addresses' in data and len(data['Addresses']) == 1 and
data['Addresses'][0].get('InstanceId')):
return 'available'

View File

@ -236,7 +236,7 @@ class SnapshotPagingTest(scenario_base.BaseScenarioTest):
waiter = base.EC2Waiter(_create_snapshot)
cls.ids = list()
while len(cls.ids) < cls.SNAPSHOTS_COUNT:
time.sleep(2)
time.sleep(10)
data = waiter.wait_for_result()
snapshot_id = data['SnapshotId']
cls.addResourceCleanUpStatic(cls.client.delete_snapshot,