Пример #1
0
    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))
Пример #2
0
    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())
Пример #3
0
    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())
Пример #4
0
    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)