blob: bf0d62f890f8171e50429b5b0fcf91db5942bc09 [file] [log] [blame]
"""Utility functions for handling async events.
"""
from mobly import asserts
from mobly.controllers.android_device_lib import callback_handler
def AssertAsyncSuccess(callback):
"""Wrapping the result of an asynchronous Rpc for convenience.
This wrapper handles the event posted by the corresponding `FutureCallback`
object signalling whether the async operation was successful or not with
`onSuccess` and `onFailure` callbacks.
Args:
callback: CallbackHandler, the handler that's used to poll events triggered
by the async Rpc call.
Returns:
dictionary, the event that carries the onSuccess signal.
"""
try:
status_event = callback.waitAndGet('onSuccess', 30)
except callback_handler.TimeoutError:
try:
failure_event = callback.waitAndGet('onFailure', 30)
asserts.fail('Operation failed: %s' % failure_event.data)
except callback_handler.TimeoutError:
asserts.fail('Timed out waiting for status event.')
return status_event