Esempio n. 1
0
    async def test_get_many(self):
        expected = [
            BrokerHandlerEntry(1, "fooReply", 0,
                               FakeModel("test1").avro_bytes),
            BrokerHandlerEntry(2, "fooReply", 0,
                               FakeModel("test2").avro_bytes),
            BrokerHandlerEntry(3, "fooReply", 0,
                               FakeModel("test3").avro_bytes),
            BrokerHandlerEntry(4, "fooReply", 0,
                               FakeModel("test4").avro_bytes),
        ]

        async def _fn():
            await self._insert_one(
                Message("fooReply", 0,
                        FakeModel("test1").avro_bytes))
            await self._insert_one(
                Message("fooReply", 0,
                        FakeModel("test2").avro_bytes))
            await sleep(0.5)
            await self._insert_one(
                Message("fooReply", 0,
                        FakeModel("test3").avro_bytes))
            await self._insert_one(
                Message("fooReply", 0,
                        FakeModel("test4").avro_bytes))

        observed, _ = await gather(
            self.handler.get_many(count=4, max_wait=0.1), _fn())

        self.assertEqual(len(expected), len(observed))
        for e, o in zip(expected, observed):
            self._assert_equal_entries(e, o)
Esempio n. 2
0
 def test_constructor(self):
     data_bytes = self.message.avro_bytes
     entry = BrokerHandlerEntry(1, "AddOrder", 0, data_bytes, 1)
     self.assertEqual(1, entry.id)
     self.assertEqual("AddOrder", entry.topic)
     self.assertEqual(0, entry.partition)
     self.assertEqual(data_bytes, entry.data_bytes)
     self.assertEqual(1, entry.retry)
Esempio n. 3
0
 def test_eq(self):
     data_bytes = self.message.avro_bytes
     now = current_datetime()
     one = BrokerHandlerEntry(1,
                              "AddOrder",
                              0,
                              data_bytes,
                              1,
                              created_at=now,
                              updated_at=now)
     two = BrokerHandlerEntry(1,
                              "AddOrder",
                              0,
                              data_bytes,
                              1,
                              created_at=now,
                              updated_at=now)
     self.assertEqual(one, two)
Esempio n. 4
0
    async def test_get_one(self):
        expected = BrokerHandlerEntry(1, "fooReply", 0,
                                      FakeModel("test1").avro_bytes)
        await self._insert_one(
            Message("fooReply", 0,
                    FakeModel("test1").avro_bytes))
        await self._insert_one(
            Message("fooReply", 0,
                    FakeModel("test2").avro_bytes))

        observed = await self.handler.get_one()

        self._assert_equal_entries(expected, observed)
Esempio n. 5
0
    def test_constructor_extended(self):
        data_bytes = self.message.avro_bytes
        now = current_datetime()

        entry = BrokerHandlerEntry(1,
                                   "AddOrder",
                                   0,
                                   data_bytes,
                                   1,
                                   created_at=now,
                                   updated_at=now)
        self.assertEqual(1, entry.id)
        self.assertEqual("AddOrder", entry.topic)
        self.assertEqual(0, entry.partition)
        self.assertEqual(data_bytes, entry.data_bytes)
        self.assertEqual(1, entry.retry)
        self.assertEqual(now, entry.created_at)
        self.assertEqual(now, entry.updated_at)
Esempio n. 6
0
    async def test_dispatch_one(self):
        callback_mock = AsyncMock()
        lookup_mock = MagicMock(return_value=callback_mock)

        topic = "TicketAdded"
        event = BrokerMessage(topic, FakeModel("Foo"))
        entry = BrokerHandlerEntry(1,
                                   topic,
                                   0,
                                   event.avro_bytes,
                                   1,
                                   callback_lookup=lookup_mock)

        await self.handler.dispatch_one(entry)

        self.assertEqual(1, lookup_mock.call_count)
        self.assertEqual(call("TicketAdded"), lookup_mock.call_args)

        self.assertEqual(1, callback_mock.call_count)
        self.assertEqual(call(BrokerRequest(event)), callback_mock.call_args)
Esempio n. 7
0
    async def test_consumers(self):
        mock = AsyncMock()
        consumer_concurrency = 3

        async def _fn_no_wait(*args, **kwargs):
            return

        async def _fn(*args, **kwargs):
            await sleep(60)

        lookup_mock = MagicMock(
            side_effect=[_fn_no_wait, _fn, _fn, _fn, _fn_no_wait])

        async with BrokerHandler.from_config(
                self.config,
                publisher=self.publisher,
                consumer_concurrency=consumer_concurrency) as handler:
            self.assertEqual(consumer_concurrency, len(handler.consumers))
            handler.submit_query = mock

            for _ in range(consumer_concurrency + 2):
                entry = BrokerHandlerEntry(1,
                                           "AddOrder",
                                           0,
                                           self.message.avro_bytes,
                                           1,
                                           callback_lookup=lookup_mock)
                await handler._queue.put(entry)
            await sleep(0.5)

        self.assertEqual(0, len(handler.consumers))
        self.assertEqual(
            [
                call(handler._queries["delete_processed"], (1, )),
                call(handler._queries["update_not_processed"], (1, )),
                call(handler._queries["update_not_processed"], (1, )),
                call(handler._queries["update_not_processed"], (1, )),
                call(handler._queries["update_not_processed"], (1, )),
            ],
            mock.call_args_list,
        )
Esempio n. 8
0
    async def test_dispatch(self):
        callback_mock = AsyncMock(return_value=Response("add_order"))
        lookup_mock = MagicMock(return_value=callback_mock)
        entry = BrokerHandlerEntry(1,
                                   "AddOrder",
                                   0,
                                   self.message.avro_bytes,
                                   1,
                                   callback_lookup=lookup_mock)

        send_mock = AsyncMock()
        self.publisher.send = send_mock

        await self.handler.dispatch_one(entry)

        self.assertEqual(1, lookup_mock.call_count)
        self.assertEqual(call("AddOrder"), lookup_mock.call_args)

        self.assertEqual(
            [
                call(
                    "add_order",
                    topic="UpdateTicket",
                    identifier=self.message.identifier,
                    status=BrokerMessageStatus.SUCCESS,
                    user=self.user,
                    headers={"foo": "bar"},
                )
            ],
            send_mock.call_args_list,
        )

        self.assertEqual(1, callback_mock.call_count)
        observed = callback_mock.call_args[0][0]
        self.assertIsInstance(observed, BrokerRequest)
        self.assertEqual(FakeModel("foo"), await observed.content())
Esempio n. 9
0
    def test_sort(self):
        unsorted = [
            BrokerHandlerEntry(1, "", 0,
                               BrokerMessage("", "foo").avro_bytes, 1),
            BrokerHandlerEntry(1, "", 0,
                               BrokerMessage("", 4).avro_bytes, 1),
            BrokerHandlerEntry(1, "", 0,
                               BrokerMessage("", 2).avro_bytes, 1),
            BrokerHandlerEntry(1, "", 0,
                               BrokerMessage("", 3).avro_bytes, 1),
            BrokerHandlerEntry(1, "", 0,
                               BrokerMessage("", 1).avro_bytes, 1),
            BrokerHandlerEntry(1, "", 0,
                               BrokerMessage("", "bar").avro_bytes, 1),
        ]

        expected = [
            unsorted[0], unsorted[4], unsorted[2], unsorted[3], unsorted[1],
            unsorted[5]
        ]

        observed = sorted(unsorted)
        self.assertEqual(expected, observed)