Files
MQTTnet/Tests/MQTTnet.Core.Tests/MqttFactory_Tests.cs
T
JanEggers 14419e4d63 fixed clients overlapping from one test to another by:
- 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
2019-12-20 15:37:23 +01:00

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);
}
}
}