Browse Source

added # filter topic handling

pull/3704/head
ShvaykaD 6 years ago
parent
commit
4babb07fd6
  1. 13
      common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/util/MqttTopicFilterFactory.java
  2. 11
      common/transport/mqtt/src/test/java/org/thingsboard/server/transport/mqtt/util/MqttTopicFilterFactoryTest.java

13
common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/util/MqttTopicFilterFactory.java

@ -34,10 +34,15 @@ public class MqttTopicFilterFactory {
}
return filters.computeIfAbsent(topicFilter, filter -> {
if (filter.contains("+") || filter.contains("#")) {
String regex = filter
.replace("\\", "\\\\")
.replace("+", "[^/]+")
.replace("/#", "($|/.*)");
String regex;
if (filter.equals("#")) {
regex = filter.replace("#", "^(?!/).+");
} else {
regex = filter
.replace("\\", "\\\\")
.replace("+", "[^/]+")
.replace("/#", "($|/.*)");
}
log.debug("Converting [{}] to [{}]", filter, regex);
return new RegexTopicFilter(regex);
} else {

11
common/transport/mqtt/src/test/java/org/thingsboard/server/transport/mqtt/util/MqttTopicFilterFactoryTest.java

@ -20,7 +20,6 @@ import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import javax.script.ScriptException;
import java.util.regex.Pattern;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@ -32,6 +31,9 @@ public class MqttTopicFilterFactoryTest {
private static String TEST_STR_2 = "Sensor/Temperature";
private static String TEST_STR_3 = "Sensor/Temperature2/House/48";
private static String TEST_STR_4 = String.format("%s%n%s", "/Sensor/Temperature", "/House/48");
private static String TEST_STR_5 = "/" + TEST_STR_1;
@Test
public void metadataCanBeUpdated() throws ScriptException {
MqttTopicFilter filter = MqttTopicFilterFactory.toFilter("Sensor/Temperature/House/+");
@ -51,6 +53,13 @@ public class MqttTopicFilterFactoryTest {
assertTrue(filter.filter(TEST_STR_1));
assertTrue(filter.filter(TEST_STR_2));
assertFalse(filter.filter(TEST_STR_3));
filter = MqttTopicFilterFactory.toFilter("#");
assertTrue(filter.filter(TEST_STR_1));
assertTrue(filter.filter(TEST_STR_2));
assertTrue(filter.filter(TEST_STR_3));
assertFalse(filter.filter(TEST_STR_4));
assertFalse(filter.filter(TEST_STR_5));
}
}

Loading…
Cancel
Save