@@ -0,0 +1,55 @@ | |||||
using System.Collections.Generic; | |||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
using Microsoft.VisualStudio.TestTools.UnitTesting; | |||||
using MQTTnet.Client; | |||||
using MQTTnet.Client.Options; | |||||
using MQTTnet.Client.Subscribing; | |||||
using MQTTnet.Formatter; | |||||
using MQTTnet.Tests.Mockups; | |||||
namespace MQTTnet.Tests.MQTTv5 | |||||
{ | |||||
[TestClass] | |||||
public class Feature_Tests | |||||
{ | |||||
[TestMethod] | |||||
public async Task Use_User_Properties() | |||||
{ | |||||
using (var testEnvironment = new TestEnvironment()) | |||||
{ | |||||
await testEnvironment.StartServerAsync(); | |||||
var sender = await testEnvironment.ConnectClientAsync(new MqttClientOptionsBuilder().WithProtocolVersion(MqttProtocolVersion.V500)); | |||||
var receiver = await testEnvironment.ConnectClientAsync(new MqttClientOptionsBuilder().WithProtocolVersion(MqttProtocolVersion.V500)); | |||||
var message = new MqttApplicationMessageBuilder() | |||||
.WithTopic("A") | |||||
.WithUserProperty("x", "1") | |||||
.WithUserProperty("y", "2") | |||||
.WithUserProperty("z", "3") | |||||
.WithUserProperty("z", "4"); // z is here two times to test list of items | |||||
await receiver.SubscribeAsync(new MqttClientSubscribeOptions | |||||
{ | |||||
TopicFilters = new List<TopicFilter> | |||||
{ | |||||
new TopicFilter { Topic = "#" } | |||||
} | |||||
}, CancellationToken.None); | |||||
MqttApplicationMessage receivedMessage = null; | |||||
receiver.UseApplicationMessageReceivedHandler(e => receivedMessage = e.ApplicationMessage); | |||||
await sender.PublishAsync(message.Build(), CancellationToken.None); | |||||
await Task.Delay(1000); | |||||
Assert.IsNotNull(receivedMessage); | |||||
Assert.AreEqual("A", receivedMessage.Topic); | |||||
Assert.AreEqual(4, receivedMessage.UserProperties.Count); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -2,13 +2,16 @@ using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Net.Sockets; | using System.Net.Sockets; | ||||
using System.Threading; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
using MQTTnet.Client; | using MQTTnet.Client; | ||||
using MQTTnet.Client.Connecting; | using MQTTnet.Client.Connecting; | ||||
using MQTTnet.Client.Disconnecting; | using MQTTnet.Client.Disconnecting; | ||||
using MQTTnet.Client.Options; | using MQTTnet.Client.Options; | ||||
using MQTTnet.Client.Subscribing; | |||||
using MQTTnet.Exceptions; | using MQTTnet.Exceptions; | ||||
using MQTTnet.Formatter; | |||||
using MQTTnet.Protocol; | using MQTTnet.Protocol; | ||||
using MQTTnet.Server; | using MQTTnet.Server; | ||||
using MQTTnet.Tests.Mockups; | using MQTTnet.Tests.Mockups; | ||||
@@ -339,5 +342,36 @@ namespace MQTTnet.Tests | |||||
Assert.AreEqual("1", receivedPayload); | Assert.AreEqual("1", receivedPayload); | ||||
} | } | ||||
} | } | ||||
[TestMethod] | |||||
public async Task No_Payload() | |||||
{ | |||||
using (var testEnvironment = new TestEnvironment()) | |||||
{ | |||||
await testEnvironment.StartServerAsync(); | |||||
var sender = await testEnvironment.ConnectClientAsync(); | |||||
var receiver = await testEnvironment.ConnectClientAsync(); | |||||
var message = new MqttApplicationMessageBuilder() | |||||
.WithTopic("A"); | |||||
await receiver.SubscribeAsync(new MqttClientSubscribeOptions | |||||
{ | |||||
TopicFilters = new List<TopicFilter> { new TopicFilter { Topic = "#" } } | |||||
}, CancellationToken.None); | |||||
MqttApplicationMessage receivedMessage = null; | |||||
receiver.UseApplicationMessageReceivedHandler(e => receivedMessage = e.ApplicationMessage); | |||||
await sender.PublishAsync(message.Build(), CancellationToken.None); | |||||
await Task.Delay(1000); | |||||
Assert.IsNotNull(receivedMessage); | |||||
Assert.AreEqual("A", receivedMessage.Topic); | |||||
Assert.AreEqual(null, receivedMessage.Payload); | |||||
} | |||||
} | |||||
} | } | ||||
} | } |
@@ -4,9 +4,7 @@ using System.Diagnostics; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Microsoft.VisualStudio.TestTools.UnitTesting; | using Microsoft.VisualStudio.TestTools.UnitTesting; | ||||
using MQTTnet.Client; | using MQTTnet.Client; | ||||
using MQTTnet.Client.Options; | |||||
using MQTTnet.Client.Receiving; | |||||
using MQTTnet.Server; | |||||
using MQTTnet.Tests.Mockups; | |||||
namespace MQTTnet.Tests | namespace MQTTnet.Tests | ||||
{ | { | ||||
@@ -16,42 +14,37 @@ namespace MQTTnet.Tests | |||||
[TestMethod] | [TestMethod] | ||||
public async Task Round_Trip_Time() | public async Task Round_Trip_Time() | ||||
{ | { | ||||
var factory = new MqttFactory(); | |||||
var server = factory.CreateMqttServer(); | |||||
var receiverClient = factory.CreateMqttClient(); | |||||
var senderClient = factory.CreateMqttClient(); | |||||
await server.StartAsync(new MqttServerOptionsBuilder().Build()); | |||||
await receiverClient.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer("localhost").Build()); | |||||
await receiverClient.SubscribeAsync("#"); | |||||
await senderClient.ConnectAsync(new MqttClientOptionsBuilder().WithTcpServer("localhost").Build()); | |||||
TaskCompletionSource<string> response = null; | |||||
receiverClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(args => | |||||
using (var testEnvironment = new TestEnvironment()) | |||||
{ | { | ||||
response?.SetResult(args.ApplicationMessage.ConvertPayloadToString()); | |||||
}); | |||||
var times = new List<TimeSpan>(); | |||||
var stopwatch = Stopwatch.StartNew(); | |||||
await Task.Delay(1000); | |||||
for (var i = 0; i < 100; i++) | |||||
{ | |||||
response = new TaskCompletionSource<string>(); | |||||
await senderClient.PublishAsync("test", DateTime.UtcNow.Ticks.ToString()); | |||||
response.Task.GetAwaiter().GetResult(); | |||||
stopwatch.Stop(); | |||||
times.Add(stopwatch.Elapsed); | |||||
stopwatch.Restart(); | |||||
await testEnvironment.StartServerAsync(); | |||||
var receiverClient = await testEnvironment.ConnectClientAsync(); | |||||
var senderClient = await testEnvironment.ConnectClientAsync(); | |||||
await receiverClient.SubscribeAsync("#"); | |||||
TaskCompletionSource<string> response = null; | |||||
receiverClient.UseApplicationMessageReceivedHandler(e => | |||||
{ | |||||
response?.SetResult(e.ApplicationMessage.ConvertPayloadToString()); | |||||
}); | |||||
var times = new List<TimeSpan>(); | |||||
var stopwatch = Stopwatch.StartNew(); | |||||
await Task.Delay(1000); | |||||
for (var i = 0; i < 100; i++) | |||||
{ | |||||
response = new TaskCompletionSource<string>(); | |||||
await senderClient.PublishAsync("test", DateTime.UtcNow.Ticks.ToString()); | |||||
response.Task.GetAwaiter().GetResult(); | |||||
stopwatch.Stop(); | |||||
times.Add(stopwatch.Elapsed); | |||||
stopwatch.Restart(); | |||||
} | |||||
} | } | ||||
await server.StopAsync(); | |||||
} | } | ||||
} | } | ||||
} | } |