39 lines
1.8 KiB
C#
39 lines
1.8 KiB
C#
|
|
using Elsa.Diagnostics.OpenTelemetry.Models;
|
||
|
|
|
||
|
|
namespace Elsa.Diagnostics.OpenTelemetry.UnitTests.Providers;
|
||
|
|
|
||
|
|
public class OpenTelemetryTraceQueryTests
|
||
|
|
{
|
||
|
|
[Fact]
|
||
|
|
public async Task QueryTracesAsync_WhenFilteringByServiceName_ReturnsMatchingResourceTraces()
|
||
|
|
{
|
||
|
|
var context = new OpenTelemetryStoreTestContext();
|
||
|
|
var api = context.Resource("resource-api", "api");
|
||
|
|
var worker = context.Resource("resource-worker", "worker");
|
||
|
|
await context.WriteAsync(new OpenTelemetryBatch([api, worker], [context.Trace("trace-api", api.Id), context.Trace("trace-worker", worker.Id)], [], [], [], []));
|
||
|
|
|
||
|
|
var result = await context.Store.QueryTracesAsync(new OpenTelemetryTraceFilter { ServiceName = "api" });
|
||
|
|
|
||
|
|
Assert.Equal("trace-api", Assert.Single(result.Items).TraceId);
|
||
|
|
}
|
||
|
|
|
||
|
|
[Fact]
|
||
|
|
public async Task GetTraceAsync_ReturnsOrderedSpansResourcesAndTraceLogs()
|
||
|
|
{
|
||
|
|
var context = new OpenTelemetryStoreTestContext();
|
||
|
|
var resource = context.Resource("resource-api", "api");
|
||
|
|
var trace = context.Trace("trace-1", resource.Id);
|
||
|
|
var laterSpan = context.Span("span-record-2", trace.TraceId, "span-2", resource.Id, context.Now.AddSeconds(2));
|
||
|
|
var earlierSpan = context.Span("span-record-1", trace.TraceId, "span-1", resource.Id, context.Now.AddSeconds(1));
|
||
|
|
var log = context.Log("log-1", resource.Id, trace.TraceId);
|
||
|
|
await context.WriteAsync(new OpenTelemetryBatch([resource], [trace], [laterSpan, earlierSpan], [], [], [log]));
|
||
|
|
|
||
|
|
var detail = await context.Store.GetTraceAsync(trace.TraceId);
|
||
|
|
|
||
|
|
Assert.NotNull(detail);
|
||
|
|
Assert.Equal(["span-1", "span-2"], detail.Spans.Select(x => x.SpanId));
|
||
|
|
Assert.Equal(resource.Id, Assert.Single(detail.Resources).Id);
|
||
|
|
Assert.Equal(log.Id, Assert.Single(detail.Logs).Id);
|
||
|
|
}
|
||
|
|
}
|