Skip to content

Commit e4306dc

Browse files
committed
Merge branch 'develop'
2 parents 33485e2 + f1c3f0d commit e4306dc

File tree

3 files changed

+90
-1
lines changed

3 files changed

+90
-1
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
<modelVersion>4.0.0</modelVersion>
1717
<artifactId>mqtt-client</artifactId>
18-
<version>0.1.9</version>
18+
<version>0.1.10</version>
1919
<name>MqttClient</name>
2020
<packaging>jar</packaging>
2121

src/main/java/info/unterrainer/commons/mqttclient/MqttClient.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ public void send(final String topic, final String message, final MqttQos qos, fi
112112
}
113113
}
114114

115+
public static boolean topicsMatch(String receivedTopic, String wildCardTopic) {
116+
return receivedTopic.matches(wildCardTopic.replaceAll("\\+", "[^/]+").replaceAll("#", ".+"));
117+
}
118+
115119
public void subscribe(final String topicFilter, final IMqttMessageListener listener) {
116120
try {
117121
client.subscribe(topicFilter, listener);
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package info.unterrainer.commons.mqttclient;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
public class MqttClientMatcherTests {
8+
9+
@Test
10+
public void fullMatchWorks() {
11+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11/sensor:0/relay",
12+
"shellies/192-168-16-11/sensor:0/relay");
13+
assertThat(result).isTrue();
14+
}
15+
16+
@Test
17+
public void fullMismatchWorks() {
18+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11/sensor:0/relay",
19+
"shellies/192-168-16-11/sensor:1/relay");
20+
assertThat(result).isFalse();
21+
}
22+
23+
@Test
24+
public void wildcardAllMatchWorks() {
25+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11/sensor:0/relay", "shellies/192-168-16-11/#");
26+
assertThat(result).isTrue();
27+
}
28+
29+
@Test
30+
public void wildcardAllExactMismatchWorks() {
31+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11", "shellies/192-168-16-11/#");
32+
assertThat(result).isFalse();
33+
}
34+
35+
@Test
36+
public void wildcardAllMismatchWorks() {
37+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-9/sensor:0/relay", "shellies/192-168-16-11/#");
38+
assertThat(result).isFalse();
39+
}
40+
41+
@Test
42+
public void wildcardLevelMatchWorks() {
43+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11/sensor:0/relay",
44+
"shellies/192-168-16-11/+/relay");
45+
assertThat(result).isTrue();
46+
}
47+
48+
@Test
49+
public void wildcardLevelExactMismatchWorks() {
50+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11", "shellies/192-168-16-11/+");
51+
assertThat(result).isFalse();
52+
}
53+
54+
@Test
55+
public void wildcardLevelPostMismatchWorks() {
56+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11/sensor:0/relay",
57+
"shellies/192-168-16-11/+/blah");
58+
assertThat(result).isFalse();
59+
}
60+
61+
@Test
62+
public void wildcardLevelPreMismatchWorks() {
63+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-9/sensor:0/relay",
64+
"shellies/192-168-16-11/+/relay");
65+
assertThat(result).isFalse();
66+
}
67+
68+
@Test
69+
public void wildcardBothMatchWorks() {
70+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11/sensor:0/relay", "shellies/+/sensor:0/#");
71+
assertThat(result).isTrue();
72+
}
73+
74+
@Test
75+
public void wildcardBothMismatchPreWorks() {
76+
boolean result = MqttClient.topicsMatch("ddd/192-168-16-11/sensor:0/relay", "shellies/+/sensor:0/#");
77+
assertThat(result).isFalse();
78+
}
79+
80+
@Test
81+
public void wildcardBothMismatchMiddleWorks() {
82+
boolean result = MqttClient.topicsMatch("shellies/192-168-16-11/sensor/relay", "shellies/+/sensor:0/#");
83+
assertThat(result).isFalse();
84+
}
85+
}

0 commit comments

Comments
 (0)