1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-03 07:02:28 +03:00
esp8266/tests/device/test_WiFiClient/test_WiFiClient.ino
Ivan Grokhotkov ee5a1e2804 WiFiClient: don’t destroy ClientContext on ::stop
Reported in https://github.com/esp8266/Arduino/issues/4078.

WiFiClient::stopAll, called from a WiFi disconnected event handler,
could be called while WiFiClient::connect was in progress. This issue
was initially fixed in #4194, by testing `this` pointer for being
non-null in ClientContext::connect.

This change delegates deletion of ClientContext to WiFiClient
destructor. WiFiClient::stop only calls ClientContext::stop, which
closes/aborts the connection.
2018-02-20 03:33:55 +03:00

57 lines
1.1 KiB
C++

#include <Arduino.h>
#include <BSTest.h>
#include <test_config.h>
#include <ESP8266WiFi.h>
#include <Ticker.h>
extern "C" {
#include "user_interface.h"
}
BS_ENV_DECLARE();
void setup()
{
Serial.begin(115200);
Serial.setDebugOutput(true);
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(STA_SSID, STA_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
BS_RUN(Serial);
}
static void stopAll()
{
WiFiClient::stopAll();
}
static void disconnectWiFI()
{
wifi_station_disconnect();
}
/* Some IP address that we can try connecting to, and expect a timeout */
#define UNREACHABLE_IP "192.168.255.255"
TEST_CASE("WiFiClient::stopAll during WiFiClient::connect", "[wificlient]")
{
WiFiClient client;
Ticker t;
t.once_ms(500, &stopAll);
REQUIRE(client.connect(UNREACHABLE_IP, 1024) == 0);
}
TEST_CASE("WiFi disconnect during WiFiClient::connect", "[wificlient]")
{
WiFiClient client;
Ticker t;
t.once_ms(500, &disconnectWiFI);
REQUIRE(client.connect(UNREACHABLE_IP, 1024) == 0);
}
void loop()
{
}