Resolve Worker.Tests-001 and Worker.Tests-002 code-review findings
Worker.Tests-001: StaMessagePump had no direct unit test. Added Sta/StaMessagePumpTests.cs — 8 STA-thread facts covering WaitForWorkOrMessages (wake-event signalled before/during the wait, timeout expiry, zero-timeout fast path, the QS_ALLINPUT posted-message wake path) and PumpPendingMessages drain counting. Worker.Tests-002: no test drove a COM event through the integrated sink -> mapper -> queue path. Added MxAccess/MxAccessBaseEventSinkTests.cs — 5 facts driving OnDataChange, OnWriteComplete, OperationComplete and OnBufferedDataChange through a real MxAccessBaseEventSink + mapper + queue and asserting the converted WorkerEvent lands in MxAccessEventQueue. The four COM event handlers were widened private -> internal and InternalsVisibleTo for MxGateway.Worker.Tests was added, mirroring MxAccessAlarmEventSink's existing test seam; no worker behavior changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -65,7 +65,14 @@ public sealed class MxAccessBaseEventSink : IMxAccessEventSink
|
||||
sessionId = string.Empty;
|
||||
}
|
||||
|
||||
private void OnDataChange(
|
||||
/// <summary>
|
||||
/// Handles the MXAccess <c>OnDataChange</c> COM event: converts the
|
||||
/// event arguments to a protobuf <see cref="Proto.MxEvent"/> and enqueues
|
||||
/// it. Subscribed to the COM object's event in <see cref="Attach"/>.
|
||||
/// Exposed <c>internal</c> so unit tests can drive the integrated
|
||||
/// sink → mapper → queue path without a live MXAccess COM event source.
|
||||
/// </summary>
|
||||
internal void OnDataChange(
|
||||
int hLMXServerHandle,
|
||||
int phItemHandle,
|
||||
object pvItemValue,
|
||||
@@ -84,7 +91,11 @@ public sealed class MxAccessBaseEventSink : IMxAccessEventSink
|
||||
statuses));
|
||||
}
|
||||
|
||||
private void OnWriteComplete(
|
||||
/// <summary>
|
||||
/// Handles the MXAccess <c>OnWriteComplete</c> COM event. Exposed
|
||||
/// <c>internal</c> as a unit-test seam; see <see cref="OnDataChange"/>.
|
||||
/// </summary>
|
||||
internal void OnWriteComplete(
|
||||
int hLMXServerHandle,
|
||||
int phItemHandle,
|
||||
ref MXSTATUS_PROXY[] pVars)
|
||||
@@ -97,7 +108,11 @@ public sealed class MxAccessBaseEventSink : IMxAccessEventSink
|
||||
statuses));
|
||||
}
|
||||
|
||||
private void OperationComplete(
|
||||
/// <summary>
|
||||
/// Handles the MXAccess <c>OperationComplete</c> COM event. Exposed
|
||||
/// <c>internal</c> as a unit-test seam; see <see cref="OnDataChange"/>.
|
||||
/// </summary>
|
||||
internal void OperationComplete(
|
||||
int hLMXServerHandle,
|
||||
int phItemHandle,
|
||||
ref MXSTATUS_PROXY[] pVars)
|
||||
@@ -110,7 +125,11 @@ public sealed class MxAccessBaseEventSink : IMxAccessEventSink
|
||||
statuses));
|
||||
}
|
||||
|
||||
private void OnBufferedDataChange(
|
||||
/// <summary>
|
||||
/// Handles the MXAccess <c>OnBufferedDataChange</c> COM event. Exposed
|
||||
/// <c>internal</c> as a unit-test seam; see <see cref="OnDataChange"/>.
|
||||
/// </summary>
|
||||
internal void OnBufferedDataChange(
|
||||
int hLMXServerHandle,
|
||||
int phItemHandle,
|
||||
MxDataType dtDataType,
|
||||
|
||||
@@ -14,6 +14,10 @@
|
||||
<PackageReference Include="Polly.Core" Version="8.6.6" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<InternalsVisibleTo Include="MxGateway.Worker.Tests" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\MxGateway.Contracts\MxGateway.Contracts.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
Reference in New Issue
Block a user