public void OriginHeader_RootSpanTag() { const ulong traceId = 9; const ulong spanId = 7; const int samplingPriority = SamplingPriorityValues.UserKeep; const string origin = "synthetics"; var propagatedContext = new SpanContext(traceId, spanId, samplingPriority, null, origin); Assert.Equal(origin, propagatedContext.Origin); var spanCreationSettings = new SpanCreationSettings() { Parent = propagatedContext }; using var firstScope = (Scope)_tracer.StartActive("First Span", spanCreationSettings); var firstSpan = (Span)firstScope.Span; Assert.True(firstSpan.IsRootSpan); Assert.Equal(origin, firstSpan.Context.Origin); Assert.Equal(origin, firstSpan.GetTag(Tags.Origin)); var spanCreationSettings2 = new SpanCreationSettings() { Parent = firstSpan.Context }; using var secondScope = (Scope)_tracer.StartActive("Child", spanCreationSettings2); var secondSpan = (Span)secondScope.Span; Assert.False(secondSpan.IsRootSpan); Assert.Equal(origin, secondSpan.Context.Origin); Assert.Equal(origin, secondSpan.GetTag(Tags.Origin)); }
public void OriginHeader_InjectFromChildSpan() { const ulong traceId = 9; const ulong spanId = 7; const int samplingPriority = SamplingPriorityValues.UserKeep; const string origin = "synthetics"; var propagatedContext = new SpanContext(traceId, spanId, samplingPriority, null, origin); var spanCreationSettings = new SpanCreationSettings() { Parent = propagatedContext }; using var firstScope = (Scope)_tracer.StartActive("First Span", spanCreationSettings); var firstSpan = firstScope.Span; var spanCreationSettings2 = new SpanCreationSettings() { Parent = firstSpan.Context }; using var secondScope = (Scope)_tracer.StartActive("Child", spanCreationSettings2); var secondSpan = secondScope.Span; IHeadersCollection headers = WebRequest.CreateHttp("http://localhost").Headers.Wrap(); SpanContextPropagator.Instance.Inject(secondSpan.Context, headers); var resultContext = SpanContextPropagator.Instance.Extract(headers); Assert.NotNull(resultContext); Assert.Equal(firstSpan.Context.Origin, resultContext.Origin); Assert.Equal(secondSpan.Context.Origin, resultContext.Origin); Assert.Equal(origin, resultContext.Origin); }
public void StartActive_SetStartTime_StartTimeIsProperlySet() { var startTime = new DateTimeOffset(2017, 01, 01, 0, 0, 0, TimeSpan.Zero); var spanCreationSettings = new SpanCreationSettings() { StartTime = startTime }; var scope = _tracer.StartActive("Operation", spanCreationSettings); var span = (Span)scope.Span; Assert.Equal(startTime, span.StartTime); }
public void StartActive_SetParentManually_ParentIsSet() { var parent = _tracer.StartSpan("Parent"); var spanCreationSettings = new SpanCreationSettings() { Parent = parent.Context }; var childScope = (Scope)_tracer.StartActive("Child", spanCreationSettings); var childSpan = childScope.Span; Assert.Equal(parent.Context, childSpan.Context.Parent); }
public void StartActive_NoFinishOnClose_SpanIsNotFinishedWhenScopeIsDisposed() { var spanCreationSettings = new SpanCreationSettings() { FinishOnClose = false }; var scope = (Scope)_tracer.StartActive("Operation", spanCreationSettings); var span = scope.Span; Assert.False(span.IsFinished); scope.Dispose(); Assert.False(span.IsFinished); Assert.Null(_tracer.ActiveScope); }
public void StartActive_NoFinishOnClose_SpanIsFinishedCorrectlyWhenSetFinishOnCloseAndScopeIsDisposed(bool newFinishOnClose) { var spanCreationSettings = new SpanCreationSettings() { FinishOnClose = false }; var scope = (Scope)_tracer.StartActive("Operation", spanCreationSettings); var span = scope.Span; Assert.False(span.IsFinished); scope.SetFinishOnClose(newFinishOnClose); scope.Dispose(); Assert.Equal(newFinishOnClose, span.IsFinished); Assert.Null(_tracer.ActiveScope); }
public void StartActive_SetParentManuallyFromExternalContext_ParentIsSet() { const ulong traceId = 11; const ulong parentId = 7; const int samplingPriority = SamplingPriorityValues.UserKeep; var parent = new SpanContext(traceId, parentId, (SamplingPriority)samplingPriority); var spanCreationSettings = new SpanCreationSettings() { Parent = parent }; var child = (Scope)_tracer.StartActive("Child", spanCreationSettings); var childSpan = child.Span; Assert.True(childSpan.IsRootSpan); Assert.Equal(traceId, parent.TraceId); Assert.Equal(parentId, parent.SpanId); Assert.Null(parent.TraceContext); Assert.Equal(parent, childSpan.Context.Parent); Assert.Equal(parentId, childSpan.Context.ParentId); Assert.NotNull(childSpan.Context.TraceContext); Assert.Equal(samplingPriority, childSpan.Context.TraceContext.SamplingPriority); }
public void ManuallyDistributedTrace_CarriesExpectedValues() { var tracer = TracerHelper.Create(); ulong traceId; ulong parentSpanId; string samplingPriorityText; var expectedSamplingPriority = SamplingPriorityValues.UserKeep; using (var scope = tracer.StartActive("manual.trace")) { scope.Span.SetTag(Tags.SamplingPriority, expectedSamplingPriority.ToString()); traceId = scope.Span.TraceId; using (var parentSpanOfDistributedTrace = tracer.StartActive("SortOrders")) { parentSpanId = scope.Span.SpanId; samplingPriorityText = parentSpanOfDistributedTrace.Span.GetTag(Tags.SamplingPriority); } } var distributedTraceContext = new SpanContext(traceId, parentSpanId); var secondTracer = TracerHelper.Create(); var spanCreationSettings = new SpanCreationSettings() { Parent = distributedTraceContext }; using (var scope = secondTracer.StartActive("manual.trace", spanCreationSettings)) { scope.Span.SetTag(Tags.SamplingPriority, samplingPriorityText); Assert.True(scope.Span.TraceId == traceId, "Trace ID must match the parent trace."); var actualSamplingPriorityText = scope.Span.GetTag(Tags.SamplingPriority); Assert.True(actualSamplingPriorityText.Equals(expectedSamplingPriority.ToString()), "Sampling priority of manual distributed trace must match the original trace."); } }