Files
Omika/tests/Omika.Tests/Observability/Correlation/ApiTelemetryContextEnricherTests.cs
2026-10-23 18:46:50 +02:00

88 lines
3.1 KiB
C#

using Omika.Core.Observability;
using Omika.Core.Observability.Diagnostic;
namespace Omika.Tests.Observability.Correlation;
public class ApiTelemetryContextEnricherTests
{
private sealed class RecordingTelemetry : IOmikaTelemetry
{
public OmikaEvent? Last { get; private set; }
public void Track(TelemetryEvent telemetryEvent) => Last = telemetryEvent;
public void Log(DiagnosticEvent diagnosticEvent) => Last = diagnosticEvent;
}
private static DeviceInfoSnapshot Snapshot() => new()
{
AppVersion = "1.0.0.0",
Platform = "Windows",
OperatingSystem = "Windows 11",
OperatingSystemVersion = "10.0"
};
[Fact]
public void Log_WithinRequestContext_EnrichesTraceSessionIdentityAndDevice()
{
var recorder = new RecordingTelemetry();
var traceContext = new TraceContext();
var requestContext = new RequestDiagnosticContext();
var enricher = new ApiTelemetryContextEnricher(recorder, traceContext, requestContext, Snapshot());
Guid traceId = Guid.NewGuid();
Guid sessionId = Guid.NewGuid();
using (traceContext.BeginTrace(traceId))
using (requestContext.Begin(traceId, sessionId))
{
requestContext.SetIdentity("device-1", "CLIENT01", "42", "7");
enricher.Log(new DiagnosticEvent { EventCode = TelemetryEventCodes.ApiHttpRequestStarted });
}
var @event = recorder.Last!;
Assert.Equal(traceId, @event.TraceId);
Assert.Equal(sessionId, @event.SessionId);
Assert.Equal("device-1", @event.DeviceId);
Assert.Equal("CLIENT01", @event.ClientId);
Assert.Equal("42", @event.UserId);
Assert.Equal("7", @event.CollaborateurId);
Assert.Equal("1.0.0.0", @event.AppVersion);
Assert.Equal("Windows", @event.Platform);
}
[Fact]
public void Track_OutsideRequestContext_StillEnrichesDeviceInfo()
{
var recorder = new RecordingTelemetry();
var traceContext = new TraceContext();
var requestContext = new RequestDiagnosticContext();
var enricher = new ApiTelemetryContextEnricher(recorder, traceContext, requestContext, Snapshot());
enricher.Track(new TelemetryEvent { EventCode = TelemetryEventCodes.ApiHttpRequestStarted });
var @event = recorder.Last!;
Assert.Null(@event.TraceId);
Assert.Null(@event.SessionId);
Assert.Equal("1.0.0.0", @event.AppVersion);
}
[Fact]
public void Log_ExplicitTraceId_IsNotOverwritten()
{
var recorder = new RecordingTelemetry();
var traceContext = new TraceContext();
var requestContext = new RequestDiagnosticContext();
var enricher = new ApiTelemetryContextEnricher(recorder, traceContext, requestContext, Snapshot());
Guid explicitTrace = Guid.NewGuid();
enricher.Log(new DiagnosticEvent
{
EventCode = TelemetryEventCodes.ApiHttpRequestFailed,
TraceId = explicitTrace
});
Assert.Equal(explicitTrace, recorder.Last!.TraceId);
}
}