|
|
@@ -0,0 +1,79 @@ |
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting; |
|
|
|
using MQTTnet.Diagnostics; |
|
|
|
using MQTTnet.Extensions.ManagedClient; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Text; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading.Tasks; |
|
|
|
|
|
|
|
namespace MQTTnet.Tests |
|
|
|
{ |
|
|
|
[TestClass] |
|
|
|
public class MqttFactoryTests |
|
|
|
{ |
|
|
|
[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.ConnectingFailed += (s, e) => tcs.TrySetResult(null); |
|
|
|
await Task.WhenAny(Task.Delay(managedClient.Options.ClientOptions.CommunicationTimeout), tcs.Task); |
|
|
|
} |
|
|
|
finally |
|
|
|
{ |
|
|
|
MqttNetGlobalLogger.LogMessagePublished -= globalLog; |
|
|
|
|
|
|
|
await managedClient.StopAsync(); |
|
|
|
} |
|
|
|
|
|
|
|
Assert.IsFalse(invalidLogIdOccured); |
|
|
|
Assert.AreNotEqual(0, globalLogCount); |
|
|
|
Assert.AreEqual(globalLogCount, localLogCount); |
|
|
|
} |
|
|
|
} |
|
|
|
} |