Merge "Move try-again loop around all data methods"
This commit is contained in:
commit
bd68bcc507
@ -221,54 +221,55 @@ class TestHelper(object):
|
|||||||
Since this method may be called multiple times, the
|
Since this method may be called multiple times, the
|
||||||
'add_actual_data' function should be idempotent.
|
'add_actual_data' function should be idempotent.
|
||||||
"""
|
"""
|
||||||
self._perform_data_action(self.FN_ADD, data_type.name, host,
|
self._perform_data_action(self.FN_ADD, data_type.name,
|
||||||
*args, **kwargs)
|
host, *args, **kwargs)
|
||||||
|
|
||||||
def remove_data(self, data_type, host, *args, **kwargs):
|
def remove_data(self, data_type, host, *args, **kwargs):
|
||||||
"""Removes all data associated with 'data_type'. See
|
"""Removes all data associated with 'data_type'. See
|
||||||
instructions for 'add_data' for implementation guidance.
|
instructions for 'add_data' for implementation guidance.
|
||||||
"""
|
"""
|
||||||
self._perform_data_action(self.FN_REMOVE, data_type.name, host,
|
self._perform_data_action(self.FN_REMOVE, data_type.name,
|
||||||
*args, **kwargs)
|
host, *args, **kwargs)
|
||||||
|
|
||||||
def verify_data(self, data_type, host, *args, **kwargs):
|
def verify_data(self, data_type, host, *args, **kwargs):
|
||||||
"""Verify that the data of type 'data_type' exists in the
|
"""Verify that the data of type 'data_type' exists in the
|
||||||
datastore. This can be done by testing edge cases, and possibly
|
datastore. This can be done by testing edge cases, and possibly
|
||||||
some random elements within the set. See
|
some random elements within the set. See
|
||||||
instructions for 'add_data' for implementation guidance.
|
instructions for 'add_data' for implementation guidance.
|
||||||
By default, the verification is attempted 10 times, sleeping for 3
|
"""
|
||||||
|
self._perform_data_action(self.FN_VERIFY, data_type.name,
|
||||||
|
host, *args, **kwargs)
|
||||||
|
|
||||||
|
def _perform_data_action(self, fn_type, fn_name, host,
|
||||||
|
*args, **kwargs):
|
||||||
|
"""By default, the action is attempted 10 times, sleeping for 3
|
||||||
seconds between each attempt. This can be controlled by the
|
seconds between each attempt. This can be controlled by the
|
||||||
retry_count and retry_sleep kwarg values.
|
retry_count and retry_sleep kwarg values.
|
||||||
"""
|
"""
|
||||||
retry_count = kwargs.pop('retry_count', 10) or 0
|
retry_count = kwargs.pop('retry_count', 10) or 0
|
||||||
retry_sleep = kwargs.pop('retry_sleep', 3) or 0
|
retry_sleep = kwargs.pop('retry_sleep', 3) or 0
|
||||||
|
|
||||||
|
fns = self._data_fns[fn_type]
|
||||||
|
data_fn_name = self.data_fn_pattern % (fn_type, fn_name)
|
||||||
attempts = -1
|
attempts = -1
|
||||||
while True:
|
while True:
|
||||||
attempts += 1
|
attempts += 1
|
||||||
try:
|
try:
|
||||||
self._perform_data_action(self.FN_VERIFY, data_type.name, host,
|
fns[data_fn_name](self, host, *args, **kwargs)
|
||||||
*args, **kwargs)
|
|
||||||
break
|
break
|
||||||
|
except SkipTest:
|
||||||
|
raise
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
self.report.log("Attempt %d to verify data type %s failed\n%s"
|
self.report.log("Attempt %d to %s data type %s failed\n%s"
|
||||||
% (attempts, data_type.name, ex))
|
% (attempts, fn_type, fn_name, ex))
|
||||||
if attempts > retry_count:
|
if attempts > retry_count:
|
||||||
raise
|
raise RuntimeError("Error calling %s from class %s - %s" %
|
||||||
|
(data_fn_name, self.__class__.__name__,
|
||||||
|
ex))
|
||||||
self.report.log("Trying again (after %d second sleep)" %
|
self.report.log("Trying again (after %d second sleep)" %
|
||||||
retry_sleep)
|
retry_sleep)
|
||||||
sleep(retry_sleep)
|
sleep(retry_sleep)
|
||||||
|
|
||||||
def _perform_data_action(self, fn_type, fn_name, host, *args, **kwargs):
|
|
||||||
fns = self._data_fns[fn_type]
|
|
||||||
data_fn_name = self.data_fn_pattern % (fn_type, fn_name)
|
|
||||||
try:
|
|
||||||
fns[data_fn_name](self, host, *args, **kwargs)
|
|
||||||
except SkipTest:
|
|
||||||
raise
|
|
||||||
except Exception as ex:
|
|
||||||
raise RuntimeError("Error calling %s from class %s - %s" %
|
|
||||||
(data_fn_name, self.__class__.__name__, ex))
|
|
||||||
|
|
||||||
def _build_data_fns(self):
|
def _build_data_fns(self):
|
||||||
"""Build the base data functions specified by FN_TYPE_*
|
"""Build the base data functions specified by FN_TYPE_*
|
||||||
for each of the types defined in the DataType class. For example,
|
for each of the types defined in the DataType class. For example,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user