Beispiel #1
0
def test_callback_delivery():
    delivery_outbox_repo = DeliveryOutboxRepo(DELIVERY_OUTBOX_REPO_CONF)
    use_case = DeliverCallbackUseCase(delivery_outbox_repo)
    # clearing test queue
    delivery_outbox_repo._unsafe_method__clear()
    assert not delivery_outbox_repo.get()
    processor = Processor(use_case=use_case)
    # testing that iter returns processor
    assert processor is iter(processor)
    # testing no jobs in the queue
    assert next(processor) is None
    # testing successful delivery
    job = _generate_job(POST_SUCCESS_URL)
    delivery_outbox_repo.post_job(job)
    assert next(processor) is True
    assert next(processor) is None
    # testing failed delivery
    job = _generate_job(POST_ERROR_URL)
    delivery_outbox_repo.post_job(job)
    # false means failed to deliver
    assert next(processor) is False
    _test_retries(processor, 10)
    assert next(processor) is None
    # testing correct rescheduling order
    delivery_outbox_repo.post_job(_generate_job(POST_SUCCESS_URL))
    delivery_outbox_repo.post_job(_generate_job(POST_ERROR_URL))
    delivery_outbox_repo.post_job(_generate_job(POST_SUCCESS_URL))
    assert next(processor) is True
    assert next(processor) is False
    assert next(processor) is True
    _test_retries(processor, 10)
    assert next(processor) is None
Beispiel #2
0
    def get_processor(self):
        config = self.app.config
        delivery_outbox_repo = repos.DeliveryOutboxRepo(config['DELIVERY_OUTBOX_REPO_CONF'])

        use_case = use_cases.DeliverCallbackUseCase(
            delivery_outbox_repo=delivery_outbox_repo,
            hub_url=config['HUB_URL'],
        )
        return Processor(use_case=use_case)
Beispiel #3
0
 def get_processor(self):
     config = self.app.config
     notifications_repo = repos.NotificationsRepo(config['NOTIFICATIONS_REPO_CONF'])
     delivery_outbox_repo = repos.DeliveryOutboxRepo(config['DELIVERY_OUTBOX_REPO_CONF'])
     subscriptions_repo = repos.SubscriptionsRepo(config.get('SUBSCRIPTIONS_REPO_CONF'))
     use_case = use_cases.DispatchMessageToSubscribersUseCase(
         notifications_repo=notifications_repo,
         delivery_outbox_repo=delivery_outbox_repo,
         subscriptions_repo=subscriptions_repo,
     )
     return Processor(use_case=use_case)
    def get_processor(self):
        config = self.app.config
        channel_repo = ChannelRepo(config['CHANNEL_REPO_CONF'])
        notifications_repo = repos.NotificationsRepo(
            config['NOTIFICATIONS_REPO_CONF'])

        use_case = use_cases.NewMessagesNotifyUseCase(
            receiver=config['JURISDICTION'],
            channel_repo=channel_repo,
            notifications_repo=notifications_repo,
        )
        return Processor(use_case=use_case)
Beispiel #5
0
def test_processor():
    use_case = mock.Mock()
    processor = Processor(use_case=use_case)
    assert iter(processor) == processor

    use_case.execute.return_value = False
    assert next(processor) is False
    use_case.execute.return_value = True
    assert next(processor) is True
    use_case.execute.return_value = None
    assert next(processor) is None
    use_case.execute.return_value = True
    use_case.execute.side_effect = Exception('Test')
    assert next(processor) is None
Beispiel #6
0
 def get_processor(self):
     config = self.app.config
     channel_repo = ChannelRepo(config['CHANNEL_REPO_CONF'])
     channel_queue_repo = ChannelQueueRepo(config['CHANNEL_QUEUE_REPO_CONF'])
     use_case = use_cases.ProcessMessageUseCase(channel_repo, channel_queue_repo, config['FOREIGN_ENDPOINT_URL'])
     return Processor(use_case=use_case)
Beispiel #7
0
def get_processor():
    delivery_outbox_repo_conf = env_queue_config('PROC_DELIVERY_OUTBOX_REPO')
    delivery_outbox_repo = DeliveryOutboxRepo(delivery_outbox_repo_conf)
    use_case = DeliverCallbackUseCase(
        delivery_outbox_repo=delivery_outbox_repo, )
    return Processor(use_case=use_case)
Beispiel #8
0
def test():
    # testing predicate in url search

    delivery_outbox_repo = repos.DeliveryOutboxRepo(DELIVERY_OUTBOX_REPO_CONF)
    notifications_repo = repos.NotificationsRepo(NOTIFICATIONS_REPO_CONF)
    subscriptions_repo = repos.SubscriptionsRepo(SUBSCRIPTIONS_REPO_CONF)

    delivery_outbox_repo._unsafe_method__clear()
    notifications_repo._unsafe_method__clear()
    subscriptions_repo._unsafe_method__clear()

    assert notifications_repo.is_empty()
    assert delivery_outbox_repo.is_empty()
    assert subscriptions_repo.is_empty()

    use_case = DispatchMessageToSubscribersUseCase(notifications_repo, delivery_outbox_repo, subscriptions_repo)
    processor = Processor(use_case=use_case)

    # testing that iter returns processor
    assert iter(processor) is processor

    # assert processor has nothing to do
    assert next(processor) is None

    _fill_subscriptions_repo(subscriptions_repo, SUBSCRIPTIONS)
    for prefix, subscriptions in SUBSCRIPTIONS_WITH_COMMON_PREFIXES.items():
        _fill_subscriptions_repo(subscriptions_repo, subscriptions)

    for s in subscriptions_repo.get_subscriptions_by_pattern(Pattern('aaa.bbb.ccc.ddd')):
        print(s.__hash__())
        print(s.payload, s.key, s.now, s.data)
    # testing that subscriptions repod doesn't have side effect on processor
    assert next(processor) is None

    # testing callbacks spreading for predicates without common prefixes
    for predicate, number_of_subscribers in SUBSCRIPTIONS.items():
        # pushing notification
        message = _generate_msg_object(predicate=predicate)
        notifications_repo.post_job(message)
        # test proccessor received notification
        assert next(processor) is True

        # test processor created correct number of delivery jobs
        # each subscriptions group has unique topic/predicate
        for i in range(number_of_subscribers):
            job = delivery_outbox_repo.get_job()
            assert job, f"Call:{i+1}. Predicate:{predicate}"
            message_queue_id, payload = job
            # test that only direct subscribers received this message
            assert payload.get('payload', {}).get('predicate') == predicate
            # testing that only correct subscribers will receive notification
            url = payload.get('s', '')
            assert _is_predicate_in_url(url, predicate), {'url': url, 'predicate': predicate}
            assert delivery_outbox_repo.delete(message_queue_id)
        # test queue is empty

        print(delivery_outbox_repo.get_job())
        assert not delivery_outbox_repo.get_job()
    # processor completed the job
    assert next(processor) is None

    for prefix, subscriptions in SUBSCRIPTIONS_WITH_COMMON_PREFIXES.items():

        # finding longest predicate in the group + total number of expected
        # delivery jobs
        expect_jobs = 0
        longest_predicate = ""
        for predicate, number_of_subscribers in subscriptions.items():
            if len(longest_predicate) < len(predicate):
                longest_predicate = predicate
            expect_jobs += number_of_subscribers

        # posting notification
        message = _generate_msg_object(predicate=longest_predicate)
        assert notifications_repo.post_job(message)
        assert next(processor) is True

        # testing processor created the correct number of delivery jobs
        for i in range(expect_jobs):
            job = delivery_outbox_repo.get_job()
            assert job
            message_queue_id, payload = job
            # test that only direct subscribers received this message
            assert payload.get('payload', {}).get('predicate') == longest_predicate
            # testing that only correct subscribers will receive notification
            url = payload.get('s', '')
            assert _is_predicate_in_url(url, prefix), {'url': url, 'prefix': prefix}
            assert delivery_outbox_repo.delete(message_queue_id)
        assert next(processor) is None