fixed tests and added testcase for user property serialization

This commit is contained in:
JanEggers
2019-04-15 15:37:15 +02:00
parent 9475ccd0d8
commit 03c61ad82c
5 changed files with 51 additions and 42 deletions
@@ -51,6 +51,11 @@ namespace MQTTnet.AspNetCore
public unsafe string ReadStringWithLengthPrefix()
{
var buffer = ReadSegmentWithLengthPrefix();
if (buffer.Length == 0)
{
return string.Empty;
}
fixed (byte* bytes = &buffer.GetPinnableReference())
{
var result = Encoding.UTF8.GetString(bytes, buffer.Length);
@@ -60,12 +60,11 @@ namespace MQTTnet.AspNetCore
public void Write(IMqttPacketWriter propertyWriter)
{
if (propertyWriter is SpanBasedMqttPacketWriter writer)
{
GrowIfNeeded(1);
}
if (propertyWriter == null) throw new ArgumentNullException(nameof(propertyWriter));
throw new InvalidOperationException($"{nameof(propertyWriter)} must be of type {typeof(SpanBasedMqttPacketWriter).Name}");
GrowIfNeeded(propertyWriter.Length);
Write(propertyWriter.GetBuffer(), 0, propertyWriter.Length);
Commit(propertyWriter.Length);
}
public void Write(byte[] payload, int start, int length)
@@ -89,28 +89,30 @@ namespace MQTTnet.Formatter
}
ProtocolVersion = protocolVersion;
_formatter = GetMqttPacketFormatter(protocolVersion, Writer);
}
public static IMqttPacketFormatter GetMqttPacketFormatter(MqttProtocolVersion protocolVersion, IMqttPacketWriter writer)
{
if (protocolVersion == MqttProtocolVersion.Unknown)
{
throw new InvalidOperationException("MQTT protocol version is invalid.");
}
switch (protocolVersion)
{
case MqttProtocolVersion.V500:
{
_formatter = new MqttV500PacketFormatter(Writer);
break;
return new MqttV500PacketFormatter(writer);
}
case MqttProtocolVersion.V311:
{
_formatter = new MqttV311PacketFormatter(Writer);
break;
return new MqttV311PacketFormatter(writer);
}
case MqttProtocolVersion.V310:
{
_formatter = new MqttV310PacketFormatter(Writer);
break;
return new MqttV310PacketFormatter(writer);
}
default:
{
throw new NotSupportedException();
@@ -154,6 +154,7 @@ namespace MQTTnet.Formatter
}
Write(writer._buffer, 0, writer.Length);
return;
}
throw new InvalidOperationException($"{nameof(propertyWriter)} must be of type {typeof(MqttPacketWriter).Name}");