def test_periodic_single(self): barrier = latch.Latch(5) capture = [] @periodic.periodic(0.01) def callee(): barrier.countdown() if barrier.needed == 0: w.stop() capture.append(1) w = periodic.PeriodicWorker([callee]) t = tu.daemon_thread(target=w.start) t.start() t.join() self.assertEqual(0, barrier.needed) self.assertEqual(5, sum(capture))
def test_periodic_worker(self): barrier = latch.Latch(5) to = timing.Timeout(0.01) called_at = [] def callee(): barrier.countdown() if barrier.needed == 0: to.interrupt() called_at.append(time.time()) w = worker_types.PeriodicWorker(to, [callee]) t = threading.Thread(target=w.start) t.start() t.join() self.assertEqual(0, barrier.needed) self.assertEqual(5, len(called_at)) self.assertTrue(to.is_stopped())
def test_periodic_single(self): barrier = latch.Latch(5) capture = [] tombstone = tu.Event() @periodic.periodic(0.01) def callee(): barrier.countdown() if barrier.needed == 0: tombstone.set() capture.append(1) w = periodic.PeriodicWorker([callee], tombstone=tombstone) t = tu.daemon_thread(target=w.start) t.start() t.join() self.assertEqual(0, barrier.needed) self.assertEqual(5, sum(capture)) self.assertTrue(tombstone.is_set())
def test_multi_message(self): message_count = 30 barrier = latch.Latch(message_count) countdown = lambda data, message: barrier.countdown() on_notify = mock.MagicMock() on_notify.side_effect = countdown on_response = mock.MagicMock() on_response.side_effect = countdown on_request = mock.MagicMock() on_request.side_effect = countdown handlers = { pr.NOTIFY: on_notify, pr.RESPONSE: on_response, pr.REQUEST: on_request, } p = proxy.Proxy(TEST_TOPIC, TEST_EXCHANGE, handlers, transport='memory', transport_options={ 'polling_interval': POLLING_INTERVAL, }) t = threading_utils.daemon_thread(p.start) t.start() p.wait() for i in range(0, message_count): j = i % 3 if j == 0: p.publish(pr.Notify(), TEST_TOPIC) elif j == 1: p.publish(pr.Response(pr.RUNNING), TEST_TOPIC) else: p.publish( pr.Request(test_utils.DummyTask("dummy_%s" % i), uuidutils.generate_uuid(), pr.EXECUTE, [], None), TEST_TOPIC) self.assertTrue(barrier.wait(test_utils.WAIT_TIMEOUT)) self.assertEqual(0, barrier.needed) p.stop() t.join() self.assertTrue(on_notify.called) self.assertTrue(on_response.called) self.assertTrue(on_request.called) self.assertEqual(10, on_notify.call_count) self.assertEqual(10, on_response.call_count) self.assertEqual(10, on_request.call_count) call_count = sum([ on_notify.call_count, on_response.call_count, on_request.call_count, ]) self.assertEqual(message_count, call_count)