Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user