示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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.");
            }
        }