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"); }
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(); }
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); }
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 }