summaryrefslogtreecommitdiffstats
path: root/tests/auto/qmqttclient/tst_qmqttclient.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qmqttclient/tst_qmqttclient.cpp')
-rw-r--r--tests/auto/qmqttclient/tst_qmqttclient.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/auto/qmqttclient/tst_qmqttclient.cpp b/tests/auto/qmqttclient/tst_qmqttclient.cpp
index f2e0888..e483da9 100644
--- a/tests/auto/qmqttclient/tst_qmqttclient.cpp
+++ b/tests/auto/qmqttclient/tst_qmqttclient.cpp
@@ -69,6 +69,10 @@ private Q_SLOTS:
void staticProperties_QTBUG_67176_data();
void staticProperties_QTBUG_67176();
void authentication();
+ void messageStatus_data();
+ void messageStatus();
+ void messageStatusReceive_data();
+ void messageStatusReceive();
private:
QProcess m_brokerProcess;
QString m_testBroker;
@@ -625,6 +629,102 @@ void Tst_QMqttClient::authentication()
QTRY_COMPARE(client.state(), QMqttClient::Connected);
}
+Q_DECLARE_METATYPE(QMqtt::MessageStatus)
+
+void Tst_QMqttClient::messageStatus_data()
+{
+ QTest::addColumn<int>("qos");
+ QTest::addColumn<QList<QMqtt::MessageStatus>>("expectedStatus");
+
+ QTest::newRow("QoS1") << 1 << (QList<QMqtt::MessageStatus>() << QMqtt::MessageStatus::Acknowledged);
+ QTest::newRow("QoS2") << 2 << (QList<QMqtt::MessageStatus>() << QMqtt::MessageStatus::Received
+ << QMqtt::MessageStatus::Completed);
+}
+
+void Tst_QMqttClient::messageStatus()
+{
+ QFETCH(int, qos);
+ QFETCH(QList<QMqtt::MessageStatus>, expectedStatus);
+
+ QMqttClient client;
+ client.setProtocolVersion(QMqttClient::MQTT_5_0);
+ client.setHostname(m_testBroker);
+ client.setPort(m_port);
+
+ client.connectToHost();
+ QTRY_VERIFY2(client.state() == QMqttClient::Connected, "Could not connect to broker.");
+
+ const QString topic = QLatin1String("Qt/client/statusCheck");
+
+ connect(&client, &QMqttClient::messageStatusChanged, [&expectedStatus](qint32,
+ QMqtt::MessageStatus s,
+ const QMqttMessageStatusProperties &)
+ {
+ QCOMPARE(s, expectedStatus.first());
+ expectedStatus.takeFirst();
+ });
+
+ QSignalSpy publishSpy(&client, &QMqttClient::messageSent);
+ client.publish(topic, QByteArray("someContent"), quint8(qos));
+ QTRY_VERIFY2(publishSpy.count() == 1, "Could not publish message");
+ QTRY_VERIFY2(expectedStatus.isEmpty(), "Did not receive all status updates.");
+}
+
+void Tst_QMqttClient::messageStatusReceive_data()
+{
+ QTest::addColumn<int>("qos");
+ QTest::addColumn<QList<QMqtt::MessageStatus>>("expectedStatus");
+
+ QTest::newRow("QoS1") << 1 << (QList<QMqtt::MessageStatus>() << QMqtt::MessageStatus::Published);
+ QTest::newRow("QoS2") << 2 << (QList<QMqtt::MessageStatus>() << QMqtt::MessageStatus::Published
+ << QMqtt::MessageStatus::Released);
+}
+
+void Tst_QMqttClient::messageStatusReceive()
+{
+ QFETCH(int, qos);
+ QFETCH(QList<QMqtt::MessageStatus>, expectedStatus);
+
+ QMqttClient publisher;
+ publisher.setProtocolVersion(QMqttClient::MQTT_5_0);
+ publisher.setHostname(m_testBroker);
+ publisher.setPort(m_port);
+
+ publisher.connectToHost();
+ QTRY_VERIFY2(publisher.state() == QMqttClient::Connected, "Could not connect to broker.");
+
+ QMqttClient subscriber;
+ subscriber.setProtocolVersion(QMqttClient::MQTT_5_0);
+ subscriber.setHostname(m_testBroker);
+ subscriber.setPort(m_port);
+
+ subscriber.connectToHost();
+ QTRY_VERIFY2(subscriber.state() == QMqttClient::Connected, "Could not connect to broker.");
+
+ const QString topic = QLatin1String("Qt/client/statusCheckReceive");
+
+ auto subscription = subscriber.subscribe(topic, quint8(qos));
+ QTRY_VERIFY2(subscription->state() == QMqttSubscription::Subscribed, "Could not subscribe to topic");
+ QVERIFY(subscription->qos() >= qos);
+
+ connect(&subscriber, &QMqttClient::messageStatusChanged, [&expectedStatus](qint32,
+ QMqtt::MessageStatus s,
+ const QMqttMessageStatusProperties &)
+ {
+ QCOMPARE(s, expectedStatus.first());
+ expectedStatus.takeFirst();
+ });
+
+ QSignalSpy publishSpy(&publisher, &QMqttClient::messageSent);
+ QSignalSpy receiveSpy(&subscriber, &QMqttClient::messageReceived);
+
+ publisher.publish(topic, QByteArray("someContent"), quint8(qos));
+ QTRY_VERIFY2(publishSpy.count() == 1, "Could not publish message");
+ QTRY_VERIFY2(receiveSpy.count() == 1, "Did not receive message");
+
+ QTRY_VERIFY2(expectedStatus.isEmpty(), "Did not receive all status updates.");
+}
+
QTEST_MAIN(Tst_QMqttClient)
#include "tst_qmqttclient.moc"