Files
2026-10-23 18:46:50 +02:00

78 lines
2.0 KiB
C#

using Omika.Core.Observability.Diagnostic;
namespace Omika.Tests.Observability.Diagnostic;
public class TraceContextTests
{
[Fact]
public void BeginTrace_SetsCurrentTraceId_AndDisposeRestores()
{
var context = new TraceContext();
Assert.Null(context.CurrentTraceId);
using (context.BeginTrace())
{
Assert.NotNull(context.CurrentTraceId);
Assert.NotEqual(Guid.Empty, context.CurrentTraceId!.Value);
}
Assert.Null(context.CurrentTraceId);
}
[Fact]
public void NestedScope_RestoresPreviousTrace()
{
var context = new TraceContext();
Guid outer = Guid.Parse("11111111-1111-1111-1111-111111111111");
Guid inner = Guid.Parse("22222222-2222-2222-2222-222222222222");
using (context.BeginTrace(outer))
{
using (context.BeginTrace(inner))
{
Assert.Equal(inner, context.CurrentTraceId);
}
Assert.Equal(outer, context.CurrentTraceId);
}
Assert.Null(context.CurrentTraceId);
}
[Fact]
public async Task AsyncFlow_PreservesTraceAcrossAwait()
{
var context = new TraceContext();
Guid trace = Guid.NewGuid();
using (context.BeginTrace(trace))
{
await Task.Delay(20);
Assert.Equal(trace, context.CurrentTraceId);
}
Assert.Null(context.CurrentTraceId);
}
[Fact]
public async Task AsyncParallel_NoTraceIdLeak()
{
var context = new TraceContext();
Guid first = Guid.NewGuid();
Guid second = Guid.NewGuid();
async Task RunAsync(Guid traceId)
{
using (context.BeginTrace(traceId))
{
await Task.Delay(30);
Assert.Equal(traceId, context.CurrentTraceId);
}
}
await Task.WhenAll(RunAsync(first), RunAsync(second));
Assert.Null(context.CurrentTraceId);
}
}