Add unit test for client deletion upon wifi disconnection
This commit is contained in:
@@ -144,6 +144,59 @@ test(suback)
|
|||||||
assertEqual(MqttClient::counters[MqttMessage::Type::SubAck], 1);
|
assertEqual(MqttClient::counters[MqttMessage::Type::SubAck], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test(remote_client_deletion)
|
||||||
|
{
|
||||||
|
assertEqual(MqttClient::instances, 0);
|
||||||
|
{
|
||||||
|
start_many_wifi_esp(3, true);
|
||||||
|
assertEqual(WiFi.status(), WL_CONNECTED);
|
||||||
|
|
||||||
|
MqttBroker broker(1883);
|
||||||
|
broker.begin();
|
||||||
|
IPAddress broker_ip = WiFi.localIP();
|
||||||
|
|
||||||
|
// A first remote client
|
||||||
|
ESP8266WiFiClass::selectInstance(2);
|
||||||
|
MqttClient remote_client;
|
||||||
|
assertEqual(MqttClient::instances, 1);
|
||||||
|
|
||||||
|
remote_client.connect(broker_ip.toString().c_str());
|
||||||
|
broker.loop(); remote_client.loop();
|
||||||
|
assertEqual(MqttClient::instances, 2); // broker creates a client to manage remote_client
|
||||||
|
|
||||||
|
// A second remote client
|
||||||
|
ESP8266WiFiClass::selectInstance(3);
|
||||||
|
MqttClient secund_client;
|
||||||
|
assertEqual(MqttClient::instances, 3);
|
||||||
|
|
||||||
|
secund_client.connect(broker_ip.toString().c_str());
|
||||||
|
broker.loop(); remote_client.loop();
|
||||||
|
assertEqual(MqttClient::instances, 4);
|
||||||
|
|
||||||
|
// Now disconnect remote clients
|
||||||
|
remote_client.close();
|
||||||
|
broker.loop(); remote_client.loop();
|
||||||
|
assertEqual(MqttClient::instances, 3);
|
||||||
|
|
||||||
|
secund_client.close();
|
||||||
|
broker.loop(); remote_client.loop();
|
||||||
|
assertEqual(MqttClient::instances, 2); // These instances are in this scope
|
||||||
|
|
||||||
|
// Now simulate that the external client is dead without disconnecting
|
||||||
|
secund_client.connect(broker_ip.toString().c_str());
|
||||||
|
broker.loop(); remote_client.loop();
|
||||||
|
assertEqual(MqttClient::instances, 3);
|
||||||
|
|
||||||
|
WiFi.disconnect();
|
||||||
|
broker.loop(); remote_client.loop();
|
||||||
|
broker.loop(); remote_client.loop();
|
||||||
|
assertEqual(MqttClient::instances, 2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEqual(MqttClient::instances, 0);
|
||||||
|
}
|
||||||
|
|
||||||
test(broker_connect_and_client_deletion)
|
test(broker_connect_and_client_deletion)
|
||||||
{
|
{
|
||||||
assertEqual(MqttClient::instances, 0);
|
assertEqual(MqttClient::instances, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user