|
3 | 3 | from unittest.mock import patch, MagicMock
|
4 | 4 |
|
5 | 5 | import pytest
|
6 |
| -from confluent_kafka import TopicPartition |
| 6 | +from confluent_kafka import TopicPartition, KafkaException, KafkaError |
7 | 7 |
|
8 | 8 | from quixstreams.checkpointing import Checkpoint, InvalidStoredOffset
|
9 |
| -from quixstreams.checkpointing.exceptions import CheckpointProducerTimeout |
| 9 | +from quixstreams.checkpointing.exceptions import ( |
| 10 | + CheckpointProducerTimeout, |
| 11 | + CheckpointConsumerCommitError, |
| 12 | +) |
10 | 13 | from quixstreams.kafka import Consumer
|
11 | 14 | from quixstreams.rowproducer import RowProducer
|
12 | 15 | from quixstreams.state import StateStoreManager
|
@@ -354,3 +357,50 @@ def test_incomplete_flush(
|
354 | 357 | str(err.value)
|
355 | 358 | == "'1' messages failed to be produced before the producer flush timeout"
|
356 | 359 | )
|
| 360 | + |
| 361 | + def test_failed_commit( |
| 362 | + self, checkpoint_factory, state_manager_factory, rowproducer_mock |
| 363 | + ): |
| 364 | + consumer_mock = MagicMock(spec_set=Consumer) |
| 365 | + consumer_mock.commit.side_effect = KafkaException(KafkaError(1, "test error")) |
| 366 | + |
| 367 | + state_manager = state_manager_factory(producer=rowproducer_mock) |
| 368 | + checkpoint = checkpoint_factory( |
| 369 | + consumer_=consumer_mock, |
| 370 | + state_manager_=state_manager, |
| 371 | + producer_=rowproducer_mock, |
| 372 | + ) |
| 373 | + checkpoint.store_offset("topic", 0, 0) |
| 374 | + |
| 375 | + with pytest.raises(CheckpointConsumerCommitError) as err: |
| 376 | + checkpoint.commit() |
| 377 | + |
| 378 | + assert ( |
| 379 | + str(err.value) |
| 380 | + == '<CheckpointConsumerCommitError code="1" description="test error">' |
| 381 | + ) |
| 382 | + |
| 383 | + def test_failed_commit_partition( |
| 384 | + self, checkpoint_factory, state_manager_factory, rowproducer_mock |
| 385 | + ): |
| 386 | + consumer_mock = MagicMock(spec_set=Consumer) |
| 387 | + |
| 388 | + topic_partition = MagicMock(spec=TopicPartition) |
| 389 | + topic_partition.error = KafkaError(1, "test error") |
| 390 | + |
| 391 | + consumer_mock.commit.return_value = [topic_partition] |
| 392 | + state_manager = state_manager_factory(producer=rowproducer_mock) |
| 393 | + checkpoint = checkpoint_factory( |
| 394 | + consumer_=consumer_mock, |
| 395 | + state_manager_=state_manager, |
| 396 | + producer_=rowproducer_mock, |
| 397 | + ) |
| 398 | + checkpoint.store_offset("topic", 0, 0) |
| 399 | + |
| 400 | + with pytest.raises(CheckpointConsumerCommitError) as err: |
| 401 | + checkpoint.commit() |
| 402 | + |
| 403 | + assert ( |
| 404 | + str(err.value) |
| 405 | + == '<CheckpointConsumerCommitError code="1" description="test error">' |
| 406 | + ) |
0 commit comments