64e3fbe035
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
Adds <summary>, <param>, <typeparam>, and <inheritdoc/> tags to public members surfaced by commentchecker — resolves 5,847 of 5,869 issues (99.6%) across three /fixdocs passes.
70 lines
2.6 KiB
C#
70 lines
2.6 KiB
C#
using CliFx.Infrastructure;
|
|
using Shouldly;
|
|
using Xunit;
|
|
using ZB.MOM.WW.OtOpcUa.Driver.Modbus.Cli.Commands;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.Cli.Tests;
|
|
|
|
/// <summary>
|
|
/// Covers Driver.Modbus.Cli-005: <c>probe</c> / <c>read</c> / <c>write</c> must swallow
|
|
/// <see cref="OperationCanceledException"/> so a Ctrl+C during InitializeAsync exits
|
|
/// cleanly instead of dumping a full stack trace through CliFx. <c>SubscribeCommand</c>
|
|
/// already handles this around its <c>Task.Delay</c>; these tests pin the same behaviour
|
|
/// to the connect/read/write commands.
|
|
/// The test pre-cancels the CliFx <see cref="FakeInMemoryConsole"/>; the driver's
|
|
/// <c>ConnectAsync</c> observes the token via <c>Dns.GetHostAddressesAsync</c> and throws
|
|
/// OCE before any socket I/O happens, so the test is hermetic — no real PLC needed.
|
|
/// </summary>
|
|
[Trait("Category", "Unit")]
|
|
public sealed class CommandCancellationTests
|
|
{
|
|
/// <summary>Verifies that probe command gracefully handles cancellation during initialization.</summary>
|
|
[Fact]
|
|
public async Task ProbeCommand_swallows_cancellation_during_initialize()
|
|
{
|
|
using var console = new FakeInMemoryConsole();
|
|
console.RequestCancellation(); // simulate Ctrl+C before ExecuteAsync runs
|
|
|
|
var sut = new ProbeCommand { Host = "127.0.0.1" };
|
|
|
|
await Should.NotThrowAsync(async () => await sut.ExecuteAsync(console));
|
|
}
|
|
|
|
/// <summary>Verifies that read command gracefully handles cancellation during initialization.</summary>
|
|
[Fact]
|
|
public async Task ReadCommand_swallows_cancellation_during_initialize()
|
|
{
|
|
using var console = new FakeInMemoryConsole();
|
|
console.RequestCancellation();
|
|
|
|
var sut = new ReadCommand
|
|
{
|
|
Host = "127.0.0.1",
|
|
Region = ModbusRegion.HoldingRegisters,
|
|
Address = 0,
|
|
DataType = ModbusDataType.UInt16,
|
|
};
|
|
|
|
await Should.NotThrowAsync(async () => await sut.ExecuteAsync(console));
|
|
}
|
|
|
|
/// <summary>Verifies that write command gracefully handles cancellation during initialization.</summary>
|
|
[Fact]
|
|
public async Task WriteCommand_swallows_cancellation_during_initialize()
|
|
{
|
|
using var console = new FakeInMemoryConsole();
|
|
console.RequestCancellation();
|
|
|
|
var sut = new WriteCommand
|
|
{
|
|
Host = "127.0.0.1",
|
|
Region = ModbusRegion.HoldingRegisters,
|
|
Address = 0,
|
|
DataType = ModbusDataType.UInt16,
|
|
Value = "42",
|
|
};
|
|
|
|
await Should.NotThrowAsync(async () => await sut.ExecuteAsync(console));
|
|
}
|
|
}
|