|
5 | 5 |
|
6 | 6 | from kafka import SimpleConsumer, MultiProcessConsumer, KafkaConsumer, create_message
|
7 | 7 | from kafka.common import (
|
8 |
| - ProduceRequest, ConsumerFetchSizeTooSmall, ConsumerTimeout |
| 8 | + ProduceRequest, ConsumerFetchSizeTooSmall, ConsumerTimeout, OffsetOutOfRangeError |
9 | 9 | )
|
10 | 10 | from kafka.consumer.base import MAX_FETCH_BUFFER_SIZE_BYTES
|
11 | 11 |
|
@@ -85,6 +85,48 @@ def test_simple_consumer(self):
|
85 | 85 |
|
86 | 86 | consumer.stop()
|
87 | 87 |
|
| 88 | + @kafka_versions('all') |
| 89 | + def test_simple_consumer_smallest_offset_reset(self): |
| 90 | + self.send_messages(0, range(0, 100)) |
| 91 | + self.send_messages(1, range(100, 200)) |
| 92 | + |
| 93 | + consumer = self.consumer(auto_offset_reset='smallest') |
| 94 | + # Move fetch offset ahead of 300 message (out of range) |
| 95 | + consumer.seek(300, 2) |
| 96 | + # Since auto_offset_reset is set to smallest we should read all 200 |
| 97 | + # messages from beginning. |
| 98 | + self.assert_message_count([message for message in consumer], 200) |
| 99 | + |
| 100 | + @kafka_versions('all') |
| 101 | + def test_simple_consumer_largest_offset_reset(self): |
| 102 | + self.send_messages(0, range(0, 100)) |
| 103 | + self.send_messages(1, range(100, 200)) |
| 104 | + |
| 105 | + # Default largest |
| 106 | + consumer = self.consumer() |
| 107 | + # Move fetch offset ahead of 300 message (out of range) |
| 108 | + consumer.seek(300, 2) |
| 109 | + # Since auto_offset_reset is set to largest we should not read any |
| 110 | + # messages. |
| 111 | + self.assert_message_count([message for message in consumer], 0) |
| 112 | + # Send 200 new messages to the queue |
| 113 | + self.send_messages(0, range(200, 300)) |
| 114 | + self.send_messages(1, range(300, 400)) |
| 115 | + # Since the offset is set to largest we should read all the new messages. |
| 116 | + self.assert_message_count([message for message in consumer], 200) |
| 117 | + |
| 118 | + @kafka_versions('all') |
| 119 | + def test_simple_consumer_no_reset(self): |
| 120 | + self.send_messages(0, range(0, 100)) |
| 121 | + self.send_messages(1, range(100, 200)) |
| 122 | + |
| 123 | + # Default largest |
| 124 | + consumer = self.consumer(auto_offset_reset=None) |
| 125 | + # Move fetch offset ahead of 300 message (out of range) |
| 126 | + consumer.seek(300, 2) |
| 127 | + with self.assertRaises(OffsetOutOfRangeError): |
| 128 | + consumer.get_message() |
| 129 | + |
88 | 130 | @kafka_versions("all")
|
89 | 131 | def test_simple_consumer__seek(self):
|
90 | 132 | self.send_messages(0, range(0, 100))
|
|
0 commit comments