Simulated time for unit test
This change needs some modification in EpoxyDuino that are not yet accepted.
This commit is contained in:
@@ -88,9 +88,9 @@ void MqttClient::close(bool bSendDisconnect)
|
|||||||
void MqttClient::connect(MqttBroker* local)
|
void MqttClient::connect(MqttBroker* local)
|
||||||
{
|
{
|
||||||
debug("MqttClient::connect_local");
|
debug("MqttClient::connect_local");
|
||||||
alive = 0;
|
|
||||||
close();
|
close();
|
||||||
local_broker = local;
|
local_broker = local;
|
||||||
|
clientAlive();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttClient::connect(std::string broker, uint16_t port, uint16_t ka)
|
void MqttClient::connect(std::string broker, uint16_t port, uint16_t ka)
|
||||||
@@ -271,7 +271,7 @@ void MqttClient::clientAlive()
|
|||||||
debug("MqttClient::clientAlive");
|
debug("MqttClient::clientAlive");
|
||||||
if (keep_alive)
|
if (keep_alive)
|
||||||
{
|
{
|
||||||
alive=millis()+1000*(keep_alive+local_broker ? 5 : 0);
|
alive=millis()+1000*(keep_alive+(local_broker ? TINY_MQTT_CLIENT_ALIVE_TOLERANCE : 0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
alive=0;
|
alive=0;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#ifndef TINY_MQTT_DEFAULT_ALIVE
|
#ifndef TINY_MQTT_DEFAULT_ALIVE
|
||||||
#define TINY_MQTT_DEFAULT_ALIVE 10
|
#define TINY_MQTT_DEFAULT_ALIVE 10
|
||||||
#endif
|
#endif
|
||||||
|
#define TINY_MQTT_CLIENT_ALIVE_TOLERANCE 5
|
||||||
|
|
||||||
// TODO Should add a AUnit with both TINY_MQTT_ASYNC and not TINY_MQTT_ASYNC
|
// TODO Should add a AUnit with both TINY_MQTT_ASYNC and not TINY_MQTT_ASYNC
|
||||||
// #define TINY_MQTT_ASYNC // Uncomment this to use ESPAsyncTCP instead of normal cnx
|
// #define TINY_MQTT_ASYNC // Uncomment this to use ESPAsyncTCP instead of normal cnx
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
SUB=
|
||||||
|
|
||||||
tests:
|
tests:
|
||||||
set -e; \
|
set -e; \
|
||||||
for i in *-tests/Makefile; do \
|
for i in ${SUB}*-tests/Makefile; do \
|
||||||
echo '==== Making:' $$(dirname $$i); \
|
echo '==== Making:' $$(dirname $$i); \
|
||||||
$(MAKE) -C $$(dirname $$i) -j; \
|
$(MAKE) -C $$(dirname $$i) -j; \
|
||||||
done
|
done
|
||||||
@@ -15,14 +17,14 @@ runtests: debugtest
|
|||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
$(MAKE) tests
|
$(MAKE) tests
|
||||||
set -e; \
|
set -e; \
|
||||||
for i in *-tests/Makefile; do \
|
for i in ${SUB}*-tests/Makefile; do \
|
||||||
echo '==== Running:' $$(dirname $$i); \
|
echo '==== Running:' $$(dirname $$i); \
|
||||||
$$(dirname $$i)/$$(dirname $$i).out; \
|
$$(dirname $$i)/$$(dirname $$i).out; \
|
||||||
done
|
done
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
set -e; \
|
set -e; \
|
||||||
for i in *-tests/Makefile; do \
|
for i in ${SUB}*-tests/Makefile; do \
|
||||||
echo '==== Cleaning:' $$(dirname $$i); \
|
echo '==== Cleaning:' $$(dirname $$i); \
|
||||||
$(MAKE) -C $$(dirname $$i) clean; \
|
$(MAKE) -C $$(dirname $$i) clean; \
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -42,14 +42,20 @@ test(local_client_should_unregister_when_destroyed)
|
|||||||
|
|
||||||
test(local_client_alive)
|
test(local_client_alive)
|
||||||
{
|
{
|
||||||
|
set_millis(0);
|
||||||
MqttBroker broker(1883);
|
MqttBroker broker(1883);
|
||||||
MqttClient client(&broker);
|
MqttClient client(&broker);
|
||||||
for(int i=0; i<10; i++)
|
|
||||||
{
|
broker.loop();
|
||||||
assertEqual(broker.clientsCount(), (size_t)1); // Ensure client is now connected
|
assertEqual(broker.clientsCount(), (size_t)1); // Ensure client is now connected
|
||||||
broker.loop();
|
|
||||||
usleep(TINY_MQTT_DEFAULT_ALIVE*1000000/2);
|
add_millis(TINY_MQTT_DEFAULT_ALIVE*1000/2);
|
||||||
}
|
broker.loop();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)1); // Ensure client is still connected
|
||||||
|
|
||||||
|
add_seconds(TINY_MQTT_DEFAULT_ALIVE*5);
|
||||||
|
broker.loop();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)1); // Ensure client is still connected
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|||||||
@@ -142,6 +142,46 @@ test(suback)
|
|||||||
assertEqual(MqttClient::counters[MqttMessage::Type::SubAck], 1);
|
assertEqual(MqttClient::counters[MqttMessage::Type::SubAck], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test(network_client_alive)
|
||||||
|
{
|
||||||
|
const uint32_t keep_alive=1;
|
||||||
|
start_servers(2, true);
|
||||||
|
assertEqual(WiFi.status(), WL_CONNECTED);
|
||||||
|
set_millis(0); // Enter simulated time
|
||||||
|
|
||||||
|
MqttBroker broker(1883);
|
||||||
|
broker.begin();
|
||||||
|
IPAddress broker_ip = WiFi.localIP();
|
||||||
|
|
||||||
|
ESP8266WiFiClass::selectInstance(2);
|
||||||
|
MqttClient client;
|
||||||
|
client.connect(broker_ip.toString().c_str(), 1883, keep_alive);
|
||||||
|
broker.loop();
|
||||||
|
client.loop();
|
||||||
|
|
||||||
|
assertTrue(broker.clientsCount() == 1);
|
||||||
|
assertTrue(client.connected());
|
||||||
|
|
||||||
|
uint32_t ka = broker.getClients()[0]->keepAlive();
|
||||||
|
assertEqual(ka, keep_alive);
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)1);
|
||||||
|
|
||||||
|
// All is going well if we call client.loop()
|
||||||
|
// The client is able to send PingReq to the broker
|
||||||
|
add_seconds(keep_alive);
|
||||||
|
client.loop();
|
||||||
|
broker.loop();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)1);
|
||||||
|
|
||||||
|
// Now simulate that the client is frozen for
|
||||||
|
// a too long time
|
||||||
|
add_seconds(TINY_MQTT_CLIENT_ALIVE_TOLERANCE*2);
|
||||||
|
broker.loop();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
|
||||||
|
set_real_time();
|
||||||
|
}
|
||||||
|
|
||||||
test(network_client_keep_alive_high)
|
test(network_client_keep_alive_high)
|
||||||
{
|
{
|
||||||
const uint32_t keep_alive=1000;
|
const uint32_t keep_alive=1000;
|
||||||
|
|||||||
Reference in New Issue
Block a user