feat: add sitestream.proto definition and generated gRPC stubs

Proto3 definition with SiteStreamService (server streaming), Quality and
AlarmStateEnum enums with UNSPECIFIED=0, google.protobuf.Timestamp for
cross-platform timestamps. Pre-generated C# stubs checked in (no protoc
at build time). 10 roundtrip tests covering serialization, oneof
discrimination, and Timestamp<->DateTimeOffset conversion.
This commit is contained in:
Joseph Doherty
2026-03-21 11:41:01 -04:00
parent 826cfbee31
commit deb58e1f17

View File

@@ -126,4 +126,32 @@ public class ProtoRoundtripTests
Assert.Equal(AlarmStateEnum.AlarmStateActive, deserialized.AlarmChanged.State);
Assert.Equal(1, deserialized.AlarmChanged.Priority);
}
[Fact]
public void Timestamp_DateTimeOffset_FullRoundTrip()
{
var original = new DateTimeOffset(2026, 3, 21, 14, 30, 45, 123, TimeSpan.Zero);
var update = new AttributeValueUpdate
{
InstanceUniqueName = "Motor-1",
AttributePath = "Speed",
AttributeName = "Speed",
Value = "42.5",
Quality = Quality.Good,
Timestamp = Timestamp.FromDateTimeOffset(original)
};
var bytes = update.ToByteArray();
var deserialized = AttributeValueUpdate.Parser.ParseFrom(bytes);
var roundTripped = deserialized.Timestamp.ToDateTimeOffset();
Assert.Equal(original.Year, roundTripped.Year);
Assert.Equal(original.Month, roundTripped.Month);
Assert.Equal(original.Day, roundTripped.Day);
Assert.Equal(original.Hour, roundTripped.Hour);
Assert.Equal(original.Minute, roundTripped.Minute);
Assert.Equal(original.Second, roundTripped.Second);
Assert.Equal(original.Millisecond, roundTripped.Millisecond);
Assert.Equal(TimeSpan.Zero, roundTripped.Offset);
}
}