mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-17 01:33:03 +08:00
- adding client and server wrappers to verify the clientid starts with the testname - adding disposable baseclass - clear disconnect handler from client so it does not try to reconnect after it is disposed - moved code from dispose to cleanup in case it is called in a stop method as dispose may only be called once while start / stop may be called multiple times
77 lines
2.6 KiB
C#
77 lines
2.6 KiB
C#
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using MQTTnet.Diagnostics;
|
|
using MQTTnet.Extensions.ManagedClient;
|
|
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace MQTTnet.Tests
|
|
{
|
|
[TestClass]
|
|
public class MqttFactory_Tests
|
|
{
|
|
[TestMethod]
|
|
public async Task Create_Managed_Client_With_Logger()
|
|
{
|
|
var factory = new MqttFactory();
|
|
|
|
//This test compares
|
|
//1. correct logID
|
|
string logId = "logId";
|
|
string invalidLogId = null;
|
|
|
|
//2. if the total log calls are the same for global and local
|
|
int globalLogCount = 0;
|
|
int localLogCount = 0;
|
|
|
|
MqttNetLogger logger = new MqttNetLogger(logId);
|
|
|
|
//we have a theoretical bug here if a concurrent test is also logging
|
|
var globalLog = new EventHandler<MqttNetLogMessagePublishedEventArgs>((s, e) =>
|
|
{
|
|
if (logId != e.TraceMessage.LogId)
|
|
{
|
|
invalidLogId = e.TraceMessage.LogId;
|
|
}
|
|
Interlocked.Increment(ref globalLogCount);
|
|
});
|
|
|
|
MqttNetGlobalLogger.LogMessagePublished += globalLog;
|
|
|
|
logger.LogMessagePublished += (s, e) =>
|
|
{
|
|
if (logId != e.TraceMessage.LogId)
|
|
{
|
|
invalidLogId = e.TraceMessage.LogId;
|
|
}
|
|
Interlocked.Increment(ref localLogCount);
|
|
};
|
|
|
|
var managedClient = factory.CreateManagedMqttClient(logger);
|
|
try
|
|
{
|
|
var clientOptions = new ManagedMqttClientOptionsBuilder();
|
|
|
|
clientOptions.WithClientOptions(o => o.WithTcpServer("this_is_an_invalid_host").WithCommunicationTimeout(TimeSpan.FromSeconds(1)));
|
|
|
|
//try connect to get some log entries
|
|
await managedClient.StartAsync(clientOptions.Build());
|
|
|
|
//wait at least connect timeout or we have some log messages
|
|
var tcs = new TaskCompletionSource<object>();
|
|
managedClient.ConnectingFailedHandler = new ConnectingFailedHandlerDelegate(e => tcs.TrySetResult(null));
|
|
await Task.WhenAny(Task.Delay(managedClient.Options.ClientOptions.CommunicationTimeout), tcs.Task);
|
|
}
|
|
finally
|
|
{
|
|
await managedClient.StopAsync();
|
|
|
|
MqttNetGlobalLogger.LogMessagePublished -= globalLog;
|
|
}
|
|
|
|
Assert.IsNull(invalidLogId);
|
|
Assert.AreNotEqual(0, globalLogCount);
|
|
Assert.AreEqual(globalLogCount, localLogCount);
|
|
}
|
|
}
|
|
} |