From 0765167b77c0ab11011e06e6e27dfd540a5da3dd Mon Sep 17 00:00:00 2001 From: Wiebe Cazemier Date: Sun, 7 Aug 2022 13:57:10 +0200 Subject: [PATCH] Make test_retained test cross-protocol and fix retain flag bug --- FlashMQTests/tst_maintests.cpp | 68 ++++++++++++++++++++++++++++++++++++++------------------------------ mqttpacket.cpp | 1 + 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/FlashMQTests/tst_maintests.cpp b/FlashMQTests/tst_maintests.cpp index 5ef659a..df79696 100644 --- a/FlashMQTests/tst_maintests.cpp +++ b/FlashMQTests/tst_maintests.cpp @@ -408,48 +408,56 @@ void MainTests::test_validSubscribePath() void MainTests::test_retained() { - FlashMQTestClient sender; - FlashMQTestClient receiver; + std::vector protocols {ProtocolVersion::Mqtt311, ProtocolVersion::Mqtt5}; - sender.start(); - receiver.start(); + for (const ProtocolVersion senderVersion : protocols) + { + for (const ProtocolVersion receiverVersion : protocols) + { + FlashMQTestClient sender; + FlashMQTestClient receiver; - const std::string payload = "We are testing"; - const std::string topic = "retaintopic"; + sender.start(); + receiver.start(); - sender.connectClient(ProtocolVersion::Mqtt311); + const std::string payload = "We are testing"; + const std::string topic = "retaintopic"; - Publish pub1(topic, payload, 0); - pub1.retain = true; - sender.publish(pub1); + sender.connectClient(senderVersion); - Publish pub2("dummy2", "Nobody sees this", 0); - pub2.retain = true; - sender.publish(pub2); + Publish pub1(topic, payload, 0); + pub1.retain = true; + sender.publish(pub1); - receiver.connectClient(ProtocolVersion::Mqtt311); - receiver.subscribe("dummy", 0); - receiver.subscribe(topic, 0); + Publish pub2("dummy2", "Nobody sees this", 0); + pub2.retain = true; + sender.publish(pub2); - receiver.waitForMessageCount(1); + receiver.connectClient(receiverVersion); + receiver.subscribe("dummy", 0); + receiver.subscribe(topic, 0); - MYCASTCOMPARE(receiver.receivedPublishes.size(), 1); + receiver.waitForMessageCount(1); - MqttPacket &msg = receiver.receivedPublishes.front(); - QCOMPARE(msg.getPayloadCopy(), payload); - QCOMPARE(msg.getTopic(), topic); - QVERIFY(msg.getRetain()); + MYCASTCOMPARE(receiver.receivedPublishes.size(), 1); - receiver.clearReceivedLists(); + MqttPacket &msg = receiver.receivedPublishes.front(); + QCOMPARE(msg.getPayloadCopy(), payload); + QCOMPARE(msg.getTopic(), topic); + QVERIFY(msg.getRetain()); - sender.publish(pub1); - receiver.waitForMessageCount(1); + receiver.clearReceivedLists(); - QVERIFY2(receiver.receivedPublishes.size() == 1, "There must be one message in the received list"); - MqttPacket &msg2 = receiver.receivedPublishes.front(); - QCOMPARE(msg2.getPayloadCopy(), payload); - QCOMPARE(msg2.getTopic(), topic); - QVERIFY2(!msg2.getRetain(), "Getting a retained message while already being subscribed must be marked as normal, not retain."); + sender.publish(pub1); + receiver.waitForMessageCount(1); + + QVERIFY2(receiver.receivedPublishes.size() == 1, "There must be one message in the received list"); + MqttPacket &msg2 = receiver.receivedPublishes.front(); + QCOMPARE(msg2.getPayloadCopy(), payload); + QCOMPARE(msg2.getTopic(), topic); + QVERIFY2(!msg2.getRetain(), "Getting a retained message while already being subscribed must be marked as normal, not retain."); + } + } } void MainTests::test_retained_changed() diff --git a/mqttpacket.cpp b/mqttpacket.cpp index a1d4fa0..0b569c9 100644 --- a/mqttpacket.cpp +++ b/mqttpacket.cpp @@ -1281,6 +1281,7 @@ void MqttPacket::handlePublish() // Existing subscribers don't get retain=1. [MQTT-3.3.1-9] bites[0] &= 0b11110110; first_byte = bites[0]; + publishData.retain = false; PublishCopyFactory factory(this); MainApp::getMainApp()->getSubscriptionStore()->queuePacketAtSubscribers(factory); -- libgit2 0.21.4