def test_ingest_consumer_reads_from_topic_and_calls_celery_task(
        task_runner, kafka_producer, kafka_admin, requires_kafka):
    group_id = "test-consumer"
    topic_event_name = ConsumerType.get_topic_name(ConsumerType.Events)

    admin = kafka_admin(settings)
    admin.delete_topic(topic_event_name)
    producer = kafka_producer(settings)

    organization = Factories.create_organization()
    project = Factories.create_project(organization=organization)

    event_ids = set()
    for _ in range(3):
        message, event_id = _get_test_message(project)
        event_ids.add(event_id)
        producer.produce(topic_event_name, message)

    consumer = get_ingest_consumer(
        max_batch_size=2,
        max_batch_time=5000,
        group_id=group_id,
        consumer_type=ConsumerType.Events,
        auto_offset_reset="earliest",
    )

    with task_runner():
        i = 0
        while Event.objects.count() < 3 and i < MAX_POLL_ITERATIONS:
            consumer._run_once()
            i += 1

    # check that we got the messages
    assert Event.objects.count() == 3
    for event_id in event_ids:
        message = Event.objects.get(event_id=event_id)
        assert message is not None
        # check that the data has not been scrambled
        assert message.data["extra"]["the_id"] == event_id
Exemple #2
0
def test_ingest_consumer_reads_from_topic_and_calls_celery_task(
        task_runner, kafka_producer, kafka_admin):
    consumer_group = "test-consumer"
    admin = kafka_admin(settings)
    admin.delete_events_topic()
    producer = kafka_producer(settings)

    organization = Factories.create_organization()
    project = Factories.create_project(organization=organization)

    topic_event_name = ConsumerType.get_topic_name(ConsumerType.Events)

    event_ids = set()
    for _ in range(3):
        message, event_id = _get_test_message(project)
        event_ids.add(event_id)
        producer.produce(topic_event_name, message)

    with task_runner():
        run_ingest_consumer(
            commit_batch_size=2,
            consumer_group=consumer_group,
            consumer_type=ConsumerType.Events,
            max_fetch_time_seconds=0.1,
            initial_offset_reset="earliest",
            is_shutdown_requested=_shutdown_requested(max_secs=10,
                                                      num_events=3),
        )

    # check that we got the messages
    assert Event.objects.count() == 3
    for event_id in event_ids:
        message = Event.objects.get(event_id=event_id)
        assert message is not None
        # check that the data has not been scrambled
        assert message.data["extra"]["the_id"] == event_id
Exemple #3
0
 def create_project(self, **kwargs):
     kwargs.setdefault('teams', [self.team])
     return Factories.create_project(**kwargs)
Exemple #4
0
 def create_project(self, **kwargs):
     kwargs.setdefault('teams', [self.team])
     return Factories.create_project(**kwargs)