public void IgnoreActiveSpan() { var tracer = TracerProvider.GetTracer(TracerName); var shim = new SpanBuilderShim(tracer, "foo"); // Add a parent. The shim requires that the ISpan implementation be a SpanShim shim.AsChildOf(new SpanShim(tracer.StartSpan(SpanName1))); // Set to Ignore shim.IgnoreActiveSpan(); // build var spanShim = (SpanShim)shim.Start(); Assert.Equal("foo", spanShim.Span.Activity.OperationName); }
public void AsChildOfWithSpanContext() { var tracerMock = GetDefaultTracerMock(); var shim = new SpanBuilderShim(tracerMock.Object, "foo"); // Add a parent var spanContext = SpanContextShimTests.GetSpanContextShim(); shim.AsChildOf(spanContext); // build shim.Start(); tracerMock.Verify(o => o.StartSpan("foo", spanContext.SpanContext, 0, It.Is <SpanCreationOptions>(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); }
public void AsChildOf_WithSpan() { var tracer = TracerProvider.GetTracer(TracerName); var shim = new SpanBuilderShim(tracer, "foo"); // Add a parent. var span = new SpanShim(tracer.StartSpan(SpanName1)); shim.AsChildOf(span); // build var spanShim = (SpanShim)shim.Start(); Assert.Equal("foo", spanShim.Span.Activity.OperationName); Assert.NotNull(spanShim.Span.Activity.ParentId); }
public void WithTag_KeyisErrorBoolValue() { var spanMock = Defaults.GetOpenTelemetrySpanMock(); var spanBuilderMock = GetDefaultSpanBuilderMock(spanMock); var shim = new SpanBuilderShim(GetDefaultTracer(spanBuilderMock), "foo"); shim.WithTag(global::OpenTracing.Tag.Tags.Error.Key, true); // build shim.Start(); // Not an attribute Assert.Empty(spanMock.Attributes); // Span status should be set Assert.Equal(Trace.Status.Unknown, spanMock.Status); }
public void StartWithExplicitTimestamp() { var tracerMock = GetDefaultTracerMock(); var shim = new SpanBuilderShim(tracerMock.Object, "foo"); var startTimestamp = DateTimeOffset.UtcNow; shim.WithStartTimestamp(startTimestamp); shim.Start(); tracerMock.Verify( o => o.StartSpan( "foo", It.IsAny <TelemetrySpan>(), 0, It.Is <SpanCreationOptions>(so => so.StartTimestamp == startTimestamp && !so.Links.Any())), Times.Once); }
public void IgnoreActiveSpan() { var tracerMock = GetDefaultTracerMock(); var shim = new SpanBuilderShim(tracerMock.Object, "foo"); // Add a parent. The shim requires that the ISpan implementation be a SpanShim shim.AsChildOf(new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object)); // Set to Ignore shim.IgnoreActiveSpan(); // build shim.Start(); tracerMock.Verify(o => o.StartRootSpan("foo", 0, It.Is <SpanCreationOptions>(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); }
public void AsChildOf_WithNullSpan() { var tracerMock = GetDefaultTracerMock(); var shim = new SpanBuilderShim(tracerMock.Object, "foo"); // Add a null parent shim.AsChildOf((global::OpenTracing.ISpan)null); // build shim.Start(); tracerMock.Verify( o => o.StartSpan( "foo", It.IsAny <TelemetrySpan>(), 0, It.Is <SpanCreationOptions>(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); }
public void AsChildOf_MultipleCallsWithSpanContext() { var tracerMock = GetDefaultTracerMock(); var shim = new SpanBuilderShim(tracerMock.Object, "foo"); // Multiple calls var spanContext1 = SpanContextShimTests.GetSpanContextShim(); var spanContext2 = SpanContextShimTests.GetSpanContextShim(); shim.AsChildOf(spanContext1); shim.AsChildOf(spanContext2); // build shim.Start(); tracerMock.Verify(o => o.StartSpan("foo", spanContext1.SpanContext, 0, It.Is <SpanCreationOptions>(so => so.StartTimestamp == default && so.Links.Single().Context.Equals(spanContext2.SpanContext))), Times.Once); }
public void WithTag_VariousValueTypes() { var spanMock = Defaults.GetOpenTelemetrySpanMock(); var shim = new SpanBuilderShim(GetDefaultTracerMock(spanMock).Object, "foo"); shim.WithTag("foo", "unused"); shim.WithTag("bar", false); shim.WithTag("baz", 1); shim.WithTag("bizzle", 1D); shim.WithTag(new global::OpenTracing.Tag.BooleanTag("shnizzle"), true); shim.WithTag(new global::OpenTracing.Tag.IntOrStringTag("febrizzle"), "unused"); shim.WithTag(new global::OpenTracing.Tag.StringTag("mobizzle"), "unused"); // build shim.Start(); // Just verify the count Assert.Equal(7, spanMock.Attributes.Count); }
public void WithTag_VariousValueTypes() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new SpanBuilderShim(tracer, "foo"); shim.WithTag("foo", "unused"); shim.WithTag("bar", false); shim.WithTag("baz", 1); shim.WithTag("bizzle", 1D); shim.WithTag(new global::OpenTracing.Tag.BooleanTag("shnizzle"), true); shim.WithTag(new global::OpenTracing.Tag.IntOrStringTag("febrizzle"), "unused"); shim.WithTag(new global::OpenTracing.Tag.StringTag("mobizzle"), "unused"); // build var spanShim = (SpanShim)shim.Start(); // Just verify the count Assert.Equal(7, spanShim.Span.Activity.Tags.Count()); }
public void AsChildOf_WithSpan() { var tracerMock = GetDefaultTracerMock(); var shim = new SpanBuilderShim(tracerMock.Object, "foo"); // Add a parent. var span = new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object); shim.AsChildOf(span); // build shim.Start(); tracerMock.Verify( o => o.StartSpan( "foo", span.Span, 0, It.Is <SpanCreationOptions>(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); }
public void Start_ActivityOperationRootSpanChecks() { // matching root operation name var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new SpanBuilderShim(tracer, "foo", new List <string> { "foo" }); var spanShim = (SpanShim)shim.Start(); Assert.Equal("foo", spanShim.Span.Activity.OperationName); // mis-matched root operation name shim = new SpanBuilderShim(tracer, "foo", new List <string> { "bar" }); spanShim = (SpanShim)shim.Start(); Assert.Equal("foo", spanShim.Span.Activity.OperationName); Assert.Equal("foo", spanShim.Span.Activity.Parent.OperationName); }
public void AsChildOf_MultipleCallsWithSpan() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new SpanBuilderShim(tracer, "foo"); // Multiple calls var span1 = new SpanShim(tracer.StartSpan(SpanName1)); var span2 = new SpanShim(tracer.StartSpan(SpanName2)); shim.AsChildOf(span1); shim.AsChildOf(span2); // build var spanShim = (SpanShim)shim.Start(); Assert.Equal("foo", spanShim.Span.Activity.OperationName); Assert.Contains(spanShim.Context.TraceId, spanShim.Span.Activity.TraceId.ToHexString()); // TODO: Check for multi level parenting }
public void AsChildOf_MultipleCallsWithSpan() { var spanBuilderMock = GetDefaultSpanBuilderMock(); var shim = new SpanBuilderShim(GetDefaultTracer(spanBuilderMock), "foo"); // Multiple calls var span1 = new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object); var span2 = new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object); shim.AsChildOf(span1); shim.AsChildOf(span2); // build shim.Start(); spanBuilderMock.Verify(o => o.SetParent(span1.Span), Times.Once); spanBuilderMock.Verify(o => o.SetParent(It.IsAny <Trace.SpanContext>()), Times.Never); // The rest become links spanBuilderMock.Verify(o => o.AddLink(It.Is <Trace.ILink>(link => link.Context == span2.Span.Context)), Times.Once); }
public void IgnoreActiveSpan() { var spanBuilderMock = GetDefaultSpanBuilderMock(); var shim = new SpanBuilderShim(GetDefaultTracer(spanBuilderMock), "foo"); // Add a parent. The shim requires that the ISpan implementation be a SpanShim shim.AsChildOf(new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object)); // Set to Ignore shim.IgnoreActiveSpan(); spanBuilderMock.Verify(o => o.SetParent(It.IsAny <Trace.SpanContext>()), Times.Never); // There should be two methods calls to the underlying the builder. SetNoParent is last. int callOrder = 0; spanBuilderMock.Setup(x => x.SetParent(It.IsAny <Trace.ISpan>())).Callback(() => Assert.Equal(0, callOrder++)); spanBuilderMock.Setup(x => x.SetNoParent()).Callback(() => Assert.Equal(1, callOrder++)); // build shim.Start(); }
public void AsChildOf_MultipleCallsWithSpanContext() { var spanBuilderMock = GetDefaultSpanBuilderMock(); var shim = new SpanBuilderShim(GetDefaultTracer(spanBuilderMock), "foo"); // Multiple calls var spanContext1 = SpanContextShimTests.GetSpanContextShim(); var spanContext2 = SpanContextShimTests.GetSpanContextShim(); shim.AsChildOf(spanContext1); shim.AsChildOf(spanContext2); // build shim.Start(); // Only a single call to SetParent spanBuilderMock.Verify(o => o.SetParent(spanContext1.SpanContext), Times.Once); spanBuilderMock.Verify(o => o.SetParent(It.IsAny <Trace.ISpan>()), Times.Never); // The rest become links spanBuilderMock.Verify(o => o.AddLink(It.Is <Trace.ILink>(link => link.Context == spanContext2.SpanContext)), Times.Once); }
public void AsChildOf_MultipleCallsWithSpanContext() { var tracer = TracerProvider.Default.GetTracer(TracerName); var shim = new SpanBuilderShim(tracer, "foo"); // Multiple calls var spanContext1 = SpanContextShimTests.GetSpanContextShim(); var spanContext2 = SpanContextShimTests.GetSpanContextShim(); // Add parent context shim.AsChildOf(spanContext1); // Adds as link as parent context already exists shim.AsChildOf(spanContext2); // build var spanShim = (SpanShim)shim.Start(); Assert.Equal("foo", spanShim.Span.Activity.OperationName); Assert.Contains(spanContext1.TraceId, spanShim.Span.Activity.ParentId); Assert.Equal(spanContext2.SpanId, spanShim.Span.Activity.Links.First().Context.SpanId.ToHexString()); }
public void Start_ActivityOperationRootSpanChecks() { // Create an activity var activity = new System.Diagnostics.Activity("foo") .SetIdFormat(System.Diagnostics.ActivityIdFormat.W3C) .Start(); try { // matching root operation name var tracerMock = GetDefaultTracerMock(); var shim = new SpanBuilderShim(tracerMock.Object, "foo", new List <string> { "foo" }); shim.Start(); tracerMock.Verify(o => o.StartSpanFromActivity("foo", activity, 0, It.Is <IEnumerable <Link> >(links => !links.Any())), Times.Once); // mis-matched root operation name tracerMock = GetDefaultTracerMock(); shim = new SpanBuilderShim(tracerMock.Object, "foo", new List <string> { "bar" }); shim.Start(); tracerMock.Verify( o => o.StartSpan( "foo", It.IsAny <TelemetrySpan>(), 0, It.Is <SpanCreationOptions>(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); } finally { activity.Stop(); } }