diff options
author | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2019-06-28 14:53:51 +0200 |
---|---|---|
committer | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2019-07-02 12:52:04 +0200 |
commit | d25a0abe78648b0e2fbf4ac6d4e3b325e88dfb42 (patch) | |
tree | a694a3c4d1d06fa8066084711de34db09d7ccc15 | |
parent | 23febf55174a92fe93c06e63cb66e4a1fc7ca089 (diff) |
Allow empty will messages
A will message is allowed to be empty. Hence, check whether a will topic
exists to identify incorporating the last will to the connect message.
Task-number: QTBUG-76783
Change-Id: Ifb7f5467e8e7e70c6d9c050b36a35df2419f4171
Reviewed-by: hjk <hjk@qt.io>
-rw-r--r-- | src/mqtt/qmqttconnection.cpp | 4 | ||||
-rw-r--r-- | tests/auto/qmqttclient/tst_qmqttclient.cpp | 15 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/mqtt/qmqttconnection.cpp b/src/mqtt/qmqttconnection.cpp index bbad0bd..e3beb56 100644 --- a/src/mqtt/qmqttconnection.cpp +++ b/src/mqtt/qmqttconnection.cpp @@ -253,7 +253,7 @@ bool QMqttConnection::sendControlConnect() if (m_clientPrivate->m_cleanSession) flags |= 1 << 1; - if (!m_clientPrivate->m_willMessage.isEmpty()) { + if (!m_clientPrivate->m_willTopic.isEmpty()) { flags |= 1 << 2; if (m_clientPrivate->m_willQoS > 2) { qCDebug(lcMqttConnection) << "Invalid Will QoS specified."; @@ -290,7 +290,7 @@ bool QMqttConnection::sendControlConnect() packet.append(char(0)); } - if (!m_clientPrivate->m_willMessage.isEmpty()) { + if (!m_clientPrivate->m_willTopic.isEmpty()) { if (m_clientPrivate->m_protocolVersion == QMqttClient::MQTT_5_0) packet.appendRaw(writeLastWillProperties()); diff --git a/tests/auto/qmqttclient/tst_qmqttclient.cpp b/tests/auto/qmqttclient/tst_qmqttclient.cpp index c4da40d..21bd512 100644 --- a/tests/auto/qmqttclient/tst_qmqttclient.cpp +++ b/tests/auto/qmqttclient/tst_qmqttclient.cpp @@ -263,14 +263,25 @@ void Tst_QMqttClient::retainMessage() publisher.disconnect(); } -DefaultVersionTestData(Tst_QMqttClient::willMessage_data) +void Tst_QMqttClient::willMessage_data() +{ + QTest::addColumn<QMqttClient::ProtocolVersion>("mqttVersion"); + QTest::addColumn<QByteArray>("willMessage"); + + QList<QMqttClient::ProtocolVersion> versions{QMqttClient::MQTT_3_1_1, QMqttClient::MQTT_5_0}; + + for (int i = 0; i < 2; ++i) { + QTest::newRow(qPrintable(QString::number(versions[i]) + ":simple")) << versions[i] << QByteArray("The client connection is gone."); + QTest::newRow(qPrintable(QString::number(versions[i]) + ":empty")) << versions[i] << QByteArray(); + } +} void Tst_QMqttClient::willMessage() { QFETCH(QMqttClient::ProtocolVersion, mqttVersion); + QFETCH(QByteArray, willMessage); const QString willTopic = QLatin1String("Qt/QMqttClient/will/topic"); - const QByteArray willMessage("The client died...."); // Client A connects VersionClient(mqttVersion, client1); |