Commit e3a794e482f3a083c8c7a045782ce0e946913a6f

Authored by Wiebe Cazemier
1 parent 0cc6610a

Fix incorrect assert about QoS on wrong object

Fixes assertion error in debug only.
FlashMQTests/tst_maintests.cpp
@@ -131,6 +131,8 @@ private slots: @@ -131,6 +131,8 @@ private slots:
131 void testIncomingTopicAlias(); 131 void testIncomingTopicAlias();
132 void testOutgoingTopicAlias(); 132 void testOutgoingTopicAlias();
133 133
  134 + void testReceivingRetainedMessageWithQoS();
  135 +
134 }; 136 };
135 137
136 MainTests::MainTests() 138 MainTests::MainTests()
@@ -1706,6 +1708,34 @@ void MainTests::testOutgoingTopicAlias() @@ -1706,6 +1708,34 @@ void MainTests::testOutgoingTopicAlias()
1706 }); 1708 });
1707 } 1709 }
1708 1710
  1711 +void MainTests::testReceivingRetainedMessageWithQoS()
  1712 +{
  1713 + FlashMQTestClient sender;
  1714 + sender.start();
  1715 +
  1716 + const std::string payload = "We are testing";
  1717 +
  1718 + sender.connectClient(ProtocolVersion::Mqtt311);
  1719 +
  1720 + Publish p1("topic1/FOOBAR", payload, 1);
  1721 + p1.retain = true;
  1722 + sender.publish(p1);
  1723 +
  1724 + FlashMQTestClient receiver;
  1725 + receiver.start();
  1726 + receiver.connectClient(ProtocolVersion::Mqtt5);
  1727 +
  1728 + receiver.subscribe("+/+", 1);
  1729 +
  1730 + receiver.waitForMessageCount(1);
  1731 +
  1732 + MYCASTCOMPARE(receiver.receivedPublishes.size(), 1);
  1733 + MYCASTCOMPARE(receiver.receivedPublishes.front().getQos(), 1);
  1734 + MYCASTCOMPARE(receiver.receivedPublishes.front().getTopic(), "topic1/FOOBAR");
  1735 + MYCASTCOMPARE(receiver.receivedPublishes.front().getPayloadCopy(), payload);
  1736 + MYCASTCOMPARE(receiver.receivedPublishes.front().getRetain(), true);
  1737 +}
  1738 +
1709 1739
1710 int main(int argc, char *argv[]) 1740 int main(int argc, char *argv[])
1711 { 1741 {
publishcopyfactory.cpp
@@ -95,16 +95,18 @@ bool PublishCopyFactory::getRetain() const @@ -95,16 +95,18 @@ bool PublishCopyFactory::getRetain() const
95 95
96 Publish PublishCopyFactory::getNewPublish() const 96 Publish PublishCopyFactory::getNewPublish() const
97 { 97 {
98 - assert(packet->getQos() > 0);  
99 - assert(orgQos > 0); // We only need to construct new publishes for QoS. If you're doing it elsewhere, it's a bug.  
100 -  
101 if (packet) 98 if (packet)
102 { 99 {
  100 + assert(packet->getQos() > 0);
  101 + assert(orgQos > 0); // We only need to construct new publishes for QoS. If you're doing it elsewhere, it's a bug.
  102 +
103 Publish p(packet->getPublishData()); 103 Publish p(packet->getPublishData());
104 p.qos = orgQos; 104 p.qos = orgQos;
105 return p; 105 return p;
106 } 106 }
107 107
  108 + assert(publish->qos > 0); // Same check as above, but then for Publish objects.
  109 +
108 Publish p(*publish); 110 Publish p(*publish);
109 p.qos = orgQos; 111 p.qos = orgQos;
110 return p; 112 return p;