using Opc.Ua; using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Protocol; using ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Adapters; namespace ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Tests; /// ScadaBridge#117: quality follows the StatusCode severity bits, not "== 0". public class OpcUaStatusCodeMappingTests { // SDK 2 (ScadaBridge#125): StatusCodes members are StatusCode structs, not constants, so the // cases are a TheoryData rather than InlineData. public static TheoryData Cases => new() { { StatusCodes.Good.Code, QualityCode.Good }, { StatusCodes.GoodLocalOverride.Code, QualityCode.Good }, { StatusCodes.GoodClamped.Code, QualityCode.Good }, { StatusCodes.Good.Code | 0x0480u, QualityCode.Good }, // info bits set { StatusCodes.Uncertain.Code, QualityCode.Uncertain }, { StatusCodes.UncertainLastUsableValue.Code, QualityCode.Uncertain }, { StatusCodes.UncertainSensorNotAccurate.Code, QualityCode.Uncertain }, { StatusCodes.Bad.Code, QualityCode.Bad }, { StatusCodes.BadNodeIdUnknown.Code, QualityCode.Bad }, { StatusCodes.BadResourceUnavailable.Code, QualityCode.Bad }, { 0xC0000000u, QualityCode.Bad }, }; [Theory] [MemberData(nameof(Cases))] public void MapStatusCode_UsesSeverityBits(uint code, QualityCode expected) => Assert.Equal(expected, OpcUaDataConnection.MapStatusCode(code)); }