From a7ad0720bcead87399faf983f492b1e02ef3e98d Mon Sep 17 00:00:00 2001 From: "selva.andre" Date: Mon, 16 Jul 2012 22:28:26 +0200 Subject: [PATCH] Added test for double subscription message to the same topic --- .../messaging/spi/impl/SimpleMessaging.java | 6 +++- .../spi/impl/SimpleMessagingTest.java | 33 ++++++++++++++++--- .../mqtt/moquette/server/MQTTHandlerTest.java | 6 ++++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java index 42ed999f..9cee1561 100644 --- a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java +++ b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java @@ -18,7 +18,11 @@ public class SimpleMessaging implements IMessaging { } public void subscribe(String clientId, String topic, QOSType qos) { - subscriptions.add(new Subscription(clientId, topic, qos)); + Subscription newSubscription = new Subscription(clientId, topic, qos); + if (subscriptions.contains(newSubscription)) { + return; + } + subscriptions.add(newSubscription); } protected List getSubscriptions() { diff --git a/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java index f48612ab..c94ca0ec 100644 --- a/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java +++ b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessagingTest.java @@ -1,10 +1,7 @@ package org.dna.mqtt.moquette.messaging.spi.impl; +import java.util.List; import org.dna.mqtt.moquette.proto.messages.AbstractMessage.QOSType; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; @@ -43,6 +40,32 @@ public class SimpleMessagingTest { messaging.subscribe(clientID, topic, QOSType.MOST_ONE); //Verify - assertTrue(messaging.getSubscriptions().contains(new Subscription(clientID, topic, QOSType.MOST_ONE))); + Subscription expectedSubscription = new Subscription(clientID, topic, QOSType.MOST_ONE); + assertTrue(messaging.getSubscriptions().contains(expectedSubscription)); + } + + @Test + public void testDoubleSubscribe() { + String clientID = "FAKE_123"; + String topic = "/news"; + SimpleMessaging messaging = new SimpleMessaging(); + messaging.subscribe(clientID, topic, QOSType.MOST_ONE); + + //Exercise + messaging.subscribe(clientID, topic, QOSType.MOST_ONE); + + //Verify + Subscription subscription = new Subscription(clientID, topic, QOSType.MOST_ONE); + assertEquals(1, countMatchingSubscriptions(messaging.getSubscriptions(), subscription)); + } + + private int countMatchingSubscriptions(List l, Subscription matchingSub) { + int count = 0; + for (Subscription s : l) { + if (s.equals(matchingSub)) { + count++; + } + } + return count; } } diff --git a/parser/src/test/java/org/dna/mqtt/moquette/server/MQTTHandlerTest.java b/parser/src/test/java/org/dna/mqtt/moquette/server/MQTTHandlerTest.java index 93b8ec68..ca872c95 100644 --- a/parser/src/test/java/org/dna/mqtt/moquette/server/MQTTHandlerTest.java +++ b/parser/src/test/java/org/dna/mqtt/moquette/server/MQTTHandlerTest.java @@ -109,5 +109,11 @@ public class MQTTHandlerTest { ArgumentCaptor argument = ArgumentCaptor.forClass(AbstractMessage.QOSType.class); verify(mockedMessaging).subscribe(eq("fakeID"), eq(topicName), argument.capture()); assertEquals(AbstractMessage.QOSType.EXACTLY_ONCE, argument.getValue()); + //TODO verify the message ACK and corresponding QoS!! } + +// @Test +// public void testHandleSubscribeMultipleTopics() { +// fail("TOBE implemented"); +// } }