Add more handling options to interceptor contexts.

This commit is contained in:
Christian
2021-10-26 22:00:47 +02:00
parent 131afc6ff2
commit 905306c312
55 changed files with 943 additions and 509 deletions
@@ -15,7 +15,7 @@ namespace MQTTnet.AspNetCore.Tests
{
var serializer = new MqttPacketFormatterAdapter(MqttProtocolVersion.V311);
var buffer = serializer.Encode(new MqttPublishPacket() {Topic = "a", Payload = new byte[5]});
var buffer = serializer.Encode(new MqttPublishPacket {Topic = "a", Payload = new byte[5]}).ToArray();
var sequence = new ReadOnlySequence<byte>(buffer.Array, buffer.Offset, buffer.Count);
@@ -28,7 +28,7 @@ namespace MQTTnet.Benchmarks
var serializer = new MqttPacketFormatterAdapter(MqttProtocolVersion.V311);
var serializedPacket = Join(serializer.Encode(_packet));
var serializedPacket = Join(serializer.Encode(_packet).ToArray());
_iterations = 10000;
@@ -31,7 +31,7 @@ namespace MQTTnet.Benchmarks
};
_serializer = new MqttV311PacketFormatter(new MqttPacketWriter());
_serializedPacket = _serializer.Encode(_packet);
_serializedPacket = _serializer.Encode(_packet).ToArray();
}
[Benchmark]
@@ -84,7 +84,7 @@ namespace MQTTnet.Tests.Client
await lowLevelClient.DisconnectAsync(CancellationToken.None).ConfigureAwait(false);
Assert.IsNotNull(receivedPacket);
Assert.AreEqual(MqttSubscribeReturnCode.SuccessMaximumQoS0, receivedPacket.ReturnCodes[0]);
Assert.AreEqual(MqttSubscribeReasonCode.GrantedQoS0, receivedPacket.ReasonCodes[0]);
}
}
@@ -36,18 +36,36 @@ namespace MQTTnet.Tests.Mockups
set => Implementation.ConnectedHandler = value;
}
public event Func<MqttClientConnectedEventArgs, Task> ConnectedAsync
{
add => Implementation.ConnectedAsync += value;
remove => Implementation.ConnectedAsync -= value;
}
public IMqttClientDisconnectedHandler DisconnectedHandler
{
get => Implementation.DisconnectedHandler;
set => Implementation.DisconnectedHandler = value;
}
public event Func<MqttClientDisconnectedEventArgs, Task> DisconnectedAsync
{
add => Implementation.DisconnectedAsync += value;
remove => Implementation.DisconnectedAsync -= value;
}
public IMqttApplicationMessageReceivedHandler ApplicationMessageReceivedHandler
{
get => Implementation.ApplicationMessageReceivedHandler;
set => Implementation.ApplicationMessageReceivedHandler = value;
}
public event Func<MqttApplicationMessageReceivedEventArgs, Task> ApplicationMessageReceivedAsync
{
add => Implementation.ApplicationMessageReceivedAsync += value;
remove => Implementation.ApplicationMessageReceivedAsync -= value;
}
public Task<MqttClientConnectResult> ConnectAsync(IMqttClientOptions options, CancellationToken cancellationToken)
{
if (TestContext != null)
@@ -69,6 +69,12 @@ namespace MQTTnet.Tests.Mockups
set => Implementation.ApplicationMessageReceivedHandler = value;
}
public event Func<MqttApplicationMessageReceivedEventArgs, Task> ApplicationMessageReceivedAsync
{
add => Implementation.ApplicationMessageReceivedAsync += value;
remove => Implementation.ApplicationMessageReceivedAsync -= value;
}
public Task ClearRetainedApplicationMessagesAsync()
{
return Implementation.ClearRetainedApplicationMessagesAsync();
@@ -513,10 +513,10 @@ namespace MQTTnet.Tests
PacketIdentifier = 123
};
p.ReturnCodes.Add(MqttSubscribeReturnCode.SuccessMaximumQoS0);
p.ReturnCodes.Add(MqttSubscribeReturnCode.SuccessMaximumQoS1);
p.ReturnCodes.Add(MqttSubscribeReturnCode.SuccessMaximumQoS2);
p.ReturnCodes.Add(MqttSubscribeReturnCode.Failure);
p.ReasonCodes.Add(MqttSubscribeReasonCode.GrantedQoS0);
p.ReasonCodes.Add(MqttSubscribeReasonCode.GrantedQoS1);
p.ReasonCodes.Add(MqttSubscribeReasonCode.GrantedQoS2);
p.ReasonCodes.Add(MqttSubscribeReasonCode.UnspecifiedError);
SerializeAndCompare(p, "kAYAewABAoA=");
}
@@ -529,10 +529,10 @@ namespace MQTTnet.Tests
PacketIdentifier = 123
};
p.ReturnCodes.Add(MqttSubscribeReturnCode.SuccessMaximumQoS0);
p.ReturnCodes.Add(MqttSubscribeReturnCode.SuccessMaximumQoS1);
p.ReturnCodes.Add(MqttSubscribeReturnCode.SuccessMaximumQoS2);
p.ReturnCodes.Add(MqttSubscribeReturnCode.Failure);
p.ReasonCodes.Add(MqttSubscribeReasonCode.GrantedQoS0);
p.ReasonCodes.Add(MqttSubscribeReasonCode.GrantedQoS1);
p.ReasonCodes.Add(MqttSubscribeReasonCode.GrantedQoS2);
p.ReasonCodes.Add(MqttSubscribeReasonCode.UnspecifiedError);
DeserializeAndCompare(p, "kAYAewABAoA=");
}
@@ -596,7 +596,7 @@ namespace MQTTnet.Tests
byte[] Serialize(MqttBasePacket packet, MqttProtocolVersion protocolVersion)
{
return MqttPacketFormatterAdapter.GetMqttPacketFormatter(protocolVersion, WriterFactory()).Encode(packet).ToArray();
return MqttPacketFormatterAdapter.GetMqttPacketFormatter(protocolVersion, WriterFactory()).Encode(packet).ToArray().ToArray();
}
protected virtual IMqttPacketWriter WriterFactory()
@@ -616,7 +616,7 @@ namespace MQTTnet.Tests
var serializer = MqttPacketFormatterAdapter.GetMqttPacketFormatter(protocolVersion, writer);
var buffer1 = serializer.Encode(packet);
using (var headerStream = new MemoryStream(buffer1.ToArray()))
using (var headerStream = new MemoryStream(buffer1.ToArray().ToArray()))
{
var channel = new TestMqttChannel(headerStream);
var adapter = new MqttChannelAdapter(channel, new MqttPacketFormatterAdapter(protocolVersion, writer), null, new MqttNetEventLogger());
@@ -624,20 +624,7 @@ namespace MQTTnet.Tests
var buffer2 = serializer.Encode(receivedPacket);
Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(buffer2.ToArray()));
//adapter.ReceivePacketAsync(CancellationToken.None);
//var fixedHeader = new byte[2];
//var header = new MqttPacketReader(channel).ReadFixedHeaderAsync(fixedHeader, CancellationToken.None).GetAwaiter().GetResult().FixedHeader;
//using (var bodyStream = new MemoryStream(Join(buffer1), (int)headerStream.Position, header.RemainingLength))
//{
// var reader = ReaderFactory(bodyStream.ToArray());
// var deserializedPacket = serializer.Decode(new ReceivedMqttPacket(header.Flags, reader, 0));
// var buffer2 = serializer.Encode(deserializedPacket);
// Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(Join(buffer2)));
//}
Assert.AreEqual(expectedBase64Value, Convert.ToBase64String(buffer2.ToArray().ToArray()));
}
}
@@ -648,26 +635,9 @@ namespace MQTTnet.Tests
var serializer = MqttPacketFormatterAdapter.GetMqttPacketFormatter(protocolVersion, writer);
var buffer = serializer.Encode(packet);
var channel = new TestMqttChannel(buffer.ToArray());
var channel = new TestMqttChannel(buffer.ToArray().ToArray());
var adapter = new MqttChannelAdapter(channel, new MqttPacketFormatterAdapter(protocolVersion, writer), null, new MqttNetEventLogger());
return (TPacket)adapter.ReceivePacketAsync(CancellationToken.None).GetAwaiter().GetResult();
//using (var headerStream = new MemoryStream(buffer1.ToArray()))
//{
// //var fixedHeader = new byte[2];
// //var header = new MqttPacketReader(channel).ReadFixedHeaderAsync(fixedHeader, CancellationToken.None).GetAwaiter().GetResult().FixedHeader;
// //using (var bodyStream = new MemoryStream(Join(buffer1), (int)headerStream.Position, (int)header.RemainingLength))
// //{
// // var reader = ReaderFactory(bodyStream.ToArray());
// // return (T)serializer.Decode(new ReceivedMqttPacket(header.Flags, reader, 0));
// //}
//}
}
MqttProtocolVersion DeserializeAndDetectVersion(MqttPacketFormatterAdapter packetFormatterAdapter, byte[] buffer)
@@ -677,24 +647,6 @@ namespace MQTTnet.Tests
adapter.ReceivePacketAsync(CancellationToken.None).GetAwaiter().GetResult();
return packetFormatterAdapter.ProtocolVersion;
//using (var headerStream = new MemoryStream(buffer))
//{
// //var fixedHeader = new byte[2];
// //var header = new MqttPacketReader(channel).ReadFixedHeaderAsync(fixedHeader, CancellationToken.None).GetAwaiter().GetResult().FixedHeader;
// //using (var bodyStream = new MemoryStream(buffer, (int)headerStream.Position, (int)header.RemainingLength))
// //{
// // var reader = ReaderFactory(bodyStream.ToArray());
// // var packet = new ReceivedMqttPacket(header.Flags, reader, 0);
// // packetFormatterAdapter.DetectProtocolVersion(packet);
// // return adapter.ProtocolVersion;
// //}
//}
}
}
}
+1 -1
View File
@@ -878,7 +878,7 @@ namespace MQTTnet.Tests.Server
// This should lead to no subscriptions for "n" at all. So also no sending of retained messages.
if (c.TopicFilter.Topic == "n")
{
c.ReasonCode = MqttSubscribeReasonCode.UnspecifiedError;
c.Response.ReasonCode = MqttSubscribeReasonCode.UnspecifiedError;
}
}));
@@ -34,7 +34,7 @@ namespace MQTTnet.Tests.Server
{
if (context.SessionItems["can_subscribe_x"] as bool? == false)
{
context.ReasonCode = MqttSubscribeReasonCode.ImplementationSpecificError;
context.Response.ReasonCode = MqttSubscribeReasonCode.ImplementationSpecificError;
}
}
})
@@ -265,7 +265,7 @@ namespace MQTTnet.Tests.Server
{
if (c.TopicFilter.Topic == "not_allowed_topic")
{
c.ReasonCode = MqttSubscribeReasonCode.TopicFilterInvalid;
c.Response.ReasonCode = MqttSubscribeReasonCode.TopicFilterInvalid;
}
}));
+2 -2
View File
@@ -73,12 +73,12 @@ namespace MQTTnet.TestApp.NetCore
{
if (context.TopicFilter.Topic.StartsWith("admin/foo/bar") && context.ClientId != "theAdmin")
{
context.ReasonCode = MqttSubscribeReasonCode.ImplementationSpecificError;
context.Response.ReasonCode = MqttSubscribeReasonCode.ImplementationSpecificError;
}
if (context.TopicFilter.Topic.StartsWith("the/secret/stuff") && context.ClientId != "Imperator")
{
context.ReasonCode = MqttSubscribeReasonCode.ImplementationSpecificError;
context.Response.ReasonCode = MqttSubscribeReasonCode.ImplementationSpecificError;
context.CloseConnection = true;
}
})