Added UnitTests for TCP

This commit is contained in:
2024-02-28 21:59:34 +01:00
parent eedd1066e3
commit ab52d3a23a
11 changed files with 887 additions and 27 deletions

View File

@@ -6,7 +6,7 @@ namespace System.Collections.Generic
// ============================================================================================================================= //
// Source: https://git.am-wd.de/am.wd/common/-/blob/d4b390ad911ce302cc371bb2121fa9c31db1674a/AMWD.Common/Utilities/AsyncQueue.cs //
// ============================================================================================================================= //
[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
[Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
internal class AsyncQueue<T>
{
private readonly Queue<T> _queue = new();

View File

@@ -115,7 +115,10 @@ namespace AMWD.Protocols.Modbus.Tcp
#endif
if (_disconnectCts != null)
{
await _reconnectTask;
return;
}
_disconnectCts = new CancellationTokenSource();
using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(_disconnectCts.Token, cancellationToken);
@@ -166,6 +169,16 @@ namespace AMWD.Protocols.Modbus.Tcp
if (!IsConnected)
throw new ApplicationException($"Connection is not open");
if (request?.Count < 1)
throw new ArgumentNullException(nameof(request));
#if NET8_0_OR_GREATER
ArgumentNullException.ThrowIfNull(validateResponseComplete);
#else
if (validateResponseComplete == null)
throw new ArgumentNullException(nameof(validateResponseComplete));
#endif
var item = new RequestQueueItem
{
Request = [.. request],
@@ -178,7 +191,7 @@ namespace AMWD.Protocols.Modbus.Tcp
{
_requestQueue.Remove(item);
item.CancellationTokenSource.Dispose();
item.TaskCompletionSource.TrySetCanceled();
item.TaskCompletionSource.TrySetCanceled(cancellationToken);
item.CancellationTokenRegistration.Dispose();
});
@@ -375,7 +388,6 @@ namespace AMWD.Protocols.Modbus.Tcp
catch (Exception ex)
{
item.TaskCompletionSource.TrySetException(ex);
continue;
}
}
}

View File

@@ -12,7 +12,7 @@ namespace AMWD.Protocols.Modbus.Tcp.Utils
{
private readonly NetworkStream _stream;
[Obsolete("Constructor only for mocking on UnitTests!")]
[Obsolete("Constructor only for mocking on UnitTests!", error: true)]
public NetworkStreamWrapper()
{ }

View File

@@ -7,7 +7,7 @@ namespace AMWD.Protocols.Modbus.Tcp.Utils
[System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
internal class SocketWrapper : IDisposable
{
[Obsolete("Constructor only for mocking on UnitTests!")]
[Obsolete("Constructor only for mocking on UnitTests!", error: true)]
public SocketWrapper()
{ }