23
23
#include < ctime>
24
24
#include < random>
25
25
26
+ #include " ChunkMessageIdImpl.h"
26
27
#include " PulsarFriend.h"
27
28
#include " WaitUtils.h"
28
29
#include " lib/LogUtils.h"
@@ -117,7 +118,8 @@ TEST_P(MessageChunkingTest, testEndToEnd) {
117
118
for (int i = 0 ; i < numMessages; i++) {
118
119
MessageId messageId;
119
120
ASSERT_EQ (ResultOk, producer.send (MessageBuilder ().setContent (largeMessage).build (), messageId));
120
- auto chunkMsgId = std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (messageId));
121
+ auto chunkMsgId =
122
+ std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (messageId));
121
123
ASSERT_TRUE (chunkMsgId);
122
124
LOG_INFO (" Send " << i << " to " << messageId);
123
125
sendMessageIds.emplace_back (messageId);
@@ -132,7 +134,8 @@ TEST_P(MessageChunkingTest, testEndToEnd) {
132
134
ASSERT_EQ (msg.getMessageId ().batchIndex (), -1 );
133
135
ASSERT_EQ (msg.getMessageId ().batchSize (), 0 );
134
136
auto messageId = msg.getMessageId ();
135
- auto chunkMsgId = std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (messageId));
137
+ auto chunkMsgId =
138
+ std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (messageId));
136
139
ASSERT_TRUE (chunkMsgId);
137
140
receivedMessageIds.emplace_back (messageId);
138
141
}
@@ -261,6 +264,56 @@ TEST_P(MessageChunkingTest, testMaxPendingChunkMessages) {
261
264
consumer.close ();
262
265
}
263
266
267
+ TEST_P (MessageChunkingTest, testSeekChunkMessages) {
268
+ const std::string topic =
269
+ " MessageChunkingTest-testSeekChunkMessages-" + toString (GetParam ()) + std::to_string (time (nullptr ));
270
+
271
+ constexpr int numMessages = 10 ;
272
+
273
+ Consumer consumer1;
274
+ ConsumerConfiguration consumer1Conf;
275
+ consumer1Conf.setStartMessageIdInclusive (true );
276
+ createConsumer (topic, consumer1, consumer1Conf);
277
+
278
+ Producer producer;
279
+ createProducer (topic, producer);
280
+
281
+ for (int i = 0 ; i < numMessages; i++) {
282
+ MessageId messageId;
283
+ ASSERT_EQ (ResultOk, producer.send (MessageBuilder ().setContent (largeMessage).build (), messageId));
284
+ LOG_INFO (" Send " << i << " to " << messageId);
285
+ }
286
+
287
+ Message msg;
288
+ std::vector<MessageId> receivedMessageIds;
289
+ for (int i = 0 ; i < numMessages; i++) {
290
+ ASSERT_EQ (ResultOk, consumer1.receive (msg, 3000 ));
291
+ LOG_INFO (" Receive " << msg.getLength () << " bytes from " << msg.getMessageId ());
292
+ receivedMessageIds.emplace_back (msg.getMessageId ());
293
+ }
294
+
295
+ consumer1.seek (receivedMessageIds[1 ]);
296
+ for (int i = 1 ; i < numMessages; i++) {
297
+ Message msgAfterSeek;
298
+ ASSERT_EQ (ResultOk, consumer1.receive (msgAfterSeek, 3000 ));
299
+ ASSERT_EQ (msgAfterSeek.getMessageId (), receivedMessageIds[i]);
300
+ }
301
+
302
+ consumer1.close ();
303
+ Consumer consumer2;
304
+ createConsumer (topic, consumer2);
305
+
306
+ consumer2.seek (receivedMessageIds[1 ]);
307
+ for (int i = 2 ; i < numMessages; i++) {
308
+ Message msgAfterSeek;
309
+ ASSERT_EQ (ResultOk, consumer2.receive (msgAfterSeek, 3000 ));
310
+ ASSERT_EQ (msgAfterSeek.getMessageId (), receivedMessageIds[i]);
311
+ }
312
+
313
+ consumer2.close ();
314
+ producer.close ();
315
+ }
316
+
264
317
TEST (ChunkMessageIdTest, testSetChunkMessageId) {
265
318
MessageId msgId;
266
319
{
0 commit comments