diff --git a/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs b/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs index f35fe70..4eb3061 100644 --- a/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs +++ b/src/ZB.MOM.WW.MxGateway.Tests/Contracts/ProtobufContractRoundTripTests.cs @@ -1332,6 +1332,56 @@ public sealed class ProtobufContractRoundTripTests Assert.Equal(kind, parsed.Kind); } + /// + /// Verifies that an carrying the + /// provider_status payload case round-trips and resolves to + /// . + /// + [Fact] + public void Feed_RoundTripsProviderStatus() + { + var since = Timestamp.FromDateTime(new DateTime(2026, 6, 13, 9, 0, 0, DateTimeKind.Utc)); + var original = new AlarmFeedMessage + { + ProviderStatus = new AlarmProviderStatus + { + Mode = AlarmProviderMode.Subtag, + Degraded = true, + Reason = "wnwrap poll failed 3x (HRESULT 0x80004005)", + Since = since, + }, + }; + + var parsed = AlarmFeedMessage.Parser.ParseFrom(original.ToByteArray()); + + Assert.Equal(original, parsed); + Assert.Equal(AlarmFeedMessage.PayloadOneofCase.ProviderStatus, parsed.PayloadCase); + Assert.True(parsed.ProviderStatus.Degraded); + Assert.Equal(AlarmProviderMode.Subtag, parsed.ProviderStatus.Mode); + } + + /// + /// Verifies that an carrying the + /// new degraded and source_provider provenance fields + /// round-trips with their values preserved. + /// + [Fact] + public void Transition_RoundTripsDegradedProvenance() + { + var t = new OnAlarmTransitionEvent + { + AlarmFullReference = "Galaxy!Area.Tank01.Level.HiHi", + TransitionKind = AlarmTransitionKind.Raise, + Degraded = true, + SourceProvider = AlarmProviderMode.Subtag, + }; + + var parsed = OnAlarmTransitionEvent.Parser.ParseFrom(t.ToByteArray()); + + Assert.True(parsed.Degraded); + Assert.Equal(AlarmProviderMode.Subtag, parsed.SourceProvider); + } + /// /// Verifies that an with kind /// and a populated