From f8d75bf004308a14b5270bff98532a2878b670ec Mon Sep 17 00:00:00 2001 From: "selva.andre" Date: Mon, 6 Aug 2012 22:53:56 +0200 Subject: [PATCH] Added topic + sign parsing for single level wildcard --- .../spi/impl/SubscriptionsStore.java | 6 +++++- .../spi/impl/SubscriptionsStoreTest.java | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java index 02a30768..fcf68e4c 100644 --- a/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java +++ b/parser/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStore.java @@ -96,7 +96,11 @@ public class SubscriptionsStore { res.add(Token.MULTI); } else if (s.contains("#")) { throw new ParseException("Bad format of topic, invalid subtopic name: " + s, i); - }else { + } else if (s.equals("+")) { + res.add(Token.SINGLE); + } else if (s.contains("+")) { + throw new ParseException("Bad format of topic, invalid subtopic name: " + s, i); + } else { res.add(new Token(s)); } } diff --git a/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java index 430abfbf..d06b2428 100644 --- a/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java +++ b/parser/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/SubscriptionsStoreTest.java @@ -59,6 +59,25 @@ public class SubscriptionsStoreTest { store.splitTopic("finance#"); } + + @Test + public void testSplitTopicSingleValid() throws ParseException { + List tokens = store.splitTopic("finance/stock/+"); + assertEqualsSeq(asArray("finance", "stock", Token.SINGLE), tokens); + + tokens = store.splitTopic("+"); + assertEqualsSeq(asArray(Token.SINGLE), tokens); + + tokens = store.splitTopic("finance/+/ibm"); + assertEqualsSeq(asArray("finance", Token.SINGLE, "ibm"), tokens); + } + + @Test(expected = ParseException.class) + public void testSplitTopicSingleNotAferSeparatorNotValid() throws ParseException { + store.splitTopic("finance+"); + } + + private static Token[] asArray(Object... l) { Token[] tokens = new Token[l.length]; for (int i = 0; i < l.length; i++) {