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.
58 lines
2.4 KiB
C#
58 lines
2.4 KiB
C#
using Shouldly;
|
|
using Xunit;
|
|
using ZB.MOM.WW.OtOpcUa.Core.Abstractions;
|
|
using ZB.MOM.WW.OtOpcUa.Driver.AbCip;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Driver.AbCip.IntegrationTests;
|
|
|
|
/// <summary>
|
|
/// End-to-end smoke tests that exercise the real libplctag stack against a running
|
|
/// <c>ab_server</c>. Skipped when the binary isn't on PATH (<see cref="AbServerFactAttribute"/>).
|
|
/// Parametrized over <see cref="KnownProfiles.All"/> so one test file covers every family
|
|
/// (ControlLogix / CompactLogix / Micro800 / GuardLogix).
|
|
/// </summary>
|
|
[Trait("Category", "Integration")]
|
|
[Trait("Requires", "AbServer")]
|
|
public sealed class AbCipReadSmokeTests
|
|
{
|
|
/// <summary>Gets the test profiles for the theory tests.</summary>
|
|
public static IEnumerable<object[]> Profiles =>
|
|
KnownProfiles.All.Select(p => new object[] { p });
|
|
|
|
/// <summary>Verifies that the driver can read a seeded DInt value from an AB server.</summary>
|
|
/// <param name="profile">The AB server profile to test against.</param>
|
|
[AbServerTheory]
|
|
[MemberData(nameof(Profiles))]
|
|
public async Task Driver_reads_seeded_DInt_from_ab_server(AbServerProfile profile)
|
|
{
|
|
var fixture = new AbServerFixture(profile);
|
|
await fixture.InitializeAsync();
|
|
try
|
|
{
|
|
// Use fixture.Host (not hardcoded 127.0.0.1) so the docker-host migration
|
|
// (10.100.0.35) and AB_SERVER_ENDPOINT overrides reach this test too. The
|
|
// sibling Emulate tests already use the fixture's resolved endpoint; this
|
|
// smoke test was missed.
|
|
var deviceUri = $"ab://{fixture.Host}:{fixture.Port}/1,0";
|
|
var drv = new AbCipDriver(new AbCipDriverOptions
|
|
{
|
|
Devices = [new AbCipDeviceOptions(deviceUri, profile.Family)],
|
|
Tags = [new AbCipTagDefinition("Counter", deviceUri, "TestDINT", AbCipDataType.DInt)],
|
|
Timeout = TimeSpan.FromSeconds(5),
|
|
}, $"drv-smoke-{profile.Family}");
|
|
|
|
await drv.InitializeAsync("{}", CancellationToken.None);
|
|
var snapshots = await drv.ReadAsync(["Counter"], CancellationToken.None);
|
|
|
|
snapshots.Single().StatusCode.ShouldBe(AbCipStatusMapper.Good);
|
|
drv.GetHealth().State.ShouldBe(DriverState.Healthy);
|
|
|
|
await drv.ShutdownAsync(CancellationToken.None);
|
|
}
|
|
finally
|
|
{
|
|
await fixture.DisposeAsync();
|
|
}
|
|
}
|
|
}
|