Commit 592e12eb6412f247da25b91172d8e9adf13f0f87
1 parent
ae1fbb00
Test for the '+/+' retained messages bug
Committing separately, because I want to be able to revert the fix I'm about to commit.
Showing
1 changed file
with
37 additions
and
0 deletions
FlashMQTests/tst_maintests.cpp
| ... | ... | @@ -77,6 +77,7 @@ private slots: |
| 77 | 77 | void test_retained(); |
| 78 | 78 | void test_retained_changed(); |
| 79 | 79 | void test_retained_removed(); |
| 80 | + void test_retained_tree(); | |
| 80 | 81 | |
| 81 | 82 | void test_packet_bigger_than_one_doubling(); |
| 82 | 83 | void test_very_big_packet(); |
| ... | ... | @@ -443,6 +444,42 @@ void MainTests::test_retained_removed() |
| 443 | 444 | QVERIFY2(testContext.receivedMessages.empty(), "We erased the retained message. We shouldn't have received any."); |
| 444 | 445 | } |
| 445 | 446 | |
| 447 | +/** | |
| 448 | + * @brief MainTests::test_retained_tree tests a bug I found, where '+/+' yields different results than '#', where it should be the same. | |
| 449 | + */ | |
| 450 | +void MainTests::test_retained_tree() | |
| 451 | +{ | |
| 452 | + TwoClientTestContext testContext; | |
| 453 | + | |
| 454 | + QByteArray payload = "We are testing"; | |
| 455 | + const QString topic1 = "TopicA/B"; | |
| 456 | + const QString topic2 = "Topic/C"; | |
| 457 | + const QString topic3 = "TopicB/C"; | |
| 458 | + const QStringList topics {topic1, topic2, topic3}; | |
| 459 | + | |
| 460 | + testContext.connectSender(); | |
| 461 | + testContext.publish(topic1, payload, true); | |
| 462 | + testContext.publish(topic2, payload, true); | |
| 463 | + testContext.publish(topic3, payload, true); | |
| 464 | + | |
| 465 | + testContext.connectReceiver(); | |
| 466 | + testContext.subscribeReceiver("+/+"); | |
| 467 | + testContext.waitReceiverReceived(1); | |
| 468 | + | |
| 469 | + QCOMPARE(testContext.receivedMessages.count(), topics.count()); | |
| 470 | + | |
| 471 | + for (const QString &s : topics) | |
| 472 | + { | |
| 473 | + bool r = std::any_of(testContext.receivedMessages.begin(), testContext.receivedMessages.end(), [&](QMQTT::Message &msg) | |
| 474 | + { | |
| 475 | + return msg.topic() == s && msg.payload() == payload; | |
| 476 | + }); | |
| 477 | + | |
| 478 | + QVERIFY2(r, formatString("%s not found in retained messages.", s.toStdString().c_str()).c_str()); | |
| 479 | + } | |
| 480 | + | |
| 481 | +} | |
| 482 | + | |
| 446 | 483 | void MainTests::test_packet_bigger_than_one_doubling() |
| 447 | 484 | { |
| 448 | 485 | TwoClientTestContext testContext; | ... | ... |