| Index: client/bin/site_utils.py
|
| diff --git a/client/bin/site_utils.py b/client/bin/site_utils.py
|
| index 50a0bdff94cd94ad048e6f0cdfeebf0771f0292e..2e3caf3c7fe818bccc577527f77de3a97dcafa8a 100644
|
| --- a/client/bin/site_utils.py
|
| +++ b/client/bin/site_utils.py
|
| @@ -6,23 +6,35 @@ import time
|
| from autotest_lib.client.common_lib import error
|
|
|
|
|
| +class TimeoutError(error.TestError):
|
| + """Error raised when we time out when waiting on a condition."""
|
| +
|
| +
|
| def poll_for_condition(
|
| - condition, exception=None, timeout=10, sleep_interval=0.1):
|
| + condition, exception=None, timeout=10, sleep_interval=0.1, desc=None):
|
| """Poll until a condition becomes true.
|
|
|
| condition: function taking no args and returning bool
|
| exception: exception to throw if condition doesn't become true
|
| timeout: maximum number of seconds to wait
|
| sleep_interval: time to sleep between polls
|
| + desc: description of default TimeoutError used if 'exception' is None
|
|
|
| Raises:
|
| - 'exception' arg if supplied; error.TestError otherwise
|
| + 'exception' arg if supplied; site_utils.TimeoutError otherwise
|
| """
|
| start_time = time.time()
|
| while True:
|
| if condition():
|
| return
|
| if time.time() + sleep_interval - start_time > timeout:
|
| - raise exception if exception else error.TestError(
|
| - 'Timed out waiting for condition')
|
| + if exception:
|
| + raise exception
|
| +
|
| + if desc:
|
| + desc = 'Timed out waiting for condition: %s' % desc
|
| + else:
|
| + desc = 'Timed out waiting for unnamed condition'
|
| + raise error.TestError(desc)
|
| +
|
| time.sleep(sleep_interval)
|
|
|