From 8198f6d6beb3c8af3768236070089112c094b92e Mon Sep 17 00:00:00 2001 From: Oskari Timperi Date: Sun, 19 Feb 2017 16:03:56 +0200 Subject: Add MqttClientSubscribeMany() and make necessary API changes --- test/interop/overlapping_subscriptions_test.c | 5 ++-- test/interop/subscribe_failure_test.c | 2 +- test/interop/testclient.c | 41 +++++++++++++++++++++++++-- test/interop/testclient.h | 6 +++- 4 files changed, 48 insertions(+), 6 deletions(-) (limited to 'test') diff --git a/test/interop/overlapping_subscriptions_test.c b/test/interop/overlapping_subscriptions_test.c index c6e5da0..ec6f061 100644 --- a/test/interop/overlapping_subscriptions_test.c +++ b/test/interop/overlapping_subscriptions_test.c @@ -7,11 +7,12 @@ TEST overlapping_subscriptions_test() { TestClient *client; int count; + const char *mywildtopics[] = { wildtopics[6], wildtopics[0] }; + int qos[] = { 2, 1 }; client = TestClientNew("clienta"); ASSERT(TestClientConnect(client, "localhost", 1883, 60, 1)); - ASSERT(TestClientSubscribe(client, wildtopics[6], 2)); - ASSERT(TestClientSubscribe(client, wildtopics[0], 1)); + ASSERT(TestClientSubscribeMany(client, mywildtopics, qos, 2)); ASSERT(TestClientPublish(client, 2, 0, topics[3], "overlapping topic filters")); ASSERT(TestClientWait(client, 1000)); diff --git a/test/interop/subscribe_failure_test.c b/test/interop/subscribe_failure_test.c index 84d3ebc..07a0d1b 100644 --- a/test/interop/subscribe_failure_test.c +++ b/test/interop/subscribe_failure_test.c @@ -10,7 +10,7 @@ TEST subscribe_failure_test() client = TestClientNew("clienta"); ASSERT(TestClientConnect(client, "localhost", 1883, 60, 1)); ASSERT_FALSE(TestClientSubscribe(client, nosubscribe_topics[0], 2)); - ASSERT_EQ(MqttSubscriptionFailure, client->subStatus); + ASSERT_EQ(MqttSubscriptionFailure, client->subStatus[0]); TestClientDisconnect(client); TestClientFree(client); diff --git a/test/interop/testclient.c b/test/interop/testclient.c index c27945d..8d616f6 100644 --- a/test/interop/testclient.c +++ b/test/interop/testclient.c @@ -14,11 +14,12 @@ static void TestClientOnConnect(MqttClient *client, } static void TestClientOnSubscribe(MqttClient *client, int id, + const char *filter, MqttSubscriptionStatus status) { TestClient *testClient = (TestClient *) MqttClientGetUserData(client); testClient->subId = id; - testClient->subStatus = status; + testClient->subStatus[testClient->subCount++] = status; } static void TestClientOnPublish(MqttClient *client, int id) @@ -132,6 +133,7 @@ int TestClientSubscribe(TestClient *client, const char *topicFilter, int qos) int id = MqttClientSubscribe(client->client, topicFilter, qos); client->subId = -1; + client->subCount = 0; while (MqttClientRunOnce(client->client, -1) != -1) { @@ -147,7 +149,42 @@ int TestClientSubscribe(TestClient *client, const char *topicFilter, int qos) } } - return client->subStatus != MqttSubscriptionFailure; + return client->subStatus[0] != MqttSubscriptionFailure; +} + +int TestClientSubscribeMany(TestClient *client, const char **topicFilter, + int *qos, size_t count) +{ + int id = MqttClientSubscribeMany(client->client, topicFilter, qos, count); + int fail = 0, i; + + client->subId = -1; + client->subCount = 0; + + while (MqttClientRunOnce(client->client, -1) != -1) + { + if (client->subId != -1) + { + if (client->subId != id) + { + printf( + "WARNING: subscription id mismatch: expected %d, got %d\n", + id, client->subId); + } + break; + } + } + + for (i = 0; i < client->subCount; ++i) + { + if (client->subStatus[i] == MqttSubscriptionFailure) + { + fail = 1; + break; + } + } + + return !fail; } int TestClientPublish(TestClient *client, int qos, int retain, diff --git a/test/interop/testclient.h b/test/interop/testclient.h index 70805c6..2aa229b 100644 --- a/test/interop/testclient.h +++ b/test/interop/testclient.h @@ -29,7 +29,8 @@ struct TestClient /* OnSubscribe */ int subId; - MqttSubscriptionStatus subStatus; + MqttSubscriptionStatus subStatus[16]; + int subCount; /* OnPublish */ int pubId; @@ -54,6 +55,9 @@ void TestClientDisconnect(TestClient *client); int TestClientSubscribe(TestClient *client, const char *topicFilter, int qos); +int TestClientSubscribeMany(TestClient *client, const char **topicFilter, + int *qos, size_t count); + int TestClientPublish(TestClient *client, int qos, int retain, const char *topic, const char *message); -- cgit v1.2.3