def time_out(time): """Raises TimeoutError if the decorated method does not finish in time.""" if not compatability.supports_time_out(): raise ImportError("time_out not supported for this version of Python.") import signal def cb_timeout(signum, frame): raise TimeoutError("Time out after waiting " + str(time) + " seconds.") def return_method(func): """Turns function into decorated function.""" @wraps(func) def new_method(*kargs, **kwargs): previous_handler = signal.signal(signal.SIGALRM, cb_timeout) try: signal.alarm(time) return func(*kargs, **kwargs) finally: signal.alarm(0) signal.signal(signal.SIGALRM, previous_handler) return new_method return return_method
def test_filter_with_classes(self): from proboscis_example import RandomTestOne self.plan.filter(classes=[RandomTestOne]) filtered = self.plan.tests # Should include RandomTestOne, which depends on RandomTestZero, # which depends on init self.assertEqual(3, len(filtered)) from proboscis_example import StartUp self.assertEqual(StartUp, filtered[0].entry.home) from proboscis_example import RandomTestZero self.assertEqual(RandomTestZero, filtered[1].entry.home) self.assertEqual(RandomTestOne, filtered[2].entry.home) if compatability.supports_time_out(): @time_out(2) def lackadaisical_multiply(a, b): sum = 0 for i in range(0, b): time.sleep(1) sum = sum + a return sum class TestTimeoutDecorator(unittest.TestCase): def test_should_not_time_out_before_time_exceeded(self): self.assertEqual(0, lackadaisical_multiply(4, 0)) self.assertEqual(8, lackadaisical_multiply(8, 1))
def test_filter_with_classes(self): from tests.unit.proboscis_example import RandomTestOne self.plan.filter(classes=[RandomTestOne]) filtered = self.plan.tests # Should include RandomTestOne, which depends on RandomTestZero, # which depends on init self.assertEqual(3, len(filtered)) from tests.unit.proboscis_example import StartUp self.assertEqual(StartUp, filtered[0].entry.home) from tests.unit.proboscis_example import RandomTestZero self.assertEqual(RandomTestZero, filtered[1].entry.home) self.assertEqual(RandomTestOne, filtered[2].entry.home) if compatability.supports_time_out(): @time_out(2) def lackadaisical_multiply(a, b): sum = 0 for i in range(0, b): time.sleep(1) sum = sum + a return sum class TestTimeoutDecorator(unittest.TestCase): def test_should_not_time_out_before_time_exceeded(self): self.assertEqual(0, lackadaisical_multiply(4, 0)) self.assertEqual(8, lackadaisical_multiply(8, 1)) def test_should_timeout_if_time_exceeded(self):