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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user