示例#1
0
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
示例#2
0
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):