3 from __future__ import absolute_import, print_function
11 import arvnodeman.timedcallback as timedcallback
12 from . import testutil
15 class TimedCallBackActorTestCase(testutil.ActorTestMixin, unittest.TestCase):
16 def test_immediate_turnaround(self):
17 future = self.FUTURE_CLASS()
18 deliverer = timedcallback.TimedCallBackActor.start().proxy()
19 deliverer.schedule(time.time() - 1, future.set, 'immediate')
20 self.assertEqual('immediate', future.get(self.TIMEOUT))
22 def test_delayed_turnaround(self):
23 future = self.FUTURE_CLASS()
24 with mock.patch('time.time', return_value=0) as mock_now:
25 deliverer = timedcallback.TimedCallBackActor.start().proxy()
26 deliverer.schedule(1, future.set, 'delayed')
27 self.assertRaises(pykka.Timeout, future.get, .5)
28 mock_now.return_value = 2
29 self.assertEqual('delayed', future.get(self.TIMEOUT))
31 def test_out_of_order_scheduling(self):
32 future1 = self.FUTURE_CLASS()
33 future2 = self.FUTURE_CLASS()
34 with mock.patch('time.time', return_value=1.5) as mock_now:
35 deliverer = timedcallback.TimedCallBackActor.start().proxy()
36 deliverer.schedule(2, future2.set, 'second')
37 deliverer.schedule(1, future1.set, 'first')
38 self.assertEqual('first', future1.get(self.TIMEOUT))
39 self.assertRaises(pykka.Timeout, future2.get, .1)
40 mock_now.return_value = 3
41 self.assertEqual('second', future2.get(self.TIMEOUT))
43 def test_dead_actors_ignored(self):
44 receiver = mock.Mock(name='dead_actor', spec=pykka.ActorRef)
45 receiver.tell.side_effect = pykka.ActorDeadError
46 deliverer = timedcallback.TimedCallBackActor.start().proxy()
47 deliverer.schedule(time.time() - 1, receiver.tell, 'error')
48 self.wait_for_call(receiver.tell)
49 receiver.tell.assert_called_with('error')
50 self.assertTrue(deliverer.actor_ref.is_alive(), "deliverer died")
53 if __name__ == '__main__':