예제 #1
0
    def test_get_timer_recursive(self):
        """
        If a function acquires a countdown timer with default scope,
        then recursive calls to the function should re-acquire the
        timer rather than creating a new one. That is only the last
        recursive call's timer will take effect.
        """
        self.server.start()
        timer.configure(timer.LocalTimerClient(self.mp_queue))

        # func should not time out
        def func(n):
            if n > 0:
                with timer.expires(after=0.1):
                    func(n - 1)
                    time.sleep(0.05)

        func(4)

        # func2 should time out
        def func2(n):
            if n > 0:
                with timer.expires(after=0.1):
                    func2(n - 1)
                    time.sleep(0.2)

        p = mp.Process(target=func2, args=(2, ))
        p.start()
        p.join()
        self.assertEqual(-signal.SIGKILL, p.exitcode)
예제 #2
0
    def test_client_interaction(self):
        # no timer client configured but one passed in explicitly
        # no exception expected
        timer_client = timer.LocalTimerClient(self.mp_queue)
        timer_client.acquire = mock.MagicMock(wraps=timer_client.acquire)
        timer_client.release = mock.MagicMock(wraps=timer_client.release)
        with timer.expires(after=1, scope="test", client=timer_client):
            pass

        timer_client.acquire.assert_called_once_with("test", mock.ANY)
        timer_client.release.assert_called_once_with("test")
예제 #3
0
def _stuck_function(rank, mp_queue):
    timer.configure(timer.LocalTimerClient(mp_queue))
    with timer.expires(after=1):
        time.sleep(5)
예제 #4
0
    def _run(mp_queue, timeout, duration):
        client = timer.LocalTimerClient(mp_queue)
        timer.configure(client)

        with timer.expires(after=timeout):
            time.sleep(duration)
예제 #5
0
 def test_happy_path(self):
     timer.configure(timer.LocalTimerClient(self.mp_queue))
     with timer.expires(after=0.5):
         time.sleep(0.1)