mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-26 08:02:59 +08:00
fixed dup flag serialization and added roundtrip tests
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
{
|
{
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return "PubAck";
|
return $"PubAck [PacketIdentifier={PacketIdentifier}]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ namespace MQTTnet.Serializer
|
|||||||
|
|
||||||
var retain = (receivedMqttPacket.FixedHeader & 0x1) > 0;
|
var retain = (receivedMqttPacket.FixedHeader & 0x1) > 0;
|
||||||
var qualityOfServiceLevel = (MqttQualityOfServiceLevel)(receivedMqttPacket.FixedHeader >> 1 & 0x3);
|
var qualityOfServiceLevel = (MqttQualityOfServiceLevel)(receivedMqttPacket.FixedHeader >> 1 & 0x3);
|
||||||
var dup = (receivedMqttPacket.FixedHeader & 0x3) > 0;
|
var dup = (receivedMqttPacket.FixedHeader & 0x8) > 0;
|
||||||
|
|
||||||
var topic = receivedMqttPacket.Body.ReadStringWithLengthPrefix();
|
var topic = receivedMqttPacket.Body.ReadStringWithLengthPrefix();
|
||||||
|
|
||||||
|
|||||||
@@ -199,6 +199,64 @@ namespace MQTTnet.Core.Tests
|
|||||||
DeserializeAndCompare(p, "Ow4ABUEvQi9DAHtIRUxMTw==");
|
DeserializeAndCompare(p, "Ow4ABUEvQi9DAHtIRUxMTw==");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void DeserializeV311_MqttPublishPacket_Qos1()
|
||||||
|
{
|
||||||
|
var p = new MqttPublishPacket
|
||||||
|
{
|
||||||
|
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce,
|
||||||
|
};
|
||||||
|
|
||||||
|
var p2 = Roundtrip(p);
|
||||||
|
|
||||||
|
Assert.AreEqual(p.QualityOfServiceLevel, p2.QualityOfServiceLevel);
|
||||||
|
Assert.AreEqual(p.Dup, p2.Dup);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void DeserializeV311_MqttPublishPacket_Qos2()
|
||||||
|
{
|
||||||
|
var p = new MqttPublishPacket
|
||||||
|
{
|
||||||
|
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce,
|
||||||
|
PacketIdentifier = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
var p2 = Roundtrip(p);
|
||||||
|
|
||||||
|
Assert.AreEqual(p.QualityOfServiceLevel, p2.QualityOfServiceLevel);
|
||||||
|
Assert.AreEqual(p.Dup, p2.Dup);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void DeserializeV311_MqttPublishPacket_Qos3()
|
||||||
|
{
|
||||||
|
var p = new MqttPublishPacket
|
||||||
|
{
|
||||||
|
QualityOfServiceLevel = MqttQualityOfServiceLevel.ExactlyOnce,
|
||||||
|
PacketIdentifier = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
var p2 = Roundtrip(p);
|
||||||
|
|
||||||
|
Assert.AreEqual(p.QualityOfServiceLevel, p2.QualityOfServiceLevel);
|
||||||
|
Assert.AreEqual(p.Dup, p2.Dup);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void DeserializeV311_MqttPublishPacket_DupFalse()
|
||||||
|
{
|
||||||
|
var p = new MqttPublishPacket
|
||||||
|
{
|
||||||
|
Dup = false,
|
||||||
|
};
|
||||||
|
|
||||||
|
var p2 = Roundtrip(p);
|
||||||
|
|
||||||
|
Assert.AreEqual(p.Dup, p2.Dup);
|
||||||
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void SerializeV311_MqttPubAckPacket()
|
public void SerializeV311_MqttPubAckPacket()
|
||||||
{
|
{
|
||||||
@@ -430,6 +488,25 @@ namespace MQTTnet.Core.Tests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static T Roundtrip<T>(T packet, MqttProtocolVersion protocolVersion = MqttProtocolVersion.V311)
|
||||||
|
where T : MqttBasePacket
|
||||||
|
{
|
||||||
|
var serializer = new MqttPacketSerializer { ProtocolVersion = protocolVersion };
|
||||||
|
|
||||||
|
var buffer1 = serializer.Serialize(packet);
|
||||||
|
|
||||||
|
using (var headerStream = new MemoryStream(Join(buffer1)))
|
||||||
|
{
|
||||||
|
var channel = new TestMqttChannel(headerStream);
|
||||||
|
var header = MqttPacketReader.ReadFixedHeaderAsync(channel, CancellationToken.None).GetAwaiter().GetResult();
|
||||||
|
|
||||||
|
using (var bodyStream = new MemoryStream(Join(buffer1), (int)headerStream.Position, header.RemainingLength))
|
||||||
|
{
|
||||||
|
return (T)serializer.Deserialize(new ReceivedMqttPacket(header.Flags, new MqttPacketBodyReader(bodyStream.ToArray(), 0)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static byte[] Join(params ArraySegment<byte>[] chunks)
|
private static byte[] Join(params ArraySegment<byte>[] chunks)
|
||||||
{
|
{
|
||||||
var buffer = new MemoryStream();
|
var buffer = new MemoryStream();
|
||||||
|
|||||||
Reference in New Issue
Block a user