@@ -30,6 +30,7 @@ private Q_SLOTS:
3030 void noLocal_data ();
3131 void noLocal ();
3232 void qtbug_106203 ();
33+ void qtbug_104478 ();
3334private:
3435 void createAndSubscribe (QMqttClient *c, QMqttSubscription **sub, const QString &topic);
3536 QProcess m_brokerProcess;
@@ -450,6 +451,37 @@ void Tst_QMqttSubscription::qtbug_106203()
450451 QTRY_VERIFY2 (client.state () == QMqttClient::Disconnected, " Could not disconnect from broker." );
451452}
452453
454+ void Tst_QMqttSubscription::qtbug_104478 ()
455+ {
456+ QMqttClient client;
457+ client.setHostname (m_testBroker);
458+ client.setPort (m_port);
459+
460+ client.connectToHost ();
461+ QTRY_VERIFY2 (client.state () == QMqttClient::Connected, " Could not connect to broker." );
462+
463+ auto singleWildcardSub = client.subscribe (QLatin1String (" test/+/+/test2" ));
464+ QTRY_VERIFY2 (singleWildcardSub->state () == QMqttSubscription::Subscribed, " Could not subscribe to topic." );
465+ QSignalSpy singleSpy (singleWildcardSub, SIGNAL (messageReceived (QMqttMessage)));
466+
467+ auto mixedWildcardSub = client.subscribe (QLatin1String (" test/+/#" ));
468+ QTRY_VERIFY2 (mixedWildcardSub->state () == QMqttSubscription::Subscribed, " Could not subscribe to topic." );
469+ QSignalSpy mixedSpy (mixedWildcardSub, SIGNAL (messageReceived (QMqttMessage)));
470+
471+
472+ const QString topic (QLatin1String (" test/foo/bar/test2" ));
473+
474+ QSignalSpy pubSpy (&client, SIGNAL (messageSent (qint32)));
475+ client.publish (topic, " Wildcard checks" , 1 );
476+ QTRY_VERIFY2 (pubSpy.size () == 1 , " Could not publish message." );
477+
478+ QTRY_VERIFY2 (singleSpy.count () == 1 , " Did not receive message" );
479+ QTRY_VERIFY2 (mixedSpy.count () == 1 , " Did not receive message" );
480+
481+ client.disconnectFromHost ();
482+ QTRY_VERIFY2 (client.state () == QMqttClient::Disconnected, " Could not disconnect from broker." );
483+ }
484+
453485QTEST_MAIN (Tst_QMqttSubscription)
454486
455487#include " tst_qmqttsubscription.moc"
0 commit comments