added tests

This commit is contained in:
JanEggers
2019-04-15 14:09:22 +02:00
committed by JanEggers
parent 888e1797d7
commit 149d01e173
3 changed files with 29 additions and 19 deletions
@@ -24,7 +24,6 @@ namespace MQTTnet.AspNetCore
public byte ReadByte() public byte ReadByte()
{ {
ValidateReceiveBuffer(1);
return _buffer.Span[_offset++]; return _buffer.Span[_offset++];
} }
@@ -35,9 +34,7 @@ namespace MQTTnet.AspNetCore
public ushort ReadUInt16() public ushort ReadUInt16()
{ {
ValidateReceiveBuffer(2); var result = BinaryPrimitives.ReadUInt16BigEndian(_buffer.Span.Slice(_offset));
var result = BinaryPrimitives.ReadUInt16BigEndian(_buffer.Span);
_offset += 2; _offset += 2;
return result; return result;
} }
@@ -49,23 +46,14 @@ namespace MQTTnet.AspNetCore
private ReadOnlySpan<byte> ReadSegmentWithLengthPrefix() private ReadOnlySpan<byte> ReadSegmentWithLengthPrefix()
{ {
var length = ReadUInt16(); var span = _buffer.Span;
var length = BinaryPrimitives.ReadUInt16BigEndian(span.Slice(_offset));
ValidateReceiveBuffer(length); var result = span.Slice(_offset+2, length);
_offset += 2 + length;
var result = _buffer.Slice(_offset, length).Span;
_offset += length;
return result; return result;
} }
private void ValidateReceiveBuffer(ushort length)
{
if (_buffer.Length < _offset + length)
{
throw new ArgumentOutOfRangeException(nameof(_buffer), $"expected at least {_offset + length} bytes but there are only {_buffer.Length} bytes");
}
}
public unsafe string ReadStringWithLengthPrefix() public unsafe string ReadStringWithLengthPrefix()
{ {
var buffer = ReadSegmentWithLengthPrefix(); var buffer = ReadSegmentWithLengthPrefix();
@@ -0,0 +1,17 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MQTTnet.Core.Tests;
using MQTTnet.Serializer;
namespace MQTTnet.AspNetCore.Tests
{
[TestClass]
public class MqttPacketSerializerTestsWithSpanBasedReader : MqttPacketSerializerTests
{
protected override IPacketBodyReader ReaderFactory(byte[] data)
{
var result = new SpanBasedMqttPacketBodyReader();
result.SetBuffer(data);
return result;
}
}
}
@@ -528,7 +528,12 @@ namespace MQTTnet.Tests
Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(Join(data))); Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(Join(data)));
} }
private static void DeserializeAndCompare(MqttBasePacket packet, string expectedBase64Value, MqttProtocolVersion protocolVersion = MqttProtocolVersion.V311) protected virtual IMqttPacketBodyReader ReaderFactory(byte[] data)
{
return new MqttPacketBodyReader(data, 0, data.Length);
}
private void DeserializeAndCompare(MqttBasePacket packet, string expectedBase64Value, MqttProtocolVersion protocolVersion = MqttProtocolVersion.V311)
{ {
IMqttPacketFormatter serializer; IMqttPacketFormatter serializer;
if (protocolVersion == MqttProtocolVersion.V311) if (protocolVersion == MqttProtocolVersion.V311)