@@ -81,7 +81,9 @@ class MessageChunkingTest : public ::testing::TestWithParam<CompressionType> {
8181 }
8282
8383 void createConsumer (const std::string& topic, Consumer& consumer) {
84- ASSERT_EQ (ResultOk, client_.subscribe (topic, " my-sub" , consumer));
84+ ConsumerConfiguration conf;
85+ conf.setBrokerConsumerStatsCacheTimeInMs (1000 );
86+ ASSERT_EQ (ResultOk, client_.subscribe (topic, " my-sub" , conf, consumer));
8587 }
8688
8789 void createConsumer (const std::string& topic, Consumer& consumer, ConsumerConfiguration& conf) {
@@ -118,9 +120,6 @@ TEST_P(MessageChunkingTest, testEndToEnd) {
118120 for (int i = 0 ; i < numMessages; i++) {
119121 MessageId messageId;
120122 ASSERT_EQ (ResultOk, producer.send (MessageBuilder ().setContent (largeMessage).build (), messageId));
121- auto chunkMsgId =
122- std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (messageId));
123- ASSERT_TRUE (chunkMsgId);
124123 LOG_INFO (" Send " << i << " to " << messageId);
125124 sendMessageIds.emplace_back (messageId);
126125 }
@@ -134,19 +133,35 @@ TEST_P(MessageChunkingTest, testEndToEnd) {
134133 ASSERT_EQ (msg.getMessageId ().batchIndex (), -1 );
135134 ASSERT_EQ (msg.getMessageId ().batchSize (), 0 );
136135 auto messageId = msg.getMessageId ();
137- auto chunkMsgId =
138- std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (messageId));
139- ASSERT_TRUE (chunkMsgId);
140136 receivedMessageIds.emplace_back (messageId);
137+ consumer.acknowledge (messageId);
141138 }
142139 ASSERT_EQ (receivedMessageIds, sendMessageIds);
143- ASSERT_EQ (receivedMessageIds.front ().ledgerId (), receivedMessageIds.front ().ledgerId ());
140+ for (int i = 0 ; i < sendMessageIds.size (); ++i) {
141+ auto sendChunkMsgId =
142+ std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (sendMessageIds[i]));
143+ ASSERT_TRUE (sendChunkMsgId);
144+ auto receiveChunkMsgId = std::dynamic_pointer_cast<ChunkMessageIdImpl>(
145+ PulsarFriend::getMessageIdImpl (receivedMessageIds[i]));
146+ ASSERT_TRUE (receiveChunkMsgId);
147+ ASSERT_EQ (sendChunkMsgId->getChunkedMessageIds (), receiveChunkMsgId->getChunkedMessageIds ());
148+ }
144149 ASSERT_GT (receivedMessageIds.back ().entryId (), numMessages);
145150
146151 // Verify the cache has been cleared
147152 auto & chunkedMessageCache = PulsarFriend::getChunkedMessageCache (consumer);
148153 ASSERT_EQ (chunkedMessageCache.size (), 0 );
149154
155+ BrokerConsumerStats consumerStats;
156+ waitUntil (
157+ std::chrono::seconds (10 ),
158+ [&] {
159+ return consumer.getBrokerConsumerStats (consumerStats) == ResultOk &&
160+ consumerStats.getMsgBacklog () == 0 ;
161+ },
162+ 1000 );
163+ ASSERT_EQ (consumerStats.getMsgBacklog (), 0 );
164+
150165 producer.close ();
151166 consumer.close ();
152167}
@@ -317,9 +332,9 @@ TEST_P(MessageChunkingTest, testSeekChunkMessages) {
317332TEST (ChunkMessageIdTest, testSetChunkMessageId) {
318333 MessageId msgId;
319334 {
320- ChunkMessageIdImplPtr chunkMsgId = std::make_shared<ChunkMessageIdImpl>();
321- chunkMsgId-> setFirstChunkMessageId ( MessageIdBuilder ().ledgerId (1 ).entryId (2 ).partition (3 ).build ());
322- chunkMsgId-> setLastChunkMessageId ( MessageIdBuilder ().ledgerId (4 ).entryId (5 ).partition (6 ).build ());
335+ ChunkMessageIdImplPtr chunkMsgId = std::make_shared<ChunkMessageIdImpl>(
336+ std::vector<MessageId>({ MessageIdBuilder ().ledgerId (1 ).entryId (2 ).partition (3 ).build (),
337+ MessageIdBuilder ().ledgerId (4 ).entryId (5 ).partition (6 ).build ()} ));
323338 msgId = chunkMsgId->build ();
324339 // Test the destructor of the underlying message id should also work for the generated messageId.
325340 }
@@ -332,13 +347,13 @@ TEST(ChunkMessageIdTest, testSetChunkMessageId) {
332347 ASSERT_EQ (deserializedMsgId.entryId (), 5 );
333348 ASSERT_EQ (deserializedMsgId.partition (), 6 );
334349
335- auto chunkMsgId =
350+ const auto & chunkMsgId =
336351 std::dynamic_pointer_cast<ChunkMessageIdImpl>(PulsarFriend::getMessageIdImpl (deserializedMsgId));
337352 ASSERT_TRUE (chunkMsgId);
338- auto firstChunkMsgId = chunkMsgId->getFirstChunkMessageId ();
339- ASSERT_EQ (firstChunkMsgId-> ledgerId_ , 1 );
340- ASSERT_EQ (firstChunkMsgId-> entryId_ , 2 );
341- ASSERT_EQ (firstChunkMsgId-> partition_ , 3 );
353+ auto firstChunkMsgId = chunkMsgId->getChunkedMessageIds (). front ();
354+ ASSERT_EQ (firstChunkMsgId. ledgerId () , 1 );
355+ ASSERT_EQ (firstChunkMsgId. entryId () , 2 );
356+ ASSERT_EQ (firstChunkMsgId. partition () , 3 );
342357}
343358
344359// The CI env is Ubuntu 16.04, the gtest-dev version is 1.8.0 that doesn't have INSTANTIATE_TEST_SUITE_P
0 commit comments