|
18 | 18 | */ |
19 | 19 | #include <gtest/gtest.h> |
20 | 20 | #include <pulsar/Client.h> |
| 21 | +#include <pulsar/MessageIdBuilder.h> |
21 | 22 |
|
22 | 23 | #include <chrono> |
23 | 24 | #include <set> |
@@ -302,4 +303,55 @@ TEST_F(AcknowledgeTest, testMixedCumulativeAck) { |
302 | 303 | ASSERT_EQ(ResultTimeout, consumer.getConsumer().receive(msg, 1000)); |
303 | 304 | } |
304 | 305 |
|
| 306 | +TEST_F(AcknowledgeTest, testMessageIdFromBuild) { |
| 307 | + Client client(lookupUrl); |
| 308 | + const std::string topic = "test-message-id-from-build-" + unique_str(); |
| 309 | + |
| 310 | + ConsumerWrapper consumer0; |
| 311 | + consumer0.initialize(client, topic, "sub-0", false); |
| 312 | + |
| 313 | + ConsumerWrapper consumer1; |
| 314 | + consumer1.initialize(client, topic, "sub-1", true /* batch index ACK enabled */); |
| 315 | + |
| 316 | + Producer producer; |
| 317 | + auto producerConf = |
| 318 | + ProducerConfiguration().setBatchingMaxMessages(100).setBatchingMaxPublishDelayMs(3600 * 1000); |
| 319 | + ASSERT_EQ(ResultOk, client.createProducer(topic, producerConf, producer)); |
| 320 | + |
| 321 | + constexpr int numMessages = 5; |
| 322 | + for (int i = 0; i < numMessages; i++) { |
| 323 | + producer.sendAsync(MessageBuilder().setContent("msg").build(), nullptr); |
| 324 | + } |
| 325 | + producer.flush(); |
| 326 | + |
| 327 | + std::vector<MessageId> msgIds; |
| 328 | + consumer0.receiveAtMost(numMessages); |
| 329 | + for (auto&& msgId : consumer0.messageIdList()) { |
| 330 | + msgIds.emplace_back(MessageIdBuilder() |
| 331 | + .ledgerId(msgId.ledgerId()) |
| 332 | + .entryId(msgId.entryId()) |
| 333 | + .batchIndex(msgId.batchIndex()) |
| 334 | + .batchSize(msgId.batchSize()) |
| 335 | + .build()); |
| 336 | + } |
| 337 | + |
| 338 | + consumer0.acknowledgeMessageIdAndRestart(msgIds[0], AckType::INDIVIDUAL); |
| 339 | + consumer1.acknowledgeMessageIdAndRestart(msgIds[0], AckType::INDIVIDUAL); |
| 340 | + |
| 341 | + Message msg; |
| 342 | + ASSERT_EQ(ResultOk, consumer0.getConsumer().receive(msg, 1000)); |
| 343 | + EXPECT_EQ(msg.getMessageId().batchIndex(), 0); |
| 344 | + ASSERT_EQ(ResultOk, consumer1.getConsumer().receive(msg, 1000)); |
| 345 | + EXPECT_EQ(msg.getMessageId().batchIndex(), 1); |
| 346 | + |
| 347 | + consumer0.acknowledgeMessageIdAndRestart(msgIds[3], AckType::CUMULATIVE); |
| 348 | + consumer1.acknowledgeMessageIdAndRestart(msgIds[3], AckType::CUMULATIVE); |
| 349 | + |
| 350 | + ASSERT_EQ(ResultOk, consumer0.getConsumer().receive(msg, 1000)); |
| 351 | + EXPECT_EQ(msg.getMessageId().batchIndex(), 0); |
| 352 | + ASSERT_EQ(ResultOk, consumer1.getConsumer().receive(msg, 1000)); |
| 353 | + EXPECT_EQ(msg.getMessageId().batchIndex(), 3 + 1); |
| 354 | + client.close(); |
| 355 | +} |
| 356 | + |
305 | 357 | INSTANTIATE_TEST_SUITE_P(BasicEndToEndTest, AcknowledgeTest, testing::Values(100, 0)); |
0 commit comments