88 lines
3.1 KiB
C#
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);
|
|
}
|
|
}
|