blob: 0eeb31a4f199cc298d9415fba4b3ba2af6cc1df4 [file] [log] [blame]
#!/usr/bin/python
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittests for timeout_and_retry.py."""
import logging
import time
import unittest
from devil.utils import reraiser_thread
from devil.utils import timeout_retry
_DEFAULT_TIMEOUT = .1
class TestException(Exception):
pass
def _CountTries(tries):
tries[0] += 1
raise TestException
class TestRun(unittest.TestCase):
"""Tests for timeout_retry.Run."""
def testRun(self):
self.assertTrue(timeout_retry.Run(
lambda x: x, 30, 3, [True], {}))
def testTimeout(self):
tries = [0]
def _sleep():
tries[0] += 1
time.sleep(1)
self.assertRaises(
reraiser_thread.TimeoutError, timeout_retry.Run, _sleep, .01, 1,
error_log_func=logging.debug)
self.assertEqual(tries[0], 2)
def testRetries(self):
tries = [0]
self.assertRaises(
TestException, timeout_retry.Run, lambda: _CountTries(tries),
_DEFAULT_TIMEOUT, 3, error_log_func=logging.debug)
self.assertEqual(tries[0], 4)
def testNoRetries(self):
tries = [0]
self.assertRaises(
TestException, timeout_retry.Run, lambda: _CountTries(tries),
_DEFAULT_TIMEOUT, 0, error_log_func=logging.debug)
self.assertEqual(tries[0], 1)
def testReturnValue(self):
self.assertTrue(timeout_retry.Run(lambda: True, _DEFAULT_TIMEOUT, 3))
def testCurrentTimeoutThreadGroup(self):
def InnerFunc():
current_thread_group = timeout_retry.CurrentTimeoutThreadGroup()
self.assertIsNotNone(current_thread_group)
def InnerInnerFunc():
self.assertEqual(current_thread_group,
timeout_retry.CurrentTimeoutThreadGroup())
return True
return reraiser_thread.RunAsync((InnerInnerFunc,))[0]
self.assertTrue(timeout_retry.Run(InnerFunc, _DEFAULT_TIMEOUT, 3))
if __name__ == '__main__':
unittest.main()