浏览代码

fix logger logId not used in ManagedMqttClient

release/3.x.x
Berni 5 年前
父节点
当前提交
506873ed5b
共有 2 个文件被更改,包括 81 次插入2 次删除
  1. +2
    -2
      Source/MQTTnet.Extensions.ManagedClient/MqttFactoryExtensions.cs
  2. +79
    -0
      Tests/MQTTnet.Core.Tests/MqttFactoryTests.cs

+ 2
- 2
Source/MQTTnet.Extensions.ManagedClient/MqttFactoryExtensions.cs 查看文件

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

+ 79
- 0
Tests/MQTTnet.Core.Tests/MqttFactoryTests.cs 查看文件

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

正在加载...
取消
保存