diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2017-03-06 21:31:07 +0200 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2017-03-06 21:31:07 +0200 |
| commit | a062d934aef40829d9559a8ca83147ea4c44108e (patch) | |
| tree | 6ee1f9eb3208bea65365e63d039ad27c40111c6f /test | |
| parent | e9958e8a0f5aa5fbe0a4a03be42b8bf640add6f7 (diff) | |
| download | mqtt-a062d934aef40829d9559a8ca83147ea4c44108e.tar.gz mqtt-a062d934aef40829d9559a8ca83147ea4c44108e.zip | |
Massive refactoring of the internals
Diffstat (limited to 'test')
| -rw-r--r-- | test/interop/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | test/interop/ping_test.c | 27 | ||||
| -rw-r--r-- | test/interop/testclient.c | 44 | ||||
| -rw-r--r-- | test/interop/testclient.h | 7 | ||||
| -rw-r--r-- | test/interop/unsubscribe_test.c | 31 | ||||
| -rw-r--r-- | test/interop/username_and_password_test.c | 30 |
6 files changed, 138 insertions, 4 deletions
diff --git a/test/interop/CMakeLists.txt b/test/interop/CMakeLists.txt index e907776..d4b43d7 100644 --- a/test/interop/CMakeLists.txt +++ b/test/interop/CMakeLists.txt @@ -17,3 +17,6 @@ ADD_INTEROP_TEST(keepalive_test) ADD_INTEROP_TEST(redelivery_on_reconnect_test) ADD_INTEROP_TEST(subscribe_failure_test) ADD_INTEROP_TEST(dollar_topics_test) +ADD_INTEROP_TEST(username_and_password_test) +ADD_INTEROP_TEST(ping_test) +ADD_INTEROP_TEST(unsubscribe_test) diff --git a/test/interop/ping_test.c b/test/interop/ping_test.c new file mode 100644 index 0000000..6d699da --- /dev/null +++ b/test/interop/ping_test.c @@ -0,0 +1,27 @@ +#include "greatest.h" +#include "testclient.h" +#include "cleanup.c" +#include "topics.c" + +TEST ping_test() +{ + TestClient *client; + + client = TestClientNew("clienta"); + ASSERT(TestClientConnect(client, "localhost", 1883, 1, 1)); + ASSERT(TestClientWait(client, 5000)); + TestClientDisconnect(client); + TestClientFree(client); + + PASS(); +} + +GREATEST_MAIN_DEFS(); + +int main(int argc, char **argv) +{ + GREATEST_MAIN_BEGIN(); + cleanup(); + RUN_TEST(ping_test); + GREATEST_MAIN_END(); +} diff --git a/test/interop/testclient.c b/test/interop/testclient.c index 8d616f6..09782b2 100644 --- a/test/interop/testclient.c +++ b/test/interop/testclient.c @@ -14,12 +14,15 @@ static void TestClientOnConnect(MqttClient *client, } static void TestClientOnSubscribe(MqttClient *client, int id, - const char *filter, - MqttSubscriptionStatus status) + int *qos, int count) { TestClient *testClient = (TestClient *) MqttClientGetUserData(client); testClient->subId = id; - testClient->subStatus[testClient->subCount++] = status; + for (testClient->subCount = 0; testClient->subCount < count; + ++testClient->subCount) + { + testClient->subStatus[testClient->subCount] = qos[testClient->subCount]; + } } static void TestClientOnPublish(MqttClient *client, int id) @@ -37,6 +40,12 @@ static void TestClientOnMessage(MqttClient *client, const char *topic, SIMPLEQ_INSERT_TAIL(&testClient->messages, msg, chain); } +static void TestClientOnUnsubscribe(MqttClient *client, int id) +{ + TestClient *testClient = (TestClient *) MqttClientGetUserData(client); + testClient->unsubId = id; +} + Message *MessageNew(const char *topic, const void *data, size_t size, int qos, int retain) { @@ -69,6 +78,8 @@ TestClient *TestClientNew(const char *clientId) { TestClient *client = calloc(1, sizeof(*client)); + client->clientId = clientId; + client->client = MqttClientNew(clientId); MqttClientSetUserData(client->client, client); @@ -79,6 +90,7 @@ TestClient *TestClientNew(const char *clientId) MqttClientSetOnSubscribe(client->client, TestClientOnSubscribe); MqttClientSetOnPublish(client->client, TestClientOnPublish); MqttClientSetOnMessage(client->client, TestClientOnMessage); + MqttClientSetOnUnsubscribe(client->client, TestClientOnUnsubscribe); SIMPLEQ_INIT(&client->messages); @@ -235,8 +247,8 @@ int TestClientWait(TestClient *client, int timeout) printf("TestClientWait timeout:%d rc:%d\n", timeout, rc); int64_t now = MqttGetCurrentTime(); int64_t elapsed = now - start; - timeout -= elapsed; printf("TestClientWait elapsed:%d\n", (int) elapsed); + timeout = timeout - elapsed; if (timeout <= 0) { break; @@ -245,3 +257,27 @@ int TestClientWait(TestClient *client, int timeout) return rc != -1; } + +int TestClientUnsubscribe(TestClient *client, const char *topic) +{ + int id = MqttClientUnsubscribe(client->client, topic); + int rc; + + client->unsubId = -1; + + while ((rc = MqttClientRunOnce(client->client, -1)) != -1) + { + if (client->unsubId != -1) + { + if (client->unsubId != id) + { + printf( + "WARNING: unsubscribe id mismatch: expected %d, got %d\n", + id, client->unsubId); + } + break; + } + } + + return rc != -1; +} diff --git a/test/interop/testclient.h b/test/interop/testclient.h index 2aa229b..3665f5e 100644 --- a/test/interop/testclient.h +++ b/test/interop/testclient.h @@ -21,6 +21,8 @@ typedef struct TestClient TestClient; struct TestClient { + const char *clientId; + MqttClient *client; /* OnConnect */ @@ -37,6 +39,9 @@ struct TestClient /* OnMessage */ SIMPLEQ_HEAD(messages, Message) messages; + + /* OnUnsubscribe */ + int unsubId; }; Message *MessageNew(const char *topic, const void *data, size_t size, @@ -65,4 +70,6 @@ int TestClientMessageCount(TestClient *client); int TestClientWait(TestClient *client, int timeout); +int TestClientUnsubscribe(TestClient *client, const char *topic); + #endif diff --git a/test/interop/unsubscribe_test.c b/test/interop/unsubscribe_test.c new file mode 100644 index 0000000..a7e4668 --- /dev/null +++ b/test/interop/unsubscribe_test.c @@ -0,0 +1,31 @@ +#include "greatest.h" +#include "testclient.h" +#include "cleanup.c" +#include "topics.c" + +TEST unsubscribe_test() +{ + TestClient *client; + + client = TestClientNew("clienta"); + ASSERT(TestClientConnect(client, "localhost", 1883, 60, 1)); + ASSERT(TestClientSubscribe(client, topics[0], 2)); + ASSERT(TestClientPublish(client, 2, 0, topics[0], "msg")); + ASSERT(TestClientUnsubscribe(client, topics[0])); + ASSERT(TestClientPublish(client, 2, 0, topics[0], "msg")); + TestClientDisconnect(client); + ASSERT_EQ(1, TestClientMessageCount(client)); + TestClientFree(client); + + PASS(); +} + +GREATEST_MAIN_DEFS(); + +int main(int argc, char **argv) +{ + GREATEST_MAIN_BEGIN(); + cleanup(); + RUN_TEST(unsubscribe_test); + GREATEST_MAIN_END(); +} diff --git a/test/interop/username_and_password_test.c b/test/interop/username_and_password_test.c new file mode 100644 index 0000000..6e0eaab --- /dev/null +++ b/test/interop/username_and_password_test.c @@ -0,0 +1,30 @@ +#include "greatest.h" +#include "testclient.h" +#include "cleanup.c" +#include "topics.c" + +TEST username_and_password_test() +{ + TestClient *client; + + client = TestClientNew("clienta"); + ASSERT_EQ(0, MqttClientSetAuth(client->client, "myusername", NULL)); + ASSERT(TestClientConnect(client, "localhost", 1883, 60, 1)); + TestClientDisconnect(client); + ASSERT_EQ(0, MqttClientSetAuth(client->client, "myusername", "mypassword")); + ASSERT(TestClientConnect(client, "localhost", 1883, 60, 1)); + TestClientDisconnect(client); + TestClientFree(client); + + PASS(); +} + +GREATEST_MAIN_DEFS(); + +int main(int argc, char **argv) +{ + GREATEST_MAIN_BEGIN(); + cleanup(); + RUN_TEST(username_and_password_test); + GREATEST_MAIN_END(); +} |
