Release 0.7.0
This commit is contained in:
@@ -121,6 +121,7 @@ class MqttClient
|
|||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
MqttClient(MqttBroker*);
|
MqttClient(MqttBroker*);
|
||||||
|
MqttClient(MqttBroker* brk, const std::string& id) : MqttClient(brk) { clientId=id; }
|
||||||
MqttClient() : MqttClient(nullptr) {};
|
MqttClient() : MqttClient(nullptr) {};
|
||||||
|
|
||||||
~MqttClient();
|
~MqttClient();
|
||||||
@@ -225,6 +226,8 @@ class MqttBroker
|
|||||||
void connect(std::string host, uint32_t port=1883);
|
void connect(std::string host, uint32_t port=1883);
|
||||||
bool connected() const { return state == Connected; }
|
bool connected() const { return state == Connected; }
|
||||||
|
|
||||||
|
size_t clientsCount() const { return clients.size(); }
|
||||||
|
|
||||||
void dump()
|
void dump()
|
||||||
{
|
{
|
||||||
Serial << clients.size() << " client/s" << endl;
|
Serial << clients.size() << " client/s" << endl;
|
||||||
|
|||||||
138
tests/tinymqtt-tests/tinymqtt-tests.ino
Normal file
138
tests/tinymqtt-tests/tinymqtt-tests.ino
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
#include <AUnit.h>
|
||||||
|
#include <TinyMqtt.h>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TinyMqtt local unit tests.
|
||||||
|
*
|
||||||
|
* No wifi connection unit tests.
|
||||||
|
**/
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
MqttBroker broker(1883);
|
||||||
|
|
||||||
|
std::map<std::string, std::map<Topic, int>> published; // map[client_id] => map[topic] = count
|
||||||
|
|
||||||
|
void onPublish(const MqttClient* srce, const Topic& topic, const char* payload, size_t length)
|
||||||
|
{
|
||||||
|
if (srce)
|
||||||
|
published[srce->id()][topic]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
test(local_client_should_unregister_when_destroyed)
|
||||||
|
{
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
{
|
||||||
|
MqttClient client(&broker);
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)1);
|
||||||
|
}
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
}
|
||||||
|
|
||||||
|
test(local_connect)
|
||||||
|
{
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
|
||||||
|
MqttClient client(&broker);
|
||||||
|
assertTrue(client.connected());
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)1);
|
||||||
|
}
|
||||||
|
|
||||||
|
test(local_publish_should_be_dispatched)
|
||||||
|
{
|
||||||
|
published.clear();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
|
||||||
|
MqttClient subscriber(&broker);
|
||||||
|
subscriber.subscribe("a/b");
|
||||||
|
subscriber.subscribe("a/c");
|
||||||
|
subscriber.setCallback(onPublish);
|
||||||
|
|
||||||
|
MqttClient publisher(&broker);
|
||||||
|
publisher.publish("a/b");
|
||||||
|
publisher.publish("a/c");
|
||||||
|
publisher.publish("a/c");
|
||||||
|
|
||||||
|
assertEqual(published.size(), (size_t)1); // 1 client has received something
|
||||||
|
assertTrue(published[""]["a/b"] == 1);
|
||||||
|
assertTrue(published[""]["a/c"] == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
test(local_publish_should_be_dispatched_to_local_clients)
|
||||||
|
{
|
||||||
|
published.clear();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
|
||||||
|
MqttClient subscriber_a(&broker, "A");
|
||||||
|
subscriber_a.setCallback(onPublish);
|
||||||
|
subscriber_a.subscribe("a/b");
|
||||||
|
subscriber_a.subscribe("a/c");
|
||||||
|
|
||||||
|
MqttClient subscriber_b(&broker, "B");
|
||||||
|
subscriber_b.setCallback(onPublish);
|
||||||
|
subscriber_b.subscribe("a/b");
|
||||||
|
|
||||||
|
MqttClient publisher(&broker);
|
||||||
|
publisher.publish("a/b");
|
||||||
|
publisher.publish("a/c");
|
||||||
|
|
||||||
|
assertEqual(published.size(), (size_t)2); // 2 clients have received something
|
||||||
|
assertTrue(published["A"]["a/b"] == 1);
|
||||||
|
assertTrue(published["A"]["a/c"] == 1);
|
||||||
|
assertTrue(published["B"]["a/b"] == 1);
|
||||||
|
assertTrue(published["B"]["a/c"] == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
test(local_unsubscribe)
|
||||||
|
{
|
||||||
|
published.clear();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
|
||||||
|
MqttClient subscriber(&broker);
|
||||||
|
subscriber.setCallback(onPublish);
|
||||||
|
subscriber.subscribe("a/b");
|
||||||
|
|
||||||
|
MqttClient publisher(&broker);
|
||||||
|
publisher.publish("a/b");
|
||||||
|
|
||||||
|
// subscriber.unsubscribe("a/b"); TODO not yet implemented
|
||||||
|
|
||||||
|
publisher.publish("a/b");
|
||||||
|
|
||||||
|
assertTrue(published[""]["a/b"] == 1); // Only one publish has been received
|
||||||
|
}
|
||||||
|
|
||||||
|
test(local_nocallback_when_destroyed)
|
||||||
|
{
|
||||||
|
published.clear();
|
||||||
|
assertEqual(broker.clientsCount(), (size_t)0);
|
||||||
|
|
||||||
|
{
|
||||||
|
MqttClient subscriber(&broker);
|
||||||
|
subscriber.setCallback(onPublish);
|
||||||
|
subscriber.subscribe("a/b");
|
||||||
|
}
|
||||||
|
|
||||||
|
MqttClient publisher(&broker);
|
||||||
|
publisher.publish("a/b");
|
||||||
|
|
||||||
|
assertEqual(published.size(), (size_t)0); // Only one publish has been received
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
// setup() and loop()
|
||||||
|
void setup() {
|
||||||
|
delay(1000);
|
||||||
|
Serial.begin(115200);
|
||||||
|
while(!Serial);
|
||||||
|
|
||||||
|
Serial.println("=============[ NO WIFI CONNECTION TinyMqtt TESTS ]========================");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
aunit::TestRunner::run();
|
||||||
|
|
||||||
|
if (Serial.available()) ESP.reset();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user