Exemple #1
0
def test_expiration_timer():
    timer = ExpirationTimer(duration=1.0)
    time.sleep(0.2)
    assert timer.expired() == False
    assert 0.7 <= timer.remainingSeconds() <= 0.9
    time.sleep(1.0)
    assert timer.expired() == True
    assert timer.remainingSeconds() == 0.0
Exemple #2
0
 def testUnExpiredToUnExpiredComparison(self):
     et1 = ExpirationTimer(timedelta(milliseconds=15))
     et2 = ExpirationTimer(timedelta(milliseconds=10))
     assert et1 != et2
     assert et2 != et1
     sleep(et2.remainingSeconds())
     print(str(et1), str(et2))
     assert et1 != et2
     assert et2 != et1
     sleep(et1.remainingSeconds())
     assert et1 == et2
     assert et2 == et1
Exemple #3
0
 def testUnExpiredToUnExpiredComparison(self):
     et1 = ExpirationTimer(timedelta(milliseconds=15))
     et2 = ExpirationTimer(timedelta(milliseconds=10))
     assert et1 != et2
     assert et2 != et1
     sleep(et2.remainingSeconds())
     print(str(et1), str(et2))
     assert et1 != et2
     assert et2 != et1
     sleep(et1.remainingSeconds())
     assert et1 == et2
     assert et2 == et1
Exemple #4
0
    def _run_transport(self, maximumDuration=None, txonly=False,
                       incomingHandler=None):
        # This is where multiple external threads are synchronized for
        # receives.  Transmits will flow down into the transmit layer
        # where they are queued with thread safety, but threads
        # blocking on a receive will all be lined up through this point.

        max_runtime = ExpirationTimer(maximumDuration)

        with self._cv:
            while self._transport_runner:
                self._cv.wait(max_runtime.remainingSeconds())
                if max_runtime.expired():
                    return None
            self._transport_runner = True

        try:
            r = Thespian__UpdateWork()
            while isinstance(r, Thespian__UpdateWork):
                r = self.transport.run(TransmitOnly if txonly else incomingHandler,
                                       max_runtime.remaining())
            return r
            # incomingHandler callback could deadlock on this same thread; is it ever not None?
        finally:
            with self._cv:
                self._transport_runner = False
                self._cv.notify()
Exemple #5
0
 def testNonZeroIsFalse(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert not et
     assert not bool(et)
     sleep(et.remainingSeconds())
     assert et
     assert bool(et)
Exemple #6
0
 def testNonZeroIsFalse(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert not et
     assert not bool(et)
     sleep(et.remainingSeconds())
     assert et
     assert bool(et)
Exemple #7
0
    def _run_transport(self, maximumDuration=None, txonly=False,
                       incomingHandler=None):
        # This is where multiple external threads are synchronized for
        # receives.  Transmits will flow down into the transmit layer
        # where they are queued with thread safety, but threads
        # blocking on a receive will all be lined up through this point.

        max_runtime = ExpirationTimer(maximumDuration)

        with self._cv:
            while self._transport_runner:
                self._cv.wait(max_runtime.remainingSeconds())
                if max_runtime.expired():
                    return None
            self._transport_runner = True

        try:
            r = Thespian__UpdateWork()
            while isinstance(r, Thespian__UpdateWork):
                r = self.transport.run(TransmitOnly if txonly else incomingHandler,
                                       max_runtime.remaining())
            return r
            # incomingHandler callback could deadlock on this same thread; is it ever not None?
        finally:
            with self._cv:
                self._transport_runner = False
                self._cv.notify()
Exemple #8
0
 def testExpiredToUnExpiredComparison(self):
     et1 = ExpirationTimer(timedelta(microseconds=0))
     et2 = ExpirationTimer(timedelta(milliseconds=10))
     assert et1 != et2
     assert et2 != et1
     sleep(et2.remainingSeconds())
     assert et1 == et2
     assert et2 == et1
Exemple #9
0
 def testExpiredToUnExpiredComparison(self):
     et1 = ExpirationTimer(timedelta(microseconds=0))
     et2 = ExpirationTimer(timedelta(milliseconds=10))
     assert et1 != et2
     assert et2 != et1
     sleep(et2.remainingSeconds())
     assert et1 == et2
     assert et2 == et1
Exemple #10
0
 def listen(self, timeout):
     fulltime = ExpirationTimer(timeout)
     while not fulltime.expired():
         try:
             response = self.my_instance.get(fulltime.remainingSeconds())
         except Queue.Empty:
             break
         if not isInternalActorSystemMessage(response):
             return response
     return None
Exemple #11
0
 def testNoneComparedToNonZero(self):
     et1 = ExpirationTimer(None)
     et2 = ExpirationTimer(timedelta(milliseconds=10))
     # None == forever, so it is greater than anything, although equal to itself
     assert et1 > et2
     assert et2 < et1
     assert et1 > et2
     assert et2 < et1
     sleep(et2.remainingSeconds())
     assert et1 > et2
     assert et2 < et1
     assert et1 > et2
     assert et2 < et1
Exemple #12
0
 def testNoneComparedToNonZero(self):
     et1 = ExpirationTimer(None)
     et2 = ExpirationTimer(timedelta(milliseconds=10))
     # None == forever, so it is greater than anything, although equal to itself
     assert et1 > et2
     assert et2 < et1
     assert et1 > et2
     assert et2 < et1
     sleep(et2.remainingSeconds())
     assert et1 > et2
     assert et2 < et1
     assert et1 > et2
     assert et2 < et1
Exemple #13
0
 def testNonZeroRemainingSeconds(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert 0.0 < et.remainingSeconds()
     assert 0.0101 > et.remainingSeconds()
     sleep(et.remainingSeconds())
     assert 0.0 == et.remainingSeconds()
Exemple #14
0
 def testNonZeroStr(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert str(et).startswith('Expires_in_0:00:00.0')
     sleep(et.remainingSeconds())
     assert str(et).startswith('Expired_for_0:00:00')
Exemple #15
0
 def testNoneRemainingSecondsExplicitForever(self):
     et = ExpirationTimer(None)
     assert 9 == et.remainingSeconds(9)
Exemple #16
0
 def testNonZeroRemainingSeconds(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert 0.0 < et.remainingSeconds()
     assert 0.0101 > et.remainingSeconds()
     sleep(et.remainingSeconds())
     assert 0.0 == et.remainingSeconds()
Exemple #17
0
 def testZeroRemainingSeconds(self):
     et = ExpirationTimer(timedelta(microseconds=0))
     assert 0.0 == et.remainingSeconds()
Exemple #18
0
 def testNoneRemainingSeconds(self):
     et = ExpirationTimer(None)
     assert et.remainingSeconds() is None
Exemple #19
0
 def testNonZeroRemaining(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert timedelta(days=0) < et.remaining()
     assert timedelta(milliseconds=11) > et.remaining()
     sleep(et.remainingSeconds())
     assert timedelta(days=0) == et.remaining()
Exemple #20
0
 def testNonZeroExpired(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert not et.expired()
     sleep(et.remainingSeconds())
     assert et.expired()
Exemple #21
0
 def testNoneRemainingSecondsExplicitForever(self):
     et = ExpirationTimer(None)
     assert 9 == et.remainingSeconds(9)
Exemple #22
0
 def testNonZeroExpired(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert not et.expired()
     sleep(et.remainingSeconds())
     assert et.expired()
Exemple #23
0
 def testNonZeroStr(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert str(et).startswith('Expires_in_0:00:00.0')
     sleep(et.remainingSeconds())
     assert str(et).startswith('Expired_for_0:00:00')
Exemple #24
0
 def testNonZeroRemaining(self):
     et = ExpirationTimer(timedelta(milliseconds=10))
     assert timedelta(days=0) < et.remaining()
     assert timedelta(milliseconds=11) > et.remaining()
     sleep(et.remainingSeconds())
     assert timedelta(days=0) == et.remaining()
Exemple #25
0
 def testNoneRemainingSeconds(self):
     et = ExpirationTimer(None)
     assert et.remainingSeconds() is None
Exemple #26
0
 def testZeroRemainingSeconds(self):
     et = ExpirationTimer(timedelta(microseconds=0))
     assert 0.0 == et.remainingSeconds()