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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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();
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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();
            }
        }