示例#1
0
    def test_one_minute_tick_after_60_seconds(self):
        seconds_clock = SynchronizingClock(max_ticks=60)
        minutes_clock = SynchronizingClock()

        seconds_clock.add_tick_listener(
            InterClockSynchronization(minutes_clock, granularity=60))

        while minutes_clock.current_tick < 1:
            seconds_clock.tick()

        self.assertEqual(60, seconds_clock.current_tick)
        self.assertEqual(1, minutes_clock.current_tick)
示例#2
0
class ClockTestCase(unittest.TestCase):

    def setUp(self):
        self.clock = SynchronizingClock(max_ticks=2)

    def test_synchronization(self):

        self.tick_listener = Mock()
        self.tick_listener.waiting_for_tick = Mock(spec=_Event)

        self.clock.add_tick_listener(self.tick_listener)

        self.clock.tick()

        self.tick_listener.waiting_for_tick.wait.assert_called_once_with()
        self.tick_listener.notify_new_tick.assert_called_once_with()
示例#3
0
    def test_for_handling_imprecision(self):
        seconds_clock = SynchronizingClock(max_ticks=3600)
        minutes_clock = SynchronizingClock()
        hours_clock = SynchronizingClock()

        seconds_clock.add_tick_listener(
            InterClockSynchronization(minutes_clock, granularity=60))
        minutes_clock.add_tick_listener(
            InterClockSynchronization(
                hours_clock,
                granularity=60,
                precision=lambda granularity: granularity - 5))

        while hours_clock.current_tick < 1:
            seconds_clock.tick()

        self.assertEqual(3300, seconds_clock.current_tick)
        self.assertEqual(55, minutes_clock.current_tick)
        self.assertEqual(1, hours_clock.current_tick)
示例#4
0
class ClockTestCase(unittest.TestCase):
    def test_synchronization(self):
        self.clock = SynchronizingClock(max_ticks=2)

        self.tick_listener = Mock()

        self.clock.add_tick_listener(self.tick_listener)

        self.clock.tick()

        self.tick_listener.wait_for_tick.assert_called_once_with()
        self.tick_listener.notify_new_tick.assert_called_once_with()

    def test_ticks_until_stopped(self):
        self.clock = SynchronizingClock()
        self.clock.tick()
        self.clock.tick()
        self.clock.issue_ticks = False
        self.clock.tick()
        self.assertEqual(self.clock.current_tick, 2)
示例#5
0
    def test_non_blocking_for_actors(self):
        seconds_clock = SynchronizingClock(max_ticks=3600)
        minutes_clock = SynchronizingClock()
        hours_clock = SynchronizingClock()

        seconds_clock.add_tick_listener(InterClockSynchronization(minutes_clock, granularity=60))
        minutes_clock.add_tick_listener(InterClockSynchronization(hours_clock, granularity=60))

        actor = TaskQueueActor(0, minutes_clock)
        example_workflow = ExampleWorkflow()

        actor.allocate_task(example_workflow.task_a, example_workflow)
        actor.initiate_shutdown()
        actor.start()

        while hours_clock.current_tick < 1:
            seconds_clock.tick()

        self.assertEqual(actor.last_task.finish_tick, 2)

        self.assertEqual(3600, seconds_clock.current_tick)
        self.assertEqual(60, minutes_clock.current_tick)
        self.assertEqual(1, hours_clock.current_tick)