This commit is contained in:
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Reorganized folder structure to allow documentation generation.
|
||||
- Migrated main repository from GitLab to Gitea.
|
||||
- Migrated to VS 2026.
|
||||
- Updated UnitTests and Tools to .NET 10.
|
||||
|
||||
|
||||
## [v0.4.2] (2025-02-07)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<LangVersion>12.0</LangVersion>
|
||||
<LangVersion>14.0</LangVersion>
|
||||
<NrtRevisionFormat>{semvertag:main}{!:-dev}</NrtRevisionFormat>
|
||||
|
||||
<Title>Modbus Protocol for .NET</Title>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netstandard2.0;net6.0;net8.0;net10.0</TargetFrameworks>
|
||||
<PackageId>AMWD.Protocols.Modbus.Serial</PackageId>
|
||||
<AssemblyName>amwd-modbus-serial</AssemblyName>
|
||||
<RootNamespace>AMWD.Protocols.Modbus.Serial</RootNamespace>
|
||||
@@ -29,6 +30,10 @@
|
||||
<PackageReference Include="System.IO.Ports" Version="8.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0'">
|
||||
<PackageReference Include="System.IO.Ports" Version="10.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\AMWD.Protocols.Modbus.Common\AMWD.Protocols.Modbus.Common.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -8,6 +8,8 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
[TestClass]
|
||||
public class ModbusClientBaseTest
|
||||
{
|
||||
public TestContext TestContext { get; set; }
|
||||
|
||||
// Consts
|
||||
private const byte UNIT_ID = 42;
|
||||
private const ushort START_ADDRESS = 123;
|
||||
@@ -158,7 +160,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
client.Dispose();
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(() => client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT));
|
||||
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(() => client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT, TestContext.CancellationToken));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -169,7 +171,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
client.Protocol = null;
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT));
|
||||
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT, TestContext.CancellationToken));
|
||||
}
|
||||
|
||||
#endregion Common/Connection/Assertions
|
||||
@@ -184,11 +186,11 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var result = await client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT);
|
||||
var result = await client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(READ_COUNT, result.Count);
|
||||
Assert.HasCount(READ_COUNT, result);
|
||||
|
||||
for (int i = 0; i < READ_COUNT; i++)
|
||||
{
|
||||
@@ -213,11 +215,11 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var result = await client.ReadDiscreteInputsAsync(UNIT_ID, START_ADDRESS, READ_COUNT);
|
||||
var result = await client.ReadDiscreteInputsAsync(UNIT_ID, START_ADDRESS, READ_COUNT, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(READ_COUNT, result.Count);
|
||||
Assert.HasCount(READ_COUNT, result);
|
||||
|
||||
for (int i = 0; i < READ_COUNT; i++)
|
||||
{
|
||||
@@ -241,11 +243,11 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var result = await client.ReadHoldingRegistersAsync(UNIT_ID, START_ADDRESS, READ_COUNT);
|
||||
var result = await client.ReadHoldingRegistersAsync(UNIT_ID, START_ADDRESS, READ_COUNT, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(READ_COUNT, result.Count);
|
||||
Assert.HasCount(READ_COUNT, result);
|
||||
|
||||
for (int i = 0; i < READ_COUNT; i++)
|
||||
{
|
||||
@@ -269,11 +271,11 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var result = await client.ReadInputRegistersAsync(UNIT_ID, START_ADDRESS, READ_COUNT);
|
||||
var result = await client.ReadInputRegistersAsync(UNIT_ID, START_ADDRESS, READ_COUNT, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(READ_COUNT, result.Count);
|
||||
Assert.HasCount(READ_COUNT, result);
|
||||
|
||||
for (int i = 0; i < READ_COUNT; i++)
|
||||
{
|
||||
@@ -297,7 +299,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var result = await client.ReadDeviceIdentificationAsync(UNIT_ID, ModbusDeviceIdentificationCategory.Basic, ModbusDeviceIdentificationObject.VendorName);
|
||||
var result = await client.ReadDeviceIdentificationAsync(UNIT_ID, ModbusDeviceIdentificationCategory.Basic, ModbusDeviceIdentificationObject.VendorName, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
@@ -310,7 +312,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
Assert.AreEqual("UnitTests", result.ModelName);
|
||||
Assert.AreEqual("Modbus Client Base Unit Test", result.UserApplicationName);
|
||||
|
||||
Assert.AreEqual(0, result.ExtendedObjects.Count);
|
||||
Assert.IsEmpty(result.ExtendedObjects);
|
||||
|
||||
_connection.Verify(c => c.InvokeAsync(It.IsAny<IReadOnlyList<byte>>(), It.IsAny<Func<IReadOnlyList<byte>, bool>>(), It.IsAny<CancellationToken>()), Times.Once);
|
||||
_connection.VerifyNoOtherCalls();
|
||||
@@ -340,7 +342,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var result = await client.ReadDeviceIdentificationAsync(UNIT_ID, ModbusDeviceIdentificationCategory.Extended, ModbusDeviceIdentificationObject.VendorName);
|
||||
var result = await client.ReadDeviceIdentificationAsync(UNIT_ID, ModbusDeviceIdentificationCategory.Extended, ModbusDeviceIdentificationObject.VendorName, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
@@ -353,7 +355,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
Assert.AreEqual("UnitTests", result.ModelName);
|
||||
Assert.AreEqual("Modbus Client Base Unit Test", result.UserApplicationName);
|
||||
|
||||
Assert.AreEqual(1, result.ExtendedObjects.Count);
|
||||
Assert.HasCount(1, result.ExtendedObjects);
|
||||
Assert.AreEqual(0x07, result.ExtendedObjects.First().Key);
|
||||
CollectionAssert.AreEqual(new byte[] { 0x01, 0x02, 0x03 }, result.ExtendedObjects.First().Value);
|
||||
|
||||
@@ -383,7 +385,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteSingleCoilAsync(UNIT_ID, coil);
|
||||
bool result = await client.WriteSingleCoilAsync(UNIT_ID, coil, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
@@ -409,7 +411,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteSingleCoilAsync(UNIT_ID, coil);
|
||||
bool result = await client.WriteSingleCoilAsync(UNIT_ID, coil, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
@@ -435,7 +437,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteSingleCoilAsync(UNIT_ID, coil);
|
||||
bool result = await client.WriteSingleCoilAsync(UNIT_ID, coil, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
@@ -461,7 +463,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteSingleHoldingRegisterAsync(UNIT_ID, register);
|
||||
bool result = await client.WriteSingleHoldingRegisterAsync(UNIT_ID, register, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
@@ -487,7 +489,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteSingleHoldingRegisterAsync(UNIT_ID, register);
|
||||
bool result = await client.WriteSingleHoldingRegisterAsync(UNIT_ID, register, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
@@ -513,7 +515,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteSingleHoldingRegisterAsync(UNIT_ID, register);
|
||||
bool result = await client.WriteSingleHoldingRegisterAsync(UNIT_ID, register, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
@@ -543,7 +545,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteMultipleCoilsAsync(UNIT_ID, coils);
|
||||
bool result = await client.WriteMultipleCoilsAsync(UNIT_ID, coils, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
@@ -574,7 +576,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteMultipleCoilsAsync(UNIT_ID, coils);
|
||||
bool result = await client.WriteMultipleCoilsAsync(UNIT_ID, coils, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
@@ -605,7 +607,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteMultipleCoilsAsync(UNIT_ID, coils);
|
||||
bool result = await client.WriteMultipleCoilsAsync(UNIT_ID, coils, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
@@ -635,7 +637,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteMultipleHoldingRegistersAsync(UNIT_ID, registers);
|
||||
bool result = await client.WriteMultipleHoldingRegistersAsync(UNIT_ID, registers, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result);
|
||||
@@ -666,7 +668,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteMultipleHoldingRegistersAsync(UNIT_ID, registers);
|
||||
bool result = await client.WriteMultipleHoldingRegistersAsync(UNIT_ID, registers, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
@@ -697,7 +699,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Contracts
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
bool result = await client.WriteMultipleHoldingRegistersAsync(UNIT_ID, registers);
|
||||
bool result = await client.WriteMultipleHoldingRegistersAsync(UNIT_ID, registers, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result);
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(5, registers[0].Address);
|
||||
Assert.AreEqual(0x41, registers[0].HighByte);
|
||||
@@ -228,7 +228,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(6, registers[0].Address);
|
||||
Assert.AreEqual(0x41, registers[0].HighByte);
|
||||
@@ -250,7 +250,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(4, registers.Count);
|
||||
Assert.HasCount(4, registers);
|
||||
|
||||
Assert.AreEqual(5, registers[0].Address);
|
||||
Assert.AreEqual(0x40, registers[0].HighByte);
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(4, registers.Count);
|
||||
Assert.HasCount(4, registers);
|
||||
|
||||
Assert.AreEqual(8, registers[0].Address);
|
||||
Assert.AreEqual(0x40, registers[0].HighByte);
|
||||
|
||||
@@ -172,7 +172,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Extensions
|
||||
// Assert
|
||||
Assert.IsNotNull(register);
|
||||
Assert.AreEqual(321, register.Address);
|
||||
Assert.IsTrue(register.Value > 0);
|
||||
Assert.IsGreaterThan(0, register.Value);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -187,7 +187,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Extensions
|
||||
// Assert
|
||||
Assert.IsNotNull(register);
|
||||
Assert.AreEqual(321, register.Address);
|
||||
Assert.IsTrue(register.Value == 0);
|
||||
Assert.AreEqual(0, register.Value);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -201,7 +201,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Extensions
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(100, registers[0].Address);
|
||||
Assert.AreEqual(97, registers[0].HighByte);
|
||||
@@ -223,7 +223,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Extensions
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(101, registers[0].Address);
|
||||
Assert.AreEqual(97, registers[0].HighByte);
|
||||
@@ -245,7 +245,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Extensions
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(100, registers[0].Address);
|
||||
Assert.AreEqual(97, registers[0].LowByte);
|
||||
|
||||
@@ -103,9 +103,9 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister(),
|
||||
new HoldingRegister { Address = 100, HighByte = 0x01, LowByte = 0x02 },
|
||||
new HoldingRegister { Address = 101, HighByte = 0x03, LowByte = 0x04 }
|
||||
new(),
|
||||
new() { Address = 100, HighByte = 0x01, LowByte = 0x02 },
|
||||
new() { Address = 101, HighByte = 0x03, LowByte = 0x04 }
|
||||
};
|
||||
|
||||
// Act
|
||||
@@ -121,8 +121,8 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister { Address = 101, HighByte = 0x01, LowByte = 0x02 },
|
||||
new HoldingRegister { Address = 100, HighByte = 0x03, LowByte = 0x04 }
|
||||
new() { Address = 101, HighByte = 0x01, LowByte = 0x02 },
|
||||
new() { Address = 100, HighByte = 0x03, LowByte = 0x04 }
|
||||
};
|
||||
|
||||
// Act
|
||||
@@ -148,7 +148,7 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister { Address = 101, HighByte = 0x01, LowByte = 0x02 }
|
||||
new() { Address = 101, HighByte = 0x01, LowByte = 0x02 }
|
||||
};
|
||||
|
||||
// Act + Assert
|
||||
@@ -163,8 +163,8 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister { Address = 101, HighByte = 0x01, LowByte = 0x02 },
|
||||
new HoldingRegister { Address = 100, HighByte = 0x03, LowByte = 0x04 }
|
||||
new() { Address = 101, HighByte = 0x01, LowByte = 0x02 },
|
||||
new() { Address = 100, HighByte = 0x03, LowByte = 0x04 }
|
||||
};
|
||||
|
||||
// Act + Assert
|
||||
@@ -191,11 +191,11 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister(),
|
||||
new HoldingRegister { Address = 100, HighByte = 0x00, LowByte = 0x00 },
|
||||
new HoldingRegister { Address = 101, HighByte = 0x00, LowByte = 0x00 },
|
||||
new HoldingRegister { Address = 102, HighByte = 0x01, LowByte = 0x02 },
|
||||
new HoldingRegister { Address = 103, HighByte = 0x03, LowByte = 0x04 }
|
||||
new(),
|
||||
new() { Address = 100, HighByte = 0x00, LowByte = 0x00 },
|
||||
new() { Address = 101, HighByte = 0x00, LowByte = 0x00 },
|
||||
new() { Address = 102, HighByte = 0x01, LowByte = 0x02 },
|
||||
new() { Address = 103, HighByte = 0x03, LowByte = 0x04 }
|
||||
};
|
||||
|
||||
// Act
|
||||
@@ -211,10 +211,10 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister { Address = 103, HighByte = 0x00, LowByte = 0x00 },
|
||||
new HoldingRegister { Address = 102, HighByte = 0x00, LowByte = 0x00 },
|
||||
new HoldingRegister { Address = 101, HighByte = 0x01, LowByte = 0x02 },
|
||||
new HoldingRegister { Address = 100, HighByte = 0x03, LowByte = 0x04 }
|
||||
new() { Address = 103, HighByte = 0x00, LowByte = 0x00 },
|
||||
new() { Address = 102, HighByte = 0x00, LowByte = 0x00 },
|
||||
new() { Address = 101, HighByte = 0x01, LowByte = 0x02 },
|
||||
new() { Address = 100, HighByte = 0x03, LowByte = 0x04 }
|
||||
};
|
||||
|
||||
// Act
|
||||
@@ -240,9 +240,9 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister { Address = 101, HighByte = 0x00, LowByte = 0x00 },
|
||||
new HoldingRegister { Address = 102, HighByte = 0x01, LowByte = 0x02 },
|
||||
new HoldingRegister { Address = 103, HighByte = 0x03, LowByte = 0x04 }
|
||||
new() { Address = 101, HighByte = 0x00, LowByte = 0x00 },
|
||||
new() { Address = 102, HighByte = 0x01, LowByte = 0x02 },
|
||||
new() { Address = 103, HighByte = 0x03, LowByte = 0x04 }
|
||||
};
|
||||
|
||||
// Act + Assert
|
||||
@@ -257,10 +257,10 @@
|
||||
// Arrange
|
||||
var registers = new HoldingRegister[]
|
||||
{
|
||||
new HoldingRegister { Address = 100, HighByte = 0x00, LowByte = 0x00 },
|
||||
new HoldingRegister { Address = 101, HighByte = 0x00, LowByte = 0x00 },
|
||||
new HoldingRegister { Address = 102, HighByte = 0x01, LowByte = 0x02 },
|
||||
new HoldingRegister { Address = 103, HighByte = 0x03, LowByte = 0x04 }
|
||||
new() { Address = 100, HighByte = 0x00, LowByte = 0x00 },
|
||||
new() { Address = 101, HighByte = 0x00, LowByte = 0x00 },
|
||||
new() { Address = 102, HighByte = 0x01, LowByte = 0x02 },
|
||||
new() { Address = 103, HighByte = 0x03, LowByte = 0x04 }
|
||||
};
|
||||
|
||||
// Act + Assert
|
||||
@@ -330,7 +330,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(5, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
@@ -352,7 +352,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(6, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
@@ -374,7 +374,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(4, registers.Count);
|
||||
Assert.HasCount(4, registers);
|
||||
|
||||
Assert.AreEqual(10, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
@@ -404,7 +404,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(4, registers.Count);
|
||||
Assert.HasCount(4, registers);
|
||||
|
||||
Assert.AreEqual(13, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
|
||||
@@ -330,7 +330,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(5, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
@@ -352,7 +352,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(6, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
@@ -374,7 +374,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(4, registers.Count);
|
||||
Assert.HasCount(4, registers);
|
||||
|
||||
Assert.AreEqual(10, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
@@ -404,7 +404,7 @@
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(4, registers.Count);
|
||||
Assert.HasCount(4, registers);
|
||||
|
||||
Assert.AreEqual(13, registers[0].Address);
|
||||
Assert.AreEqual(0x00, registers[0].HighByte);
|
||||
|
||||
@@ -133,7 +133,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Models
|
||||
.GetField("_coils", BindingFlags.NonPublic | BindingFlags.Instance)
|
||||
.GetValue(device)).ToArray();
|
||||
|
||||
Assert.AreEqual(1, coils.Length);
|
||||
Assert.HasCount(1, coils);
|
||||
Assert.AreEqual(111, coils.First());
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Models
|
||||
.GetField("_discreteInputs", BindingFlags.NonPublic | BindingFlags.Instance)
|
||||
.GetValue(device)).ToArray();
|
||||
|
||||
Assert.AreEqual(1, discreteInputs.Length);
|
||||
Assert.HasCount(1, discreteInputs);
|
||||
Assert.AreEqual(111, discreteInputs.First());
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Models
|
||||
.GetValue(device))
|
||||
.ToDictionary(x => x.Key, x => x.Value);
|
||||
|
||||
Assert.AreEqual(1, registers.Count);
|
||||
Assert.HasCount(1, registers);
|
||||
Assert.AreEqual(111, registers.First().Key);
|
||||
Assert.AreEqual(42, registers.First().Value);
|
||||
}
|
||||
@@ -279,7 +279,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Models
|
||||
.GetValue(device))
|
||||
.ToDictionary(x => x.Key, x => x.Value);
|
||||
|
||||
Assert.AreEqual(1, registers.Count);
|
||||
Assert.HasCount(1, registers);
|
||||
Assert.AreEqual(111, registers.First().Key);
|
||||
Assert.AreEqual(42, registers.First().Value);
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(coils);
|
||||
Assert.AreEqual(24, coils.Count);
|
||||
Assert.HasCount(24, coils);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -155,7 +155,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(discreteInputs);
|
||||
Assert.AreEqual(24, discreteInputs.Count);
|
||||
Assert.HasCount(24, discreteInputs);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -241,7 +241,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(555, registers[0].Value);
|
||||
@@ -323,7 +323,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(555, registers[0].Value);
|
||||
@@ -403,7 +403,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
Assert.AreEqual(moreAndIndividual, result.MoreRequestsNeeded);
|
||||
Assert.AreEqual(moreAndIndividual ? 0x05 : 0x00, result.NextObjectIdToRequest);
|
||||
|
||||
Assert.AreEqual(1, result.Objects.Count);
|
||||
Assert.HasCount(1, result.Objects);
|
||||
Assert.AreEqual(4, result.Objects.First().Key);
|
||||
CollectionAssert.AreEqual("AM"u8.ToArray(), result.Objects.First().Value);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(14, bytes.Count);
|
||||
Assert.HasCount(14, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -85,7 +85,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(coils);
|
||||
Assert.AreEqual(24, coils.Count);
|
||||
Assert.HasCount(24, coils);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -123,7 +123,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(14, bytes.Count);
|
||||
Assert.HasCount(14, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -187,7 +187,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(discreteInputs);
|
||||
Assert.AreEqual(24, discreteInputs.Count);
|
||||
Assert.HasCount(24, discreteInputs);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -225,7 +225,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(14, bytes.Count);
|
||||
Assert.HasCount(14, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -288,7 +288,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(555, registers[0].Value);
|
||||
@@ -322,7 +322,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(14, bytes.Count);
|
||||
Assert.HasCount(14, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -385,7 +385,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(555, registers[0].Value);
|
||||
@@ -423,7 +423,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(13, bytes.Count);
|
||||
Assert.HasCount(13, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -483,7 +483,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
Assert.AreEqual(moreAndIndividual, result.MoreRequestsNeeded);
|
||||
Assert.AreEqual(moreAndIndividual ? 0x05 : 0x00, result.NextObjectIdToRequest);
|
||||
|
||||
Assert.AreEqual(1, result.Objects.Count);
|
||||
Assert.HasCount(1, result.Objects);
|
||||
Assert.AreEqual(4, result.Objects.First().Key);
|
||||
CollectionAssert.AreEqual("AM"u8.ToArray(), result.Objects.First().Value);
|
||||
}
|
||||
@@ -526,7 +526,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(14, result.Count);
|
||||
Assert.HasCount(14, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
@@ -599,7 +599,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(14, result.Count);
|
||||
Assert.HasCount(14, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
@@ -679,7 +679,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(16, result.Count);
|
||||
Assert.HasCount(16, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
@@ -807,7 +807,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(19, result.Count);
|
||||
Assert.HasCount(19, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(8, bytes.Count);
|
||||
Assert.HasCount(8, bytes);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, bytes[0]);
|
||||
@@ -73,7 +73,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(coils);
|
||||
Assert.AreEqual(24, coils.Count);
|
||||
Assert.HasCount(24, coils);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -111,7 +111,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(8, bytes.Count);
|
||||
Assert.HasCount(8, bytes);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, bytes[0]);
|
||||
@@ -163,7 +163,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(coils);
|
||||
Assert.AreEqual(24, coils.Count);
|
||||
Assert.HasCount(24, coils);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -201,7 +201,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(8, bytes.Count);
|
||||
Assert.HasCount(8, bytes);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, bytes[0]);
|
||||
@@ -252,7 +252,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(555, registers[0].Value);
|
||||
@@ -286,7 +286,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(8, bytes.Count);
|
||||
Assert.HasCount(8, bytes);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, bytes[0]);
|
||||
@@ -337,7 +337,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(555, registers[0].Value);
|
||||
@@ -375,7 +375,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(7, bytes.Count);
|
||||
Assert.HasCount(7, bytes);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, bytes[0]);
|
||||
@@ -466,7 +466,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(8, result.Count);
|
||||
Assert.HasCount(8, result);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, result[0]);
|
||||
@@ -527,7 +527,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(8, result.Count);
|
||||
Assert.HasCount(8, result);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, result[0]);
|
||||
@@ -595,7 +595,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(10, result.Count);
|
||||
Assert.HasCount(10, result);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, result[0]);
|
||||
@@ -711,7 +711,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(13, result.Count);
|
||||
Assert.HasCount(13, result);
|
||||
|
||||
// Unit id
|
||||
Assert.AreEqual(UNIT_ID, result[0]);
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(12, bytes.Count);
|
||||
Assert.HasCount(12, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -83,7 +83,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(coils);
|
||||
Assert.AreEqual(24, coils.Count);
|
||||
Assert.HasCount(24, coils);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -121,7 +121,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(12, bytes.Count);
|
||||
Assert.HasCount(12, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -183,7 +183,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(inputs);
|
||||
Assert.AreEqual(24, inputs.Count);
|
||||
Assert.HasCount(24, inputs);
|
||||
|
||||
for (int i = 0; i < 24; i++)
|
||||
{
|
||||
@@ -221,7 +221,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(12, bytes.Count);
|
||||
Assert.HasCount(12, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -282,7 +282,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(555, registers[0].Value);
|
||||
@@ -316,7 +316,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(12, bytes.Count);
|
||||
Assert.HasCount(12, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -377,7 +377,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(registers);
|
||||
Assert.AreEqual(2, registers.Count);
|
||||
Assert.HasCount(2, registers);
|
||||
|
||||
Assert.AreEqual(0, registers[0].Address);
|
||||
Assert.AreEqual(554, registers[0].Value);
|
||||
@@ -415,7 +415,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(bytes);
|
||||
Assert.AreEqual(11, bytes.Count);
|
||||
Assert.HasCount(11, bytes);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, bytes[0]);
|
||||
@@ -516,7 +516,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(12, result.Count);
|
||||
Assert.HasCount(12, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
@@ -587,7 +587,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(12, result.Count);
|
||||
Assert.HasCount(12, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
@@ -665,7 +665,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(14, result.Count);
|
||||
Assert.HasCount(14, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
@@ -791,7 +791,7 @@ namespace AMWD.Protocols.Modbus.Tests.Common.Protocols
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(17, result.Count);
|
||||
Assert.HasCount(17, result);
|
||||
|
||||
// Transaction id
|
||||
Assert.AreEqual(0x00, result[0]);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -13,6 +13,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
[TestClass]
|
||||
public class ModbusTcpConnectionTest
|
||||
{
|
||||
public TestContext TestContext { get; set; }
|
||||
|
||||
private readonly string _hostname = "127.0.0.1";
|
||||
|
||||
private Mock<TcpClientWrapper> _tcpClientMock;
|
||||
@@ -50,7 +52,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
_networkResponseQueue.Enqueue(expectedResponse);
|
||||
|
||||
var connection = GetTcpConnection();
|
||||
await connection.InvokeAsync(request, validation);
|
||||
await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
|
||||
|
||||
_tcpClientMock.Invocations.Clear();
|
||||
_networkStreamMock.Invocations.Clear();
|
||||
@@ -119,7 +121,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
connection.Dispose();
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(() => connection.InvokeAsync(null, null));
|
||||
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(() => connection.InvokeAsync(null, null, TestContext.CancellationToken));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -131,7 +133,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
var connection = GetConnection();
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null));
|
||||
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null, TestContext.CancellationToken));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -142,7 +144,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
var connection = GetConnection();
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null));
|
||||
await Assert.ThrowsExactlyAsync<ArgumentNullException>(() => connection.InvokeAsync(request, null, TestContext.CancellationToken));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -157,7 +159,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
var connection = GetConnection();
|
||||
|
||||
// Act
|
||||
var response = await connection.InvokeAsync(request, validation);
|
||||
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
@@ -195,8 +197,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
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);
|
||||
@@ -228,7 +230,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
var connection = GetConnection();
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<EndOfStreamException>(() => connection.InvokeAsync(request, validation));
|
||||
await Assert.ThrowsExactlyAsync<EndOfStreamException>(() => connection.InvokeAsync(request, validation, TestContext.CancellationToken));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -245,7 +247,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
connection.GetType().GetField("_hostname", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(connection, "");
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<ApplicationException>(() => connection.InvokeAsync(request, validation));
|
||||
await Assert.ThrowsExactlyAsync<ApplicationException>(() => connection.InvokeAsync(request, validation, TestContext.CancellationToken));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -266,8 +268,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
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);
|
||||
@@ -306,7 +308,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
var connection = GetConnection();
|
||||
|
||||
// Act
|
||||
var response = await connection.InvokeAsync(request, validation);
|
||||
var response = await connection.InvokeAsync(request, validation, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
@@ -338,12 +340,12 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
var connection = GetConnection();
|
||||
_networkStreamMock
|
||||
.Setup(ns => ns.WriteAsync(It.IsAny<ReadOnlyMemory<byte>>(), It.IsAny<CancellationToken>()))
|
||||
.Returns(new ValueTask(Task.Delay(100)));
|
||||
.Returns<ReadOnlyMemory<byte>, CancellationToken>((_, ct) => new ValueTask(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;
|
||||
});
|
||||
@@ -360,7 +362,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
var connection = GetConnection();
|
||||
_networkStreamMock
|
||||
.Setup(ns => ns.WriteAsync(It.IsAny<ReadOnlyMemory<byte>>(), It.IsAny<CancellationToken>()))
|
||||
.Returns(new ValueTask(Task.Delay(100)));
|
||||
.Returns<ReadOnlyMemory<byte>, CancellationToken>((_, ct) => new ValueTask(Task.Delay(100, ct)));
|
||||
|
||||
// Act + Assert
|
||||
await Assert.ThrowsExactlyAsync<TaskCanceledException>(async () =>
|
||||
@@ -385,10 +387,10 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
_networkStreamMock
|
||||
.Setup(ns => ns.WriteAsync(It.IsAny<ReadOnlyMemory<byte>>(), It.IsAny<CancellationToken>()))
|
||||
.Callback<ReadOnlyMemory<byte>, CancellationToken>((req, _) => _networkRequestCallbacks.Add(req.ToArray()))
|
||||
.Returns(new ValueTask(Task.Delay(100)));
|
||||
.Returns<ReadOnlyMemory<byte>, CancellationToken>((_, ct) => new ValueTask(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();
|
||||
@@ -396,16 +398,10 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
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, _networkRequestCallbacks.Count);
|
||||
Assert.HasCount(1, _networkRequestCallbacks);
|
||||
CollectionAssert.AreEqual(request, _networkRequestCallbacks.First());
|
||||
CollectionAssert.AreEqual(expectedResponse, response.ToArray());
|
||||
|
||||
@@ -432,31 +428,18 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
_networkStreamMock
|
||||
.Setup(ns => ns.WriteAsync(It.IsAny<ReadOnlyMemory<byte>>(), It.IsAny<CancellationToken>()))
|
||||
.Callback<ReadOnlyMemory<byte>, CancellationToken>((req, _) => _networkRequestCallbacks.Add(req.ToArray()))
|
||||
.Returns(new ValueTask(Task.Delay(100)));
|
||||
.Returns<ReadOnlyMemory<byte>, CancellationToken>((_, ct) => new ValueTask(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, _networkRequestCallbacks.Count);
|
||||
Assert.HasCount(1, _networkRequestCallbacks);
|
||||
CollectionAssert.AreEqual(request, _networkRequestCallbacks.First());
|
||||
|
||||
_tcpClientMock.Verify(c => c.Connected, Times.Once);
|
||||
|
||||
@@ -12,6 +12,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
[TestClass]
|
||||
public class ModbusTcpProxyTest
|
||||
{
|
||||
public TestContext TestContext { get; set; }
|
||||
|
||||
private bool _connectClient;
|
||||
|
||||
private Mock<ModbusClientBase> _clientMock;
|
||||
@@ -138,8 +140,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await proxy.StopAsync();
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await proxy.StopAsync(TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -160,8 +162,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy(IPAddress.IPv6Loopback);
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await proxy.StopAsync();
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await proxy.StopAsync(TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.Socket, Times.Once);
|
||||
@@ -248,14 +250,14 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.Setup(m => m.AcceptTcpClientAsync(It.IsAny<CancellationToken>()))
|
||||
.Returns<CancellationToken>(async (ct) =>
|
||||
{
|
||||
await Task.Run(() => SpinWait.SpinUntil(() => _connectClient || ct.IsCancellationRequested));
|
||||
await Task.Run(() => SpinWait.SpinUntil(() => _connectClient || ct.IsCancellationRequested), ct);
|
||||
_connectClient = false;
|
||||
throw new Exception();
|
||||
});
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -277,8 +279,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
_tcpClientMock.Setup(m => m.GetStream()).Throws(new Exception());
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -306,8 +308,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -351,8 +353,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -390,8 +392,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -425,8 +427,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new Exception("Error ;-)"));
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -475,8 +477,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -514,8 +516,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -549,8 +551,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new Exception("Error ;-)"));
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -597,8 +599,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -636,8 +638,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -671,8 +673,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new Exception("Error ;-)"));
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -719,8 +721,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -758,8 +760,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -793,8 +795,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new Exception("Error ;-)"));
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -842,8 +844,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -882,8 +884,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -912,8 +914,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -945,8 +947,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -978,8 +980,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
|
||||
@@ -1018,8 +1020,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1064,8 +1066,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1119,8 +1121,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1163,8 +1165,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1207,8 +1209,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new ModbusException());
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1255,8 +1257,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1294,8 +1296,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1324,8 +1326,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1358,8 +1360,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1403,8 +1405,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new ModbusException());
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1447,8 +1449,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1486,8 +1488,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1517,8 +1519,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1562,8 +1564,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new ModbusException());
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1606,8 +1608,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1630,7 +1632,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
|
||||
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());
|
||||
@@ -1649,8 +1651,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1679,8 +1681,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1713,8 +1715,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1737,7 +1739,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
|
||||
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());
|
||||
@@ -1762,8 +1764,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new ModbusException());
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1786,7 +1788,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
|
||||
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());
|
||||
@@ -1810,8 +1812,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1834,7 +1836,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
|
||||
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());
|
||||
@@ -1853,8 +1855,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1883,8 +1885,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1917,8 +1919,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
using var proxy = GetProxy();
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1941,7 +1943,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
|
||||
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());
|
||||
@@ -1966,8 +1968,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.ThrowsAsync(new ModbusException());
|
||||
|
||||
// Act
|
||||
await proxy.StartAsync();
|
||||
await Task.Delay(100);
|
||||
await proxy.StartAsync(TestContext.CancellationToken);
|
||||
await Task.Delay(100, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
_tcpListenerMock.VerifyGet(m => m.LocalIPEndPoint, Times.Once);
|
||||
@@ -1990,7 +1992,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
|
||||
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());
|
||||
@@ -2053,7 +2055,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.Setup(m => m.AcceptTcpClientAsync(It.IsAny<CancellationToken>()))
|
||||
.Returns<CancellationToken>(async (ct) =>
|
||||
{
|
||||
await Task.Run(() => SpinWait.SpinUntil(() => _connectClient || ct.IsCancellationRequested));
|
||||
await Task.Run(() => SpinWait.SpinUntil(() => _connectClient || ct.IsCancellationRequested), ct);
|
||||
ct.ThrowIfCancellationRequested();
|
||||
_connectClient = false;
|
||||
|
||||
@@ -2074,7 +2076,7 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp
|
||||
.Setup(m => m.ReadAsync(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
|
||||
.Returns<byte[], int, int, CancellationToken>(async (buffer, offset, count, ct) =>
|
||||
{
|
||||
await Task.Run(() => SpinWait.SpinUntil(() => _requestBytesQueue.Count > 0 || ct.IsCancellationRequested));
|
||||
await Task.Run(() => SpinWait.SpinUntil(() => _requestBytesQueue.Count > 0 || ct.IsCancellationRequested), ct);
|
||||
ct.ThrowIfCancellationRequested();
|
||||
|
||||
byte[] bytes = _requestBytesQueue.Dequeue();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
@@ -8,6 +8,8 @@
|
||||
<CollectCoverage>true</CollectCoverage>
|
||||
<CoverletOutputFormat>Cobertura</CoverletOutputFormat>
|
||||
|
||||
<NoWarn>$(NoWarn);CA1859;MSTEST0051</NoWarn>
|
||||
|
||||
<AssemblyOriginatorKeyFile>../../AMWD.Protocols.Modbus.snk</AssemblyOriginatorKeyFile>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -16,10 +18,10 @@
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.10.0" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.10.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="4.0.2" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="4.0.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.IO.Ports" Version="8.0.0" />
|
||||
<PackageReference Include="System.IO.Ports" Version="10.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.IO.Ports" Version="8.0.0" />
|
||||
<PackageReference Include="System.IO.Ports" Version="10.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<IsPackable>false</IsPackable>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||
|
||||
Reference in New Issue
Block a user