예제 #1
0
        public void SpansShouldHaveSamplingSetToFalseByDefault()
        {
            var span = Tracer.BuildSpan("foo").Start();

            span.Finish();

            span.Sampled.Should().BeFalse();
        }
        public void ShouldAddTagsToSpanBeingBuilt()
        {
            var span = (Span)Tracer.BuildSpan("op1").WithTag("foo", "bar").WithTag("baz", 1).Start();

            span.Finish();

            // grab the span from the collector (since this is the state it'll be reported in)
            Tracer.CollectedSpans.TryDequeue(out var finishedSpan).Should().BeTrue();
            finishedSpan.Tags.Count.Should().Be(2);
            finishedSpan.Tags["foo"].Should().Be("bar");
            finishedSpan.Tags["baz"].Should().Be("1");
        }
예제 #3
0
        public void ShouldIncludeAllChildSpansInSample()
        {
            var attemptedSpans = 100;
            var parentSpan     = Tracer.BuildSpan("bar").ForceIncludeInSample().Start();

            for (var i = 0; i < attemptedSpans - 1; i++)
            {
                var span = Tracer.BuildSpan("foo" + i).AsChildOf(parentSpan).Start();
                span.Finish();
            }

            parentSpan.Finish();

            var gatheredSpans = Tracer.CollectedSpans.ToArray();

            gatheredSpans.Length.Should().Be(attemptedSpans); // sampling should have filtered out some spans
            gatheredSpans.All(x => x.Sampled).Should().BeTrue();
        }
        public void SamplingBugFixShouldNotThrowExceptionNoOpSpanContextAddedAsReference()
        {
            var span1 = NoOpZipkinSpan.Instance;
            var span2 = Tracer.BuildSpan("foo").AsChildOf(span1).Start();

            // should safely ignore the span
            span2.TypedContext.ParentId.Should().BeNull();
        }
예제 #5
0
        public void CreateSpans()
        {
            for (var i = 0; i < SpanCount; i++)
            {
                using (_mockTracer.BuildSpan("test1").WithTag("foo", "bar").StartActive())
                {
                }
            }

            _opsCounter.Increment(SpanCount);
        }
        public void ShouldCreateChildSpansWithSameTraceId()
        {
            var span1 = (Span)Tracer.BuildSpan("op1").Start();
            var span2 = (Span)Tracer.BuildSpan("op1.op2").AsChildOf(span1).Start();

            span2.Finish();
            span1.Finish();

            // same trace IDs
            span1.TypedContext.TraceId.Should().Be(span2.TypedContext.TraceId);

            // different span IDs
            span1.TypedContext.SpanId.Should().NotBe(span2.TypedContext.SpanId);
            span1.OperationName.Should().NotBe(span2.OperationName);
        }
예제 #7
0
        public void ShouldPreferActiveSpanAsParent()
        {
            Tracer.BuildSpan("op1").Start().Finish();
            Tracer.CollectedSpans.Count.Should().Be(1);
            Tracer.CollectedSpans.TryDequeue(out var parent);

            using (var scope = Tracer.BuildSpan("op1").StartActive(true))
                using (var scope2 = Tracer.BuildSpan("op2").AsChildOf(parent).StartActive(true))
                {
                    Tracer.ActiveSpan.Should().Be(scope2.Span);
                }

            // verify that the scope disposal stuff actually works
            Tracer.CollectedSpans.Count.Should().Be(2);
            Tracer.CollectedSpans.TryDequeue(out var span1);
            Tracer.CollectedSpans.TryDequeue(out var span2);
            span1.OperationName.Should().Be("op2"); // inner span gets disposed first
            span2.OperationName.Should().Be("op1");
            span1.TypedContext.ParentId.Should()
            .Be(span2.TypedContext.SpanId);     // shouldn't be the specified parent from earlier
        }