Files
lmxopcua/tests/Client/ZB.MOM.WW.OtOpcUa.Client.Shared.Tests/Models/ModelConstructionTests.cs
Joseph Doherty 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
docs: backfill XML documentation across 756 files
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.
2026-05-28 08:10:17 -04:00

141 lines
5.2 KiB
C#

using Opc.Ua;
using Shouldly;
using Xunit;
using ZB.MOM.WW.OtOpcUa.Client.Shared.Models;
using BrowseResult = ZB.MOM.WW.OtOpcUa.Client.Shared.Models.BrowseResult;
namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Tests.Models;
public class ModelConstructionTests
{
/// <summary>Verifies that BrowseResult constructs correctly with all properties.</summary>
[Fact]
public void BrowseResult_ConstructsCorrectly()
{
var result = new BrowseResult("ns=2;s=MyNode", "MyNode", "Variable", true);
result.NodeId.ShouldBe("ns=2;s=MyNode");
result.DisplayName.ShouldBe("MyNode");
result.NodeClass.ShouldBe("Variable");
result.HasChildren.ShouldBeTrue();
}
/// <summary>Verifies that BrowseResult correctly sets HasChildren to false.</summary>
[Fact]
public void BrowseResult_WithoutChildren()
{
var result = new BrowseResult("ns=2;s=Leaf", "Leaf", "Variable", false);
result.HasChildren.ShouldBeFalse();
}
/// <summary>Verifies that AlarmEventArgs constructs correctly with all properties.</summary>
[Fact]
public void AlarmEventArgs_ConstructsCorrectly()
{
var time = new DateTime(2026, 1, 15, 10, 30, 0, DateTimeKind.Utc);
var args = new AlarmEventArgs("Source1", "HighTemp", 500, "Temperature high", true, true, false, time);
args.SourceName.ShouldBe("Source1");
args.ConditionName.ShouldBe("HighTemp");
args.Severity.ShouldBe((ushort)500);
args.Message.ShouldBe("Temperature high");
args.Retain.ShouldBeTrue();
args.ActiveState.ShouldBeTrue();
args.AckedState.ShouldBeFalse();
args.Time.ShouldBe(time);
}
/// <summary>Verifies that RedundancyInfo constructs correctly with all properties.</summary>
[Fact]
public void RedundancyInfo_ConstructsCorrectly()
{
var uris = new[] { "urn:server1", "urn:server2" };
var info = new RedundancyInfo("Warm", 200, uris, "urn:server1");
info.Mode.ShouldBe("Warm");
info.ServiceLevel.ShouldBe((byte)200);
info.ServerUris.ShouldBe(uris);
info.ApplicationUri.ShouldBe("urn:server1");
}
/// <summary>Verifies that RedundancyInfo handles empty URIs correctly.</summary>
[Fact]
public void RedundancyInfo_WithEmptyUris()
{
var info = new RedundancyInfo("None", 0, [], string.Empty);
info.ServerUris.ShouldBeEmpty();
info.ApplicationUri.ShouldBeEmpty();
}
/// <summary>Verifies that DataChangedEventArgs constructs correctly with all properties.</summary>
[Fact]
public void DataChangedEventArgs_ConstructsCorrectly()
{
var value = new DataValue(new Variant(42), StatusCodes.Good);
var args = new DataChangedEventArgs("ns=2;s=Temp", value);
args.NodeId.ShouldBe("ns=2;s=Temp");
args.Value.ShouldBe(value);
args.Value.Value.ShouldBe(42);
}
/// <summary>Verifies that ConnectionStateChangedEventArgs constructs correctly with all properties.</summary>
[Fact]
public void ConnectionStateChangedEventArgs_ConstructsCorrectly()
{
var args = new ConnectionStateChangedEventArgs(
ConnectionState.Disconnected, ConnectionState.Connected, "opc.tcp://localhost:4840");
args.OldState.ShouldBe(ConnectionState.Disconnected);
args.NewState.ShouldBe(ConnectionState.Connected);
args.EndpointUrl.ShouldBe("opc.tcp://localhost:4840");
}
/// <summary>Verifies that ConnectionInfo constructs correctly with all properties.</summary>
[Fact]
public void ConnectionInfo_ConstructsCorrectly()
{
var info = new ConnectionInfo(
"opc.tcp://localhost:4840",
"TestServer",
"None",
"http://opcfoundation.org/UA/SecurityPolicy#None",
"ns=0;i=12345",
"TestSession");
info.EndpointUrl.ShouldBe("opc.tcp://localhost:4840");
info.ServerName.ShouldBe("TestServer");
info.SecurityMode.ShouldBe("None");
info.SecurityPolicyUri.ShouldBe("http://opcfoundation.org/UA/SecurityPolicy#None");
info.SessionId.ShouldBe("ns=0;i=12345");
info.SessionName.ShouldBe("TestSession");
}
/// <summary>Verifies that SecurityMode enum has the expected number of values.</summary>
[Fact]
public void SecurityMode_Enum_HasExpectedValues()
{
Enum.GetValues<SecurityMode>().Length.ShouldBe(3);
((int)SecurityMode.None).ShouldBe(0);
((int)SecurityMode.Sign).ShouldBe(1);
((int)SecurityMode.SignAndEncrypt).ShouldBe(2);
}
/// <summary>Verifies that ConnectionState enum has the expected number of values.</summary>
[Fact]
public void ConnectionState_Enum_HasExpectedValues()
{
Enum.GetValues<ConnectionState>().Length.ShouldBe(4);
((int)ConnectionState.Disconnected).ShouldBe(0);
((int)ConnectionState.Connecting).ShouldBe(1);
((int)ConnectionState.Connected).ShouldBe(2);
((int)ConnectionState.Reconnecting).ShouldBe(3);
}
/// <summary>Verifies that AggregateType enum has the expected number of values.</summary>
[Fact]
public void AggregateType_Enum_HasExpectedValues()
{
Enum.GetValues<AggregateType>().Length.ShouldBe(7);
}
}