mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-16 01:03:01 +08:00
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";
|
|
bool invalidLogIdOccured = false;
|
|
|
|
//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)
|
|
{
|
|
invalidLogIdOccured = true;
|
|
}
|
|
Interlocked.Increment(ref globalLogCount);
|
|
});
|
|
|
|
MqttNetGlobalLogger.LogMessagePublished += globalLog;
|
|
|
|
logger.LogMessagePublished += (s, e) =>
|
|
{
|
|
if (logId != e.TraceMessage.LogId)
|
|
{
|
|
invalidLogIdOccured = true;
|
|
}
|
|
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.IsFalse(invalidLogIdOccured);
|
|
Assert.AreNotEqual(0, globalLogCount);
|
|
Assert.AreEqual(globalLogCount, localLogCount);
|
|
}
|
|
}
|
|
} |