From 7a820723e9d4f0089af0f6c422c7321bce71e4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Mon, 12 Jan 2026 18:32:15 +0100 Subject: [PATCH] Updated to .NET 10 --- .gitea/workflows/branch-build.yml | 5 +- .gitea/workflows/release-build.yml | 2 +- CHANGELOG.md | 1 + Directory.Build.props | 2 +- .../AMWD.Protocols.Modbus.Serial.csproj | 5 + .../Common/Contracts/ModbusClientBaseTest.cs | 54 ++--- .../Extensions/ModbusDecimalExtensionsTest.cs | 8 +- .../Common/Extensions/ModbusExtensionsTest.cs | 10 +- .../Extensions/ModbusSignedExtensionsTest.cs | 56 ++--- .../ModbusUnsignedExtensionsTest.cs | 8 +- .../Common/Models/ModbusDeviceTest.cs | 8 +- .../Common/Protocols/AsciiProtocolTest.cs | 10 +- .../Protocols/RtuOverTcpProtocolTest.cs | 28 +-- .../Common/Protocols/RtuProtocolTest.cs | 26 +-- .../Common/Protocols/TcpProtocolTest.cs | 26 +-- .../Serial/ModbusRtuProxyTest.cs | 114 +++++----- .../Serial/ModbusSerialConnectionTest.cs | 79 +++---- .../Tcp/ModbusTcpConnectionTest.cs | 71 +++--- .../Tcp/ModbusTcpProxyTest.cs | 204 +++++++++--------- test/Directory.Build.props | 10 +- tool/CliClient/CliClient.csproj | 2 +- tool/CliProxy/CliProxy.csproj | 2 +- tool/Directory.Build.props | 2 +- 23 files changed, 357 insertions(+), 376 deletions(-) diff --git a/.gitea/workflows/branch-build.yml b/.gitea/workflows/branch-build.yml index cff33a4..507d2f5 100644 --- a/.gitea/workflows/branch-build.yml +++ b/.gitea/workflows/branch-build.yml @@ -9,7 +9,7 @@ env: TZ: 'Europe/Berlin' LANG: 'de' CONFIGURATION: 'Debug' - CI_SERVER_HOST: ${{ gitea.server_url }} + GITEA_SERVER_URL: ${{ gitea.server_url }} jobs: build-test-deploy: @@ -23,7 +23,7 @@ jobs: - name: Setup dotnet uses: actions/setup-dotnet@v5 with: - dotnet-version: 8.x + dotnet-version: 10.x cache: false - name: Restore dependencies @@ -31,6 +31,7 @@ jobs: set -ex dotnet restore -v q dotnet tool restore -v q + echo "CI_SERVER_HOST=${GITEA_SERVER_URL#https://}" >> "$GITEA_ENV" - name: Setup tools run: | diff --git a/.gitea/workflows/release-build.yml b/.gitea/workflows/release-build.yml index c2bef32..34fb358 100644 --- a/.gitea/workflows/release-build.yml +++ b/.gitea/workflows/release-build.yml @@ -23,7 +23,7 @@ jobs: - name: Setup dotnet uses: actions/setup-dotnet@v5 with: - dotnet-version: 8.x + dotnet-version: 10.x cache: false - name: Restore dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index f85b067..23d0124 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/Directory.Build.props b/Directory.Build.props index 0fcd59b..9f4b1c0 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 12.0 + 14.0 {semvertag:main}{!:-dev} Modbus Protocol for .NET diff --git a/src/AMWD.Protocols.Modbus.Serial/AMWD.Protocols.Modbus.Serial.csproj b/src/AMWD.Protocols.Modbus.Serial/AMWD.Protocols.Modbus.Serial.csproj index 2db25bd..dfb6d8a 100644 --- a/src/AMWD.Protocols.Modbus.Serial/AMWD.Protocols.Modbus.Serial.csproj +++ b/src/AMWD.Protocols.Modbus.Serial/AMWD.Protocols.Modbus.Serial.csproj @@ -1,6 +1,7 @@  + netstandard2.0;net6.0;net8.0;net10.0 AMWD.Protocols.Modbus.Serial amwd-modbus-serial AMWD.Protocols.Modbus.Serial @@ -29,6 +30,10 @@ + + + + diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Contracts/ModbusClientBaseTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Contracts/ModbusClientBaseTest.cs index 7569670..80e67e8 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Contracts/ModbusClientBaseTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Contracts/ModbusClientBaseTest.cs @@ -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(() => client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT)); + await Assert.ThrowsExactlyAsync(() => 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(() => client.ReadCoilsAsync(UNIT_ID, START_ADDRESS, READ_COUNT)); + await Assert.ThrowsExactlyAsync(() => 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>(), It.IsAny, bool>>(), It.IsAny()), 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); diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusDecimalExtensionsTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusDecimalExtensionsTest.cs index e4b3c13..ef78874 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusDecimalExtensionsTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusDecimalExtensionsTest.cs @@ -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); diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusExtensionsTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusExtensionsTest.cs index 68aa05b..f87a4bd 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusExtensionsTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusExtensionsTest.cs @@ -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); diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusSignedExtensionsTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusSignedExtensionsTest.cs index 857f0d8..071d656 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusSignedExtensionsTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusSignedExtensionsTest.cs @@ -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); diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusUnsignedExtensionsTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusUnsignedExtensionsTest.cs index 9ff10a5..3470211 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusUnsignedExtensionsTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Extensions/ModbusUnsignedExtensionsTest.cs @@ -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); diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Models/ModbusDeviceTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Models/ModbusDeviceTest.cs index 226b3ce..cf93fb3 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Models/ModbusDeviceTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Models/ModbusDeviceTest.cs @@ -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); } diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/AsciiProtocolTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/AsciiProtocolTest.cs index 1deedd4..4cff70f 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/AsciiProtocolTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/AsciiProtocolTest.cs @@ -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); } diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuOverTcpProtocolTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuOverTcpProtocolTest.cs index e01ae6c..66b32c1 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuOverTcpProtocolTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuOverTcpProtocolTest.cs @@ -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]); diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuProtocolTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuProtocolTest.cs index acd2665..693c5d4 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuProtocolTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/RtuProtocolTest.cs @@ -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]); diff --git a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/TcpProtocolTest.cs b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/TcpProtocolTest.cs index 20b6d40..3913fcd 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/TcpProtocolTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Common/Protocols/TcpProtocolTest.cs @@ -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]); diff --git a/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusRtuProxyTest.cs b/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusRtuProxyTest.cs index c67fc69..cccc635 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusRtuProxyTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusRtuProxyTest.cs @@ -12,6 +12,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial [TestClass] public class ModbusRtuProxyTest { + public TestContext TestContext { get; set; } + private Mock _clientMock; private Mock _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(() => proxy.StartAsync()); + await Assert.ThrowsExactlyAsync(() => 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(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -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(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -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(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -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(), It.IsAny(), It.IsAny(), It.IsAny())) @@ -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(), It.IsAny(), It.IsAny(), It.IsAny())) .Callback((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(), It.IsAny(), It.IsAny())) @@ -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(), It.IsAny(), It.IsAny())) @@ -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(), It.IsAny>(), It.IsAny())) @@ -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(), It.IsAny>(), It.IsAny())) @@ -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()); diff --git a/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusSerialConnectionTest.cs b/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusSerialConnectionTest.cs index bedd491..6723648 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusSerialConnectionTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Serial/ModbusSerialConnectionTest.cs @@ -13,6 +13,8 @@ namespace AMWD.Protocols.Modbus.Tests.Serial [TestClass] public class ModbusSerialConnectionTest { + public TestContext TestContext { get; set; } + private Mock _serialPortMock; private bool _alwaysOpen; @@ -109,7 +111,7 @@ namespace AMWD.Protocols.Modbus.Tests.Serial connection.Dispose(); // Act + Assert - await Assert.ThrowsExactlyAsync(() => connection.InvokeAsync(null, null)); + await Assert.ThrowsExactlyAsync(() => 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(() => connection.InvokeAsync(request, null)); + await Assert.ThrowsExactlyAsync(() => 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(() => connection.InvokeAsync(request, null)); + await Assert.ThrowsExactlyAsync(() => 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(() => connection.InvokeAsync(request, validation)); + await Assert.ThrowsExactlyAsync(() => 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(), It.IsAny())) - .Returns(Task.Delay(100)); + .Returns((_, ct) => Task.Delay(100, ct)); // Act + Assert await Assert.ThrowsExactlyAsync(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(), It.IsAny())) - .Returns(Task.Delay(100)); + .Returns((_, ct) => Task.Delay(100, ct)); // Act + Assert await Assert.ThrowsExactlyAsync(async () => @@ -482,10 +484,10 @@ namespace AMWD.Protocols.Modbus.Tests.Serial _serialPortMock .Setup(ns => ns.WriteAsync(It.IsAny(), It.IsAny())) .Callback((req, _) => _serialLineRequestCallbacks.Add([.. req])) - .Returns(Task.Delay(100)); + .Returns((_, 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(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(), It.IsAny())) .Callback((req, _) => _serialLineRequestCallbacks.Add([.. req])) - .Returns(Task.Delay(100)); + .Returns((_, 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(async () => await taskToCancel); + await Assert.ThrowsExactlyAsync(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); diff --git a/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpConnectionTest.cs b/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpConnectionTest.cs index 9bb7fcd..4d350fd 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpConnectionTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpConnectionTest.cs @@ -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 _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(() => connection.InvokeAsync(null, null)); + await Assert.ThrowsExactlyAsync(() => 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(() => connection.InvokeAsync(request, null)); + await Assert.ThrowsExactlyAsync(() => 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(() => connection.InvokeAsync(request, null)); + await Assert.ThrowsExactlyAsync(() => 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(() => connection.InvokeAsync(request, validation)); + await Assert.ThrowsExactlyAsync(() => 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(() => connection.InvokeAsync(request, validation)); + await Assert.ThrowsExactlyAsync(() => 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>(), It.IsAny())) - .Returns(new ValueTask(Task.Delay(100))); + .Returns, CancellationToken>((_, ct) => new ValueTask(Task.Delay(100, ct))); // Act + Assert await Assert.ThrowsExactlyAsync(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>(), It.IsAny())) - .Returns(new ValueTask(Task.Delay(100))); + .Returns, CancellationToken>((_, ct) => new ValueTask(Task.Delay(100, ct))); // Act + Assert await Assert.ThrowsExactlyAsync(async () => @@ -385,10 +387,10 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp _networkStreamMock .Setup(ns => ns.WriteAsync(It.IsAny>(), It.IsAny())) .Callback, CancellationToken>((req, _) => _networkRequestCallbacks.Add(req.ToArray())) - .Returns(new ValueTask(Task.Delay(100))); + .Returns, 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(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>(), It.IsAny())) .Callback, CancellationToken>((req, _) => _networkRequestCallbacks.Add(req.ToArray())) - .Returns(new ValueTask(Task.Delay(100))); + .Returns, 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(async () => await taskToCancel); + await Assert.ThrowsExactlyAsync(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); diff --git a/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpProxyTest.cs b/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpProxyTest.cs index 1355daf..e86b5bd 100644 --- a/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpProxyTest.cs +++ b/test/AMWD.Protocols.Modbus.Tests/Tcp/ModbusTcpProxyTest.cs @@ -12,6 +12,8 @@ namespace AMWD.Protocols.Modbus.Tests.Tcp [TestClass] public class ModbusTcpProxyTest { + public TestContext TestContext { get; set; } + private bool _connectClient; private Mock _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())) .Returns(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())) .Returns(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(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(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(); diff --git a/test/Directory.Build.props b/test/Directory.Build.props index a12b23d..e4ed268 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -1,6 +1,6 @@ - net8.0 + net10.0 false false @@ -8,6 +8,8 @@ true Cobertura + $(NoWarn);CA1859;MSTEST0051 + ../../AMWD.Protocols.Modbus.snk @@ -16,10 +18,10 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + - - + + diff --git a/tool/CliClient/CliClient.csproj b/tool/CliClient/CliClient.csproj index e24b7a6..34bac77 100644 --- a/tool/CliClient/CliClient.csproj +++ b/tool/CliClient/CliClient.csproj @@ -9,7 +9,7 @@ - + diff --git a/tool/CliProxy/CliProxy.csproj b/tool/CliProxy/CliProxy.csproj index f6c14c7..7ed3343 100644 --- a/tool/CliProxy/CliProxy.csproj +++ b/tool/CliProxy/CliProxy.csproj @@ -9,7 +9,7 @@ - + diff --git a/tool/Directory.Build.props b/tool/Directory.Build.props index e746edb..241604b 100644 --- a/tool/Directory.Build.props +++ b/tool/Directory.Build.props @@ -2,7 +2,7 @@ Exe false - net8.0 + net10.0 true false