mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 00:15:15 +08:00
Add topic filter tests from MQTT spec
This commit is contained in:
@@ -129,7 +129,7 @@ namespace MQTTnet.Adapter
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
if (header.BodyLength == 0)
|
||||
{
|
||||
return new ReceivedMqttPacket(header, new MemoryStream(new byte[0], false));
|
||||
|
||||
@@ -60,7 +60,33 @@ namespace MQTTnet.Core.Tests
|
||||
CompareAndAssert("A/B/C/D", "#", true);
|
||||
}
|
||||
|
||||
private void CompareAndAssert(string topic, string filter, bool expectedResult)
|
||||
[TestMethod]
|
||||
public void TopicFilterComparer_MultiLevel_Sport()
|
||||
{
|
||||
// Tests from official MQTT spec (4.7.1.2 Multi-level wildcard)
|
||||
CompareAndAssert("sport/tennis/player1", "sport/tennis/player1/#", true);
|
||||
CompareAndAssert("sport/tennis/player1/ranking", "sport/tennis/player1/#", true);
|
||||
CompareAndAssert("sport/tennis/player1/score/wimbledon", "sport/tennis/player1/#", true);
|
||||
|
||||
CompareAndAssert("sport/tennis/player1", "sport/tennis/+", true);
|
||||
CompareAndAssert("sport/tennis/player2", "sport/tennis/+", true);
|
||||
CompareAndAssert("sport/tennis/player1/ranking", "sport/tennis/+", false);
|
||||
|
||||
CompareAndAssert("sport", "sport/#", true);
|
||||
CompareAndAssert("sport", "sport/+", false);
|
||||
CompareAndAssert("sport/", "sport/+", true);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TopicFilterComparer_SingleLevel_Finance()
|
||||
{
|
||||
// Tests from official MQTT spec (4.7.1.3 Single level wildcard)
|
||||
CompareAndAssert("/finance", "+/+", true);
|
||||
CompareAndAssert("/finance", "/+", true);
|
||||
CompareAndAssert("/finance", "+", false);
|
||||
}
|
||||
|
||||
private static void CompareAndAssert(string topic, string filter, bool expectedResult)
|
||||
{
|
||||
Assert.AreEqual(expectedResult, MqttTopicFilterComparer.IsMatch(topic, filter));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user