From 6339be804475060c89760c550143bc58620b93e8 Mon Sep 17 00:00:00 2001 From: hsaturn Date: Mon, 10 Apr 2023 10:44:46 +0200 Subject: [PATCH] Add unit test for client deletion upon wifi disconnection --- tests/network-tests/network-tests.ino | 53 +++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tests/network-tests/network-tests.ino b/tests/network-tests/network-tests.ino index 8e249c4..fc4d0e3 100644 --- a/tests/network-tests/network-tests.ino +++ b/tests/network-tests/network-tests.ino @@ -144,6 +144,59 @@ test(suback) 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) { assertEqual(MqttClient::instances, 0);