Enhance PR#22

This commit is contained in:
hsaturn
2022-01-05 02:03:42 +01:00
parent cce4fecac6
commit 5f7b4537c8
2 changed files with 50 additions and 22 deletions

View File

@@ -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;

View File

@@ -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");
} }