178 lines
4.6 KiB
C++
178 lines
4.6 KiB
C++
|
#include "PubSubClient.h"
|
||
|
#include "ShimClient.h"
|
||
|
#include "Buffer.h"
|
||
|
#include "BDDTest.h"
|
||
|
#include "trace.h"
|
||
|
|
||
|
|
||
|
byte server[] = { 172, 16, 0, 2 };
|
||
|
|
||
|
void callback(char* topic, byte* payload, unsigned int length) {
|
||
|
// handle message arrived
|
||
|
}
|
||
|
|
||
|
int test_subscribe_no_qos() {
|
||
|
IT("subscribe without qos defaults to 0");
|
||
|
ShimClient shimClient;
|
||
|
shimClient.setAllowConnect(true);
|
||
|
|
||
|
byte connack[] = { 0x20, 0x02, 0x00, 0x00 };
|
||
|
shimClient.respond(connack,4);
|
||
|
|
||
|
PubSubClient client(server, 1883, callback, shimClient);
|
||
|
int rc = client.connect((char*)"client_test1");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
byte subscribe[] = { 0x82,0xa,0x0,0x2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x0 };
|
||
|
shimClient.expect(subscribe,12);
|
||
|
byte suback[] = { 0x90,0x3,0x0,0x2,0x0 };
|
||
|
shimClient.respond(suback,5);
|
||
|
|
||
|
rc = client.subscribe((char*)"topic");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
IS_FALSE(shimClient.error());
|
||
|
|
||
|
END_IT
|
||
|
}
|
||
|
|
||
|
int test_subscribe_qos_1() {
|
||
|
IT("subscribes qos 1");
|
||
|
ShimClient shimClient;
|
||
|
shimClient.setAllowConnect(true);
|
||
|
|
||
|
byte connack[] = { 0x20, 0x02, 0x00, 0x00 };
|
||
|
shimClient.respond(connack,4);
|
||
|
|
||
|
PubSubClient client(server, 1883, callback, shimClient);
|
||
|
int rc = client.connect((char*)"client_test1");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
byte subscribe[] = { 0x82,0xa,0x0,0x2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x1 };
|
||
|
shimClient.expect(subscribe,12);
|
||
|
byte suback[] = { 0x90,0x3,0x0,0x2,0x1 };
|
||
|
shimClient.respond(suback,5);
|
||
|
|
||
|
rc = client.subscribe((char*)"topic",1);
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
IS_FALSE(shimClient.error());
|
||
|
|
||
|
END_IT
|
||
|
}
|
||
|
|
||
|
int test_subscribe_not_connected() {
|
||
|
IT("subscribe fails when not connected");
|
||
|
ShimClient shimClient;
|
||
|
|
||
|
PubSubClient client(server, 1883, callback, shimClient);
|
||
|
|
||
|
int rc = client.subscribe((char*)"topic");
|
||
|
IS_FALSE(rc);
|
||
|
|
||
|
IS_FALSE(shimClient.error());
|
||
|
|
||
|
END_IT
|
||
|
}
|
||
|
|
||
|
int test_subscribe_invalid_qos() {
|
||
|
IT("subscribe fails with invalid qos values");
|
||
|
ShimClient shimClient;
|
||
|
shimClient.setAllowConnect(true);
|
||
|
|
||
|
byte connack[] = { 0x20, 0x02, 0x00, 0x00 };
|
||
|
shimClient.respond(connack,4);
|
||
|
|
||
|
PubSubClient client(server, 1883, callback, shimClient);
|
||
|
int rc = client.connect((char*)"client_test1");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
rc = client.subscribe((char*)"topic",2);
|
||
|
IS_FALSE(rc);
|
||
|
rc = client.subscribe((char*)"topic",254);
|
||
|
IS_FALSE(rc);
|
||
|
|
||
|
IS_FALSE(shimClient.error());
|
||
|
|
||
|
END_IT
|
||
|
}
|
||
|
|
||
|
int test_subscribe_too_long() {
|
||
|
IT("subscribe fails with too long topic");
|
||
|
ShimClient shimClient;
|
||
|
shimClient.setAllowConnect(true);
|
||
|
|
||
|
byte connack[] = { 0x20, 0x02, 0x00, 0x00 };
|
||
|
shimClient.respond(connack,4);
|
||
|
|
||
|
PubSubClient client(server, 1883, callback, shimClient);
|
||
|
int rc = client.connect((char*)"client_test1");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
// max length should be allowed
|
||
|
// 0 1 2 3 4 5 6 7 8 9 0 1 2
|
||
|
rc = client.subscribe((char*)"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
// 0 1 2 3 4 5 6 7 8 9 0 1 2
|
||
|
rc = client.subscribe((char*)"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
|
||
|
IS_FALSE(rc);
|
||
|
|
||
|
IS_FALSE(shimClient.error());
|
||
|
|
||
|
END_IT
|
||
|
}
|
||
|
|
||
|
|
||
|
int test_unsubscribe() {
|
||
|
IT("unsubscribes");
|
||
|
ShimClient shimClient;
|
||
|
shimClient.setAllowConnect(true);
|
||
|
|
||
|
byte connack[] = { 0x20, 0x02, 0x00, 0x00 };
|
||
|
shimClient.respond(connack,4);
|
||
|
|
||
|
PubSubClient client(server, 1883, callback, shimClient);
|
||
|
int rc = client.connect((char*)"client_test1");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
byte unsubscribe[] = { 0xA2,0x9,0x0,0x2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63 };
|
||
|
shimClient.expect(unsubscribe,12);
|
||
|
byte unsuback[] = { 0xB0,0x2,0x0,0x2 };
|
||
|
shimClient.respond(unsuback,4);
|
||
|
|
||
|
rc = client.unsubscribe((char*)"topic");
|
||
|
IS_TRUE(rc);
|
||
|
|
||
|
IS_FALSE(shimClient.error());
|
||
|
|
||
|
END_IT
|
||
|
}
|
||
|
|
||
|
int test_unsubscribe_not_connected() {
|
||
|
IT("unsubscribe fails when not connected");
|
||
|
ShimClient shimClient;
|
||
|
|
||
|
PubSubClient client(server, 1883, callback, shimClient);
|
||
|
|
||
|
int rc = client.unsubscribe((char*)"topic");
|
||
|
IS_FALSE(rc);
|
||
|
|
||
|
IS_FALSE(shimClient.error());
|
||
|
|
||
|
END_IT
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
SUITE("Subscribe");
|
||
|
test_subscribe_no_qos();
|
||
|
test_subscribe_qos_1();
|
||
|
test_subscribe_not_connected();
|
||
|
test_subscribe_invalid_qos();
|
||
|
test_subscribe_too_long();
|
||
|
test_unsubscribe();
|
||
|
test_unsubscribe_not_connected();
|
||
|
FINISH
|
||
|
}
|