aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2017-03-06 21:31:07 +0200
committerOskari Timperi <oskari.timperi@iki.fi>2017-03-06 21:31:07 +0200
commita062d934aef40829d9559a8ca83147ea4c44108e (patch)
tree6ee1f9eb3208bea65365e63d039ad27c40111c6f /test
parente9958e8a0f5aa5fbe0a4a03be42b8bf640add6f7 (diff)
downloadmqtt-a062d934aef40829d9559a8ca83147ea4c44108e.tar.gz
mqtt-a062d934aef40829d9559a8ca83147ea4c44108e.zip
Massive refactoring of the internals
Diffstat (limited to 'test')
-rw-r--r--test/interop/CMakeLists.txt3
-rw-r--r--test/interop/ping_test.c27
-rw-r--r--test/interop/testclient.c44
-rw-r--r--test/interop/testclient.h7
-rw-r--r--test/interop/unsubscribe_test.c31
-rw-r--r--test/interop/username_and_password_test.c30
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();
+}