docs: backfill XML documentation across 756 files
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
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
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.
This commit is contained in:
+64
@@ -28,37 +28,93 @@ public sealed class PipeRoundTripTests
|
||||
|
||||
private sealed class FakeHistorian : IHistorianDataSource
|
||||
{
|
||||
/// <summary>Gets or sets the raw samples to return from reads.</summary>
|
||||
public List<HistorianSample> RawSamples { get; set; } = new();
|
||||
|
||||
/// <summary>Gets or sets the aggregate samples to return from reads.</summary>
|
||||
public List<HistorianAggregateSample> AggregateSamples { get; set; } = new();
|
||||
|
||||
/// <summary>Gets or sets the at-time samples to return from reads.</summary>
|
||||
public List<HistorianSample> AtTimeSamples { get; set; } = new();
|
||||
|
||||
/// <summary>Gets or sets the events to return from reads.</summary>
|
||||
public List<BackendHistorianEventDto> Events { get; set; } = new();
|
||||
|
||||
/// <summary>Gets or sets an exception to throw from read operations.</summary>
|
||||
public Exception? ThrowFromRead { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Reads raw samples from the fake historian or throws if configured.
|
||||
/// </summary>
|
||||
/// <param name="tagName">The tag name.</param>
|
||||
/// <param name="startTime">The start time.</param>
|
||||
/// <param name="endTime">The end time.</param>
|
||||
/// <param name="maxValues">The maximum number of values to return.</param>
|
||||
/// <param name="ct">Cancellation token.</param>
|
||||
/// <returns>The raw samples.</returns>
|
||||
public Task<List<HistorianSample>> ReadRawAsync(string tagName, DateTime startTime, DateTime endTime, int maxValues, CancellationToken ct = default)
|
||||
{
|
||||
if (ThrowFromRead is not null) throw ThrowFromRead;
|
||||
return Task.FromResult(RawSamples);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads aggregate samples from the fake historian.
|
||||
/// </summary>
|
||||
/// <param name="tagName">The tag name.</param>
|
||||
/// <param name="startTime">The start time.</param>
|
||||
/// <param name="endTime">The end time.</param>
|
||||
/// <param name="intervalMs">The interval in milliseconds.</param>
|
||||
/// <param name="aggregateColumn">The aggregate column name.</param>
|
||||
/// <param name="ct">Cancellation token.</param>
|
||||
/// <returns>The aggregate samples.</returns>
|
||||
public Task<List<HistorianAggregateSample>> ReadAggregateAsync(string tagName, DateTime startTime, DateTime endTime, double intervalMs, string aggregateColumn, CancellationToken ct = default)
|
||||
=> Task.FromResult(AggregateSamples);
|
||||
|
||||
/// <summary>
|
||||
/// Reads at-time samples from the fake historian.
|
||||
/// </summary>
|
||||
/// <param name="tagName">The tag name.</param>
|
||||
/// <param name="timestamps">The timestamps to read at.</param>
|
||||
/// <param name="ct">Cancellation token.</param>
|
||||
/// <returns>The at-time samples.</returns>
|
||||
public Task<List<HistorianSample>> ReadAtTimeAsync(string tagName, DateTime[] timestamps, CancellationToken ct = default)
|
||||
=> Task.FromResult(AtTimeSamples);
|
||||
|
||||
/// <summary>
|
||||
/// Reads events from the fake historian.
|
||||
/// </summary>
|
||||
/// <param name="sourceName">The event source name.</param>
|
||||
/// <param name="startTime">The start time.</param>
|
||||
/// <param name="endTime">The end time.</param>
|
||||
/// <param name="maxEvents">The maximum number of events to return.</param>
|
||||
/// <param name="ct">Cancellation token.</param>
|
||||
/// <returns>The events.</returns>
|
||||
public Task<List<BackendHistorianEventDto>> ReadEventsAsync(string? sourceName, DateTime startTime, DateTime endTime, int maxEvents, CancellationToken ct = default)
|
||||
=> Task.FromResult(Events);
|
||||
|
||||
/// <summary>Gets a health snapshot of the fake historian.</summary>
|
||||
/// <returns>A health snapshot.</returns>
|
||||
public HistorianHealthSnapshot GetHealthSnapshot() => new();
|
||||
|
||||
/// <summary>Disposes the fake historian.</summary>
|
||||
public void Dispose() { }
|
||||
}
|
||||
|
||||
private sealed class FakeAlarmWriter : IAlarmEventWriter
|
||||
{
|
||||
/// <summary>Gets the events received by this writer.</summary>
|
||||
public List<AlarmHistorianEventDto> Received { get; } = new();
|
||||
|
||||
/// <summary>Gets or sets a delegate that decides whether each event should be marked as successfully written.</summary>
|
||||
public Func<AlarmHistorianEventDto, bool> Decide { get; set; } = _ => true;
|
||||
|
||||
/// <summary>
|
||||
/// Writes alarm events to the fake writer and returns per-event status based on the <see cref="Decide"/> delegate.
|
||||
/// </summary>
|
||||
/// <param name="events">The events to write.</param>
|
||||
/// <param name="cancellationToken">Cancellation token.</param>
|
||||
/// <returns>An array of booleans indicating success for each event.</returns>
|
||||
public Task<bool[]> WriteAsync(AlarmHistorianEventDto[] events, CancellationToken cancellationToken)
|
||||
{
|
||||
Received.AddRange(events);
|
||||
@@ -96,6 +152,7 @@ public sealed class PipeRoundTripTests
|
||||
return MessagePackSerializer.Deserialize<TReply>(frame.Value.Body);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that raw historian samples round-trip correctly through the frame handler.</summary>
|
||||
[Fact]
|
||||
public async Task ReadRaw_RoundTripsSamples()
|
||||
{
|
||||
@@ -125,6 +182,7 @@ public sealed class PipeRoundTripTests
|
||||
MessagePackSerializer.Deserialize<double>(reply.Samples[0].ValueBytes!).ShouldBe(42.0);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that read failures are properly surfaced as error replies.</summary>
|
||||
[Fact]
|
||||
public async Task ReadRaw_FailureSurfacesAsErrorReply()
|
||||
{
|
||||
@@ -140,6 +198,7 @@ public sealed class PipeRoundTripTests
|
||||
reply.Samples.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that processed (aggregate) historian samples round-trip correctly through the frame handler.</summary>
|
||||
[Fact]
|
||||
public async Task ReadProcessed_RoundTripsBuckets()
|
||||
{
|
||||
@@ -159,6 +218,7 @@ public sealed class PipeRoundTripTests
|
||||
reply.Buckets[1].Value.ShouldBeNull(); // unavailable bucket
|
||||
}
|
||||
|
||||
/// <summary>Verifies that at-time historian samples round-trip correctly through the frame handler.</summary>
|
||||
[Fact]
|
||||
public async Task ReadAtTime_RoundTripsSamples()
|
||||
{
|
||||
@@ -179,6 +239,7 @@ public sealed class PipeRoundTripTests
|
||||
reply.Samples.Length.ShouldBe(1);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that historian events round-trip correctly through the frame handler.</summary>
|
||||
[Fact]
|
||||
public async Task ReadEvents_RoundTripsEvents()
|
||||
{
|
||||
@@ -208,6 +269,7 @@ public sealed class PipeRoundTripTests
|
||||
reply.Events[0].Severity.ShouldBe((ushort)800);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that alarm events are routed to the writer and per-event status is returned.</summary>
|
||||
[Fact]
|
||||
public async Task WriteAlarmEvents_RoutesToWriter_AndReturnsPerEventStatus()
|
||||
{
|
||||
@@ -240,6 +302,7 @@ public sealed class PipeRoundTripTests
|
||||
alarmWriter.Received.Count.ShouldBe(2);
|
||||
}
|
||||
|
||||
/// <summary>Verifies that writing alarm events fails cleanly when no writer is configured.</summary>
|
||||
[Fact]
|
||||
public async Task WriteAlarmEvents_FailsCleanly_WhenNoWriterConfigured()
|
||||
{
|
||||
@@ -260,6 +323,7 @@ public sealed class PipeRoundTripTests
|
||||
reply.PerEventOk[0].ShouldBeFalse();
|
||||
}
|
||||
|
||||
/// <summary>Verifies that frame reader and writer preserve message kind and body through a round trip.</summary>
|
||||
[Fact]
|
||||
public async Task FrameReader_FrameWriter_RoundTripPreservesKindAndBody()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user