Updated to .NET 10
All checks were successful
Branch Build / build-test-deploy (push) Successful in 1m49s

This commit is contained in:
2026-01-12 18:32:15 +01:00
parent f7978c6277
commit 283eee556f
26 changed files with 366 additions and 380 deletions

View File

@@ -12,6 +12,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
[TestClass]
public class ModbusRtuProxyTest
{
public TestContext TestContext { get; set; }
private Mock<ModbusClientBase> _clientMock;
private Mock<SerialPortWrapper> _serialPortMock;
@@ -127,8 +129,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
using var proxy = GetProxy();
// Act
await proxy.StartAsync();
await proxy.StopAsync();
await proxy.StartAsync(TestContext.CancellationToken);
await proxy.StopAsync(TestContext.CancellationToken);
// Assert
_serialPortMock.VerifyGet(m => m.PortName, Times.Exactly(2));
@@ -176,7 +178,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_serialPortMock.Setup(m => m.PortName).Returns(portName);
// Act + Assert
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => proxy.StartAsync());
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => proxy.StartAsync(TestContext.CancellationToken));
}
[TestMethod]
@@ -249,7 +251,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
// Arrange
// Not adding request data to the queue will cause an exception while reading
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -275,7 +277,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue(request);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -304,7 +306,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 142, 1];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -347,7 +349,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [2, 1, 1, 9];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -384,7 +386,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -412,7 +414,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [2, 129, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.ReadCoilsAsync(It.IsAny<byte>(), It.IsAny<ushort>(), It.IsAny<ushort>(), It.IsAny<CancellationToken>()))
@@ -460,7 +462,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [22, 2, 1, 10];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -497,7 +499,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -525,7 +527,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [2, 130, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.ReadDiscreteInputsAsync(It.IsAny<byte>(), It.IsAny<ushort>(), It.IsAny<ushort>(), It.IsAny<CancellationToken>()))
@@ -571,7 +573,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [42, 3, 4, 34, 12, 78, 56];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -608,7 +610,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -636,7 +638,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [2, 131, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.ReadHoldingRegistersAsync(It.IsAny<byte>(), It.IsAny<ushort>(), It.IsAny<ushort>(), It.IsAny<CancellationToken>()))
@@ -682,7 +684,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [42, 4, 4, 12, 34, 56, 78];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -719,7 +721,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -747,7 +749,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [2, 132, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.ReadInputRegistersAsync(It.IsAny<byte>(), It.IsAny<ushort>(), It.IsAny<ushort>(), It.IsAny<CancellationToken>()))
@@ -794,7 +796,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
2, 18, 77, 97, 106, 111, 114, 77, 105, 110, 111, 114, 82, 101, 118, 105, 115, 105, 111, 110];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -832,7 +834,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -860,7 +862,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 171, 1];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -891,7 +893,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 171, 2];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -922,7 +924,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 171, 3];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -959,7 +961,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
2, 18, 77, 97, 106, 111, 114, 77, 105, 110, 111, 114, 82, 101, 118, 105, 115, 105, 111, 110];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1003,7 +1005,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
3, 0, 4, 0, 5, 0, 6, 0,];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1057,7 +1059,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
216, 0, 217, 0, 218, 0, 219, 0, 220, 0, 221, 0, 222, 0];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1099,7 +1101,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
0, 10, 86, 101, 110, 100, 111, 114, 78, 97, 109, 101];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1140,7 +1142,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_clientMock.Setup(m => m.ReadDeviceIdentificationAsync(It.IsAny<byte>(), It.IsAny<ModbusDeviceIdentificationCategory>(), It.IsAny<ModbusDeviceIdentificationObject>(), It.IsAny<CancellationToken>()))
.Callback<byte, ModbusDeviceIdentificationCategory, ModbusDeviceIdentificationObject, CancellationToken>((unitId, category, objectId, _) => _clientReadDeviceCallbacks.Add((unitId, category, objectId)))
.ThrowsAsync(new ModbusException());
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1186,7 +1188,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [3, 5, 0, 7, 255, 0];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1223,7 +1225,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1251,7 +1253,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [3, 133, 3];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1283,7 +1285,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [3, 133, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1321,7 +1323,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [3, 133, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.WriteSingleCoilAsync(It.IsAny<byte>(), It.IsAny<Coil>(), It.IsAny<CancellationToken>()))
@@ -1368,7 +1370,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [4, 6, 0, 1, 0, 3];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1405,7 +1407,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1434,7 +1436,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [4, 134, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1472,7 +1474,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [4, 134, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.WriteSingleHoldingRegisterAsync(It.IsAny<byte>(), It.IsAny<HoldingRegister>(), It.IsAny<CancellationToken>()))
@@ -1519,7 +1521,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 15, 0, 13, 0, 10];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1544,12 +1546,12 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var (unitId, coils) = _writeMultipleCoilsCallbacks.First();
Assert.AreEqual(1, unitId);
Assert.AreEqual(10, coils.Count);
Assert.HasCount(10, coils);
for (byte i = 13; i < 23; i++)
Assert.IsNotNull(coils.Where(c => c.Address == i).FirstOrDefault());
CollectionAssert.AreEqual(new bool[] { true, false, true, true, false, false, true, true, true, false }, coils.Select(c => c.Value).ToArray());
CollectionAssert.AreEqual(new[] { true, false, true, true, false, false, true, true, true, false }, coils.Select(c => c.Value).ToArray());
}
[TestMethod]
@@ -1560,7 +1562,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1588,7 +1590,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 143, 3];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1620,7 +1622,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 143, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1645,12 +1647,12 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var (unitId, coils) = _writeMultipleCoilsCallbacks.First();
Assert.AreEqual(1, unitId);
Assert.AreEqual(10, coils.Count);
Assert.HasCount(10, coils);
for (byte i = 13; i < 23; i++)
Assert.IsNotNull(coils.Where(c => c.Address == i).FirstOrDefault());
CollectionAssert.AreEqual(new bool[] { true, false, true, true, false, false, true, true, true, false }, coils.Select(c => c.Value).ToArray());
CollectionAssert.AreEqual(new[] { true, false, true, true, false, false, true, true, true, false }, coils.Select(c => c.Value).ToArray());
}
[TestMethod]
@@ -1662,7 +1664,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 143, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.WriteMultipleCoilsAsync(It.IsAny<byte>(), It.IsAny<IReadOnlyList<Coil>>(), It.IsAny<CancellationToken>()))
@@ -1692,12 +1694,12 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var (unitId, coils) = _writeMultipleCoilsCallbacks.First();
Assert.AreEqual(1, unitId);
Assert.AreEqual(10, coils.Count);
Assert.HasCount(10, coils);
for (byte i = 13; i < 23; i++)
Assert.IsNotNull(coils.Where(c => c.Address == i).FirstOrDefault());
CollectionAssert.AreEqual(new bool[] { true, false, true, true, false, false, true, true, true, false }, coils.Select(c => c.Value).ToArray());
CollectionAssert.AreEqual(new[] { true, false, true, true, false, false, true, true, true, false }, coils.Select(c => c.Value).ToArray());
}
#endregion Write Multiple Coils (Fn 15)
@@ -1713,7 +1715,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 16, 0, 1, 0, 2];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1738,7 +1740,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var (unitId, registers) = _writeMultipleRegistersCallbacks.First();
Assert.AreEqual(1, unitId);
Assert.AreEqual(2, registers.Count);
Assert.HasCount(2, registers);
for (byte i = 1; i < 3; i++)
Assert.IsNotNull(registers.Where(c => c.Address == i).FirstOrDefault());
@@ -1754,7 +1756,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_requestBytesQueue.Enqueue([.. request, .. RtuProtocol.CRC16(request)]);
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1782,7 +1784,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 144, 3];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1814,7 +1816,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 144, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
// Act
_serialPortMock.Raise(m => m.DataReceived += null, _dataReceivedEventArgs);
@@ -1839,7 +1841,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var (unitId, registers) = _writeMultipleRegistersCallbacks.First();
Assert.AreEqual(1, unitId);
Assert.AreEqual(2, registers.Count);
Assert.HasCount(2, registers);
for (byte i = 1; i < 3; i++)
Assert.IsNotNull(registers.Where(c => c.Address == i).FirstOrDefault());
@@ -1856,7 +1858,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
byte[] expectedResponse = [1, 144, 4];
using var proxy = GetProxy();
await proxy.StartAsync();
await proxy.StartAsync(TestContext.CancellationToken);
_clientMock
.Setup(m => m.WriteMultipleHoldingRegistersAsync(It.IsAny<byte>(), It.IsAny<IReadOnlyList<HoldingRegister>>(), It.IsAny<CancellationToken>()))
@@ -1886,7 +1888,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var (unitId, registers) = _writeMultipleRegistersCallbacks.First();
Assert.AreEqual(1, unitId);
Assert.AreEqual(2, registers.Count);
Assert.HasCount(2, registers);
for (byte i = 1; i < 3; i++)
Assert.IsNotNull(registers.Where(c => c.Address == i).FirstOrDefault());

View File

@@ -13,6 +13,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
[TestClass]
public class ModbusSerialConnectionTest
{
public TestContext TestContext { get; set; }
private Mock<SerialPortWrapper> _serialPortMock;
private bool _alwaysOpen;
@@ -109,7 +111,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
connection.Dispose();
// Act + Assert
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(() => connection.InvokeAsync(null, null));
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(() => connection.InvokeAsync(null, null, TestContext.CancellationToken));
}
[TestMethod]
@@ -121,7 +123,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var connection = GetConnection();
// Act + Assert
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null));
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null, TestContext.CancellationToken));
}
[TestMethod]
@@ -132,7 +134,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var connection = GetConnection();
// Act + Assert
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null));
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null, TestContext.CancellationToken));
}
[TestMethod]
@@ -147,7 +149,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var connection = GetConnection();
// Act
var response = await connection.InvokeAsync(request, validation);
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
// Assert
Assert.IsNotNull(response);
@@ -183,8 +185,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
connection.DriverEnabledRS485 = false;
// Act
var response = await connection.InvokeAsync(request, validation);
await Task.Delay(500);
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
await Task.Delay(500, TestContext.CancellationToken);
// Assert
Assert.IsNotNull(response);
@@ -225,8 +227,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
connection.DriverEnabledRS485 = true;
// Act
var response = await connection.InvokeAsync(request, validation);
await Task.Delay(500);
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
await Task.Delay(500, TestContext.CancellationToken);
// Assert
Assert.IsNotNull(response);
@@ -270,8 +272,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
connection.DriverEnabledRS485 = false;
// Act
var response = await connection.InvokeAsync(request, validation);
await Task.Delay(500);
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
await Task.Delay(500, TestContext.CancellationToken);
// Assert
Assert.IsNotNull(response);
@@ -312,8 +314,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
connection.DriverEnabledRS485 = true;
// Act
var response = await connection.InvokeAsync(request, validation);
await Task.Delay(500);
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
await Task.Delay(500, TestContext.CancellationToken);
// Assert
Assert.IsNotNull(response);
@@ -344,7 +346,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var connection = GetConnection();
// Act + Assert
await Assert.ThrowsExactlyAsync<EndOfStreamException>(() => connection.InvokeAsync(request, validation));
await Assert.ThrowsExactlyAsync<EndOfStreamException>(() => connection.InvokeAsync(request, validation, TestContext.CancellationToken));
}
[TestMethod]
@@ -365,8 +367,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
connection.IdleTimeout = TimeSpan.FromMilliseconds(200);
// Act
var response = await connection.InvokeAsync(request, validation);
await Task.Delay(500);
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
await Task.Delay(500, TestContext.CancellationToken);
// Assert
Assert.IsNotNull(response);
@@ -404,7 +406,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var connection = GetConnection();
// Act
var response = await connection.InvokeAsync(request, validation);
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
// Assert
Assert.IsNotNull(response);
@@ -435,12 +437,12 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var connection = GetConnection();
_serialPortMock
.Setup(ns => ns.WriteAsync(It.IsAny<byte[]>(), It.IsAny<CancellationToken>()))
.Returns(Task.Delay(100));
.Returns<byte[], CancellationToken>((_, ct) => Task.Delay(100, ct));
// Act + Assert
await Assert.ThrowsExactlyAsync<TaskCanceledException>(async () =>
{
var task = connection.InvokeAsync(request, validation);
var task = connection.InvokeAsync(request, validation, TestContext.CancellationToken);
connection.Dispose();
await task;
});
@@ -457,7 +459,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var connection = GetConnection();
_serialPortMock
.Setup(ns => ns.WriteAsync(It.IsAny<byte[]>(), It.IsAny<CancellationToken>()))
.Returns(Task.Delay(100));
.Returns<byte[], CancellationToken>((_, ct) => Task.Delay(100, ct));
// Act + Assert
await Assert.ThrowsExactlyAsync<TaskCanceledException>(async () =>
@@ -482,10 +484,10 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_serialPortMock
.Setup(ns => ns.WriteAsync(It.IsAny<byte[]>(), It.IsAny<CancellationToken>()))
.Callback<byte[], CancellationToken>((req, _) => _serialLineRequestCallbacks.Add([.. req]))
.Returns(Task.Delay(100));
.Returns<byte[], CancellationToken>((_, ct) => Task.Delay(100, ct));
// Act
var taskToComplete = connection.InvokeAsync(request, validation);
var taskToComplete = connection.InvokeAsync(request, validation, TestContext.CancellationToken);
var taskToCancel = connection.InvokeAsync(request, validation, cts.Token);
cts.Cancel();
@@ -493,16 +495,10 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
var response = await taskToComplete;
// Assert - Part 1
try
{
await taskToCancel;
Assert.Fail();
}
catch (TaskCanceledException)
{ /* expected exception */ }
await Assert.ThrowsExactlyAsync<TaskCanceledException>(async () => await taskToCancel);
// Assert - Part 2
Assert.AreEqual(1, _serialLineRequestCallbacks.Count);
Assert.HasCount(1, _serialLineRequestCallbacks);
CollectionAssert.AreEqual(request, _serialLineRequestCallbacks.First());
CollectionAssert.AreEqual(expectedResponse, response.ToArray());
@@ -525,31 +521,18 @@ namespace AMWD.Protocols.Modbus.Tests.Serial
_serialPortMock
.Setup(ns => ns.WriteAsync(It.IsAny<byte[]>(), It.IsAny<CancellationToken>()))
.Callback<byte[], CancellationToken>((req, _) => _serialLineRequestCallbacks.Add([.. req]))
.Returns(Task.Delay(100));
.Returns<byte[], CancellationToken>((_, ct) => Task.Delay(100, ct));
// Act
var taskToCancel = connection.InvokeAsync(request, validation);
var taskToDequeue = connection.InvokeAsync(request, validation);
var taskToCancel = connection.InvokeAsync(request, validation, TestContext.CancellationToken);
var taskToDequeue = connection.InvokeAsync(request, validation, TestContext.CancellationToken);
connection.Dispose();
// Assert
try
{
await taskToCancel;
Assert.Fail();
}
catch (TaskCanceledException)
{ /* expected exception */ }
await Assert.ThrowsExactlyAsync<TaskCanceledException>(async () => await taskToCancel);
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(async () => await taskToDequeue);
try
{
await taskToDequeue;
Assert.Fail();
}
catch (ObjectDisposedException)
{ /* expected exception */ }
Assert.AreEqual(1, _serialLineRequestCallbacks.Count);
Assert.HasCount(1, _serialLineRequestCallbacks);
CollectionAssert.AreEqual(request, _serialLineRequestCallbacks.First());
_serialPortMock.Verify(c => c.IsOpen, Times.Once);