Enhance PR#22
This commit is contained in:
@@ -523,7 +523,7 @@ if (mesg->type() != MqttMessage::Type::PingReq && mesg->type() != MqttMessage::T
|
|||||||
payload = header+2;
|
payload = header+2;
|
||||||
|
|
||||||
debug("un/subscribe loop");
|
debug("un/subscribe loop");
|
||||||
std::vector<char> qoss;
|
std::string qoss;
|
||||||
while(payload < mesg->end())
|
while(payload < mesg->end())
|
||||||
{
|
{
|
||||||
mesg->getString(payload, len); // Topic
|
mesg->getString(payload, len); // Topic
|
||||||
@@ -553,23 +553,12 @@ if (mesg->type() != MqttMessage::Type::PingReq && mesg->type() != MqttMessage::T
|
|||||||
}
|
}
|
||||||
debug("end loop");
|
debug("end loop");
|
||||||
bclose = false;
|
bclose = false;
|
||||||
// TODO SUBACK
|
|
||||||
if ((mesg->type() & 0XF0) == MqttMessage::Type::Subscribe)
|
MqttMessage ack(mesg->type() == MqttMessage::Type::Subscribe ? MqttMessage::Type::SubAck : MqttMessage::Type::UnSuback);
|
||||||
{
|
ack.add(header[0]);
|
||||||
sMQTTMessage msg(sMQTTMessage::Type::SubAck);
|
ack.add(header[1]);
|
||||||
msg.add(header[0]);
|
ack.add(qoss.c_str(), qoss.size(), false);
|
||||||
msg.add(header[1]);
|
ack.sendTo(this);
|
||||||
for (int i = 0; i<qoss.size(); i++)
|
|
||||||
msg.add(qoss[i]);
|
|
||||||
msg.sendTo(this);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sMQTTMessage msg(sMQTTMessage::Type::UnSuback);
|
|
||||||
msg.add(header[0]);
|
|
||||||
msg.add(header[1]);
|
|
||||||
msg.sendTo(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,11 @@
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
String toString(const IPAddress& ip)
|
||||||
|
{
|
||||||
|
return String(ip[0])+'.'+String(ip[1])+'.'+String(ip[2])+'.'+String(ip[3]);
|
||||||
|
}
|
||||||
|
|
||||||
MqttBroker broker(1883);
|
MqttBroker broker(1883);
|
||||||
|
|
||||||
std::map<std::string, std::map<Topic, int>> published; // map[client_id] => map[topic] = count
|
std::map<std::string, std::map<Topic, int>> published; // map[client_id] => map[topic] = count
|
||||||
@@ -51,10 +56,44 @@ test(network_single_broker_begin)
|
|||||||
// TODO Nothing is tested here !
|
// TODO Nothing is tested here !
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test(suback)
|
||||||
|
{
|
||||||
|
start_servers(2, true);
|
||||||
|
assertEqual(WiFi.status(), WL_CONNECTED);
|
||||||
|
|
||||||
|
MqttBroker broker(1883);
|
||||||
|
broker.begin();
|
||||||
|
IPAddress broker_ip = WiFi.localIP();
|
||||||
|
|
||||||
|
ESP8266WiFiClass::selectInstance(2);
|
||||||
|
MqttClient client;
|
||||||
|
client.connect(broker_ip.toString().c_str(), 1883);
|
||||||
|
broker.loop();
|
||||||
|
|
||||||
|
assertTrue(broker.clientsCount() == 1);
|
||||||
|
assertTrue(client.connected());
|
||||||
|
|
||||||
|
MqttClient::counters[MqttMessage::Type::SubAck] = 0;
|
||||||
|
client.subscribe("a/b");
|
||||||
|
|
||||||
|
// TODO how to avoid these loops ???
|
||||||
|
broker.loop();
|
||||||
|
client.loop();
|
||||||
|
|
||||||
|
String s;
|
||||||
|
for(const auto& in: MqttClient::counters)
|
||||||
|
{
|
||||||
|
s = s+String(in.first);
|
||||||
|
s = s+':';
|
||||||
|
s = s+String(in.second);
|
||||||
|
s = s+' ';
|
||||||
|
}
|
||||||
|
assertEqual(MqttClient::counters[MqttMessage::Type::SubAck], 1);
|
||||||
|
}
|
||||||
|
|
||||||
test(network_client_to_broker_connexion)
|
test(network_client_to_broker_connexion)
|
||||||
{
|
{
|
||||||
start_servers(2, true);
|
start_servers(2, true);
|
||||||
|
|
||||||
assertEqual(WiFi.status(), WL_CONNECTED);
|
assertEqual(WiFi.status(), WL_CONNECTED);
|
||||||
|
|
||||||
MqttBroker broker(1883);
|
MqttBroker broker(1883);
|
||||||
@@ -147,7 +186,6 @@ test(network_client_should_unregister_when_destroyed)
|
|||||||
assertEqual(broker.clientsCount(), (size_t)0);
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
// THESE TESTS ARE IN LOCAL MODE
|
// THESE TESTS ARE IN LOCAL MODE
|
||||||
// WE HAVE TO CONVERT THEM TO WIFI MODE (pass through virtual TCP link)
|
// WE HAVE TO CONVERT THEM TO WIFI MODE (pass through virtual TCP link)
|
||||||
@@ -277,8 +315,8 @@ test(network_hudge_payload)
|
|||||||
// onPublish should have filled lastPayload and lastLength
|
// onPublish should have filled lastPayload and lastLength
|
||||||
assertEqual(payload, lastPayload);
|
assertEqual(payload, lastPayload);
|
||||||
assertEqual(lastLength, strlen(payload));
|
assertEqual(lastLength, strlen(payload));
|
||||||
|
assertEqual(strcmp(payload, lastPayload), 0);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
// setup() and loop()
|
// setup() and loop()
|
||||||
@@ -286,9 +324,10 @@ void setup() {
|
|||||||
/* delay(1000);
|
/* delay(1000);
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
while(!Serial);
|
while(!Serial);
|
||||||
|
*/
|
||||||
|
|
||||||
Serial.println("=============[ FAKE NETWORK TinyMqtt TESTS ]========================");
|
Serial.println("=============[ FAKE NETWORK TinyMqtt TESTS ]========================");
|
||||||
*/
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFi.begin("network", "password");
|
WiFi.begin("network", "password");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user