60 / 89 · 04 API & Contract Testing with AI · Testing Kafka Consumers← prev⊞ allnext →☰ Read as one page
9.6Dead Letter Queue Testing
def test_failed_events_go_to_dlq(self, kafka_producer, order_consumer, dlq_consumer):
"""Events that fail processing should be sent to the dead letter queue."""
# Send an event that will cause a processing error
poison_event = {
"event_type": "order.created",
"data": {
"order_id": "ord-poison",
"customer_id": "nonexistent-customer", # Causes FK violation
"total": 100.00
}
}
kafka_producer.produce(
'order-events',
key="ord-poison",
value=json.dumps(poison_event).encode('utf-8')
)
kafka_producer.flush()
time.sleep(10)
order_consumer.poll(timeout=1.0)
# Check that the event landed in the DLQ
dlq_message = dlq_consumer.poll(timeout=10.0)
assert dlq_message is not None, "Failed event did not appear in DLQ"
dlq_data = json.loads(dlq_message.value())
assert dlq_data["original_event"]["data"]["order_id"] == "ord-poison"
assert "error" in dlq_data # Should include the failure reason