mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-16 17:23:04 +08:00
fix logger logId not used in ManagedMqttClient
This commit is contained in:
@@ -18,7 +18,7 @@ namespace MQTTnet.Extensions.ManagedClient
|
||||
if (factory == null) throw new ArgumentNullException(nameof(factory));
|
||||
if (logger == null) throw new ArgumentNullException(nameof(logger));
|
||||
|
||||
return new ManagedMqttClient(factory.CreateMqttClient(), logger.CreateChildLogger());
|
||||
return new ManagedMqttClient(factory.CreateMqttClient(logger), logger.CreateChildLogger());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user