public void SpanContextIsNotNull()
        {
            var shim = new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object);

            // ISpanContext validation handled in a separate test class
            Assert.NotNull(shim.Context);
        }
        public void FinishSpan()
        {
            var spanMock = Defaults.GetOpenTelemetryMockSpan();
            var shim     = new SpanShim(spanMock.Object);

            shim.Finish();

            spanMock.Verify(o => o.End(), Times.Once());
        }
        public void GetBaggageItem()
        {
            var spanMock = Defaults.GetOpenTelemetryMockSpan();
            var shim     = new SpanShim(spanMock.Object);

            // parameter validation
            Assert.Throws <ArgumentNullException>(() => shim.GetBaggageItem(null));

            // TODO
        }
Example #4
0
        public void FinishSpanUsingSpecificTimestamp()
        {
            var spanMock = Defaults.GetOpenTelemetryMockSpan();
            var shim     = new SpanShim(spanMock.Object);

            var endTime = DateTimeOffset.UtcNow;

            shim.Finish(endTime);

            spanMock.Verify(o => o.End(endTime), Times.Once());
        }
        public void SetOperationName()
        {
            var spanMock = Defaults.GetOpenTelemetryMockSpan();
            var shim     = new SpanShim(spanMock.Object);

            // parameter validation
            Assert.Throws <ArgumentNullException>(() => shim.SetOperationName(null));

            shim.SetOperationName("bar");

            spanMock.Verify(o => o.UpdateName("bar"), 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,
Example #7
0
        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);
        }
Example #8
0
        public void AsChildOf_WithSpan()
        {
            var spanBuilderMock = GetDefaultSpanBuilderMock();
            var shim            = new SpanBuilderShim(GetDefaultTracer(spanBuilderMock), "foo");

            // Add a parent.
            var span = new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object);

            shim.AsChildOf(span);

            // build
            shim.Start();

            spanBuilderMock.Verify(o => o.SetParent(span.Span), Times.Once);
            spanBuilderMock.Verify(o => o.SetParent(It.IsAny <Trace.SpanContext>()), Times.Never);
        }
Example #9
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);
        }
Example #10
0
        public void AsChildOf_MultipleCallsWithSpan()
        {
            var tracerMock = GetDefaultTracerMock();
            var shim       = new SpanBuilderShim(tracerMock.Object, "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();

            tracerMock.Verify(o => o.StartSpan("foo", span1.Span, 0,
                                               It.Is <SpanCreationOptions>(so => so.StartTimestamp == default && so.Links.Single().Context.Equals(span2.Span.Context))), Times.Once);
        }
Example #11
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);
        }
Example #12
0
        public void Activate()
        {
            var tracerMock = new Mock <ITracer>();
            var shim       = new ScopeManagerShim(tracerMock.Object);
            var scopeMock  = new Mock <IDisposable>();
            var spanShim   = new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object);

            tracerMock.Setup(x => x.WithSpan(spanShim.Span)).Returns(scopeMock.Object);

            using (shim.Activate(spanShim, true))
            {
#if DEBUG
                Assert.Equal(1, shim.SpanScopeTableCount);
#endif
            }

#if DEBUG
            Assert.Equal(0, shim.SpanScopeTableCount);
#endif
            tracerMock.Verify(x => x.WithSpan(spanShim.Span), Times.Once);
            scopeMock.Verify(x => x.Dispose(), Times.Once);
        }
Example #13
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();
        }
        public void FinishSpanUsingSpecificTimestamp()
        {
            var shim = new SpanShim(Defaults.GetOpenTelemetryMockSpan().Object);

            Assert.Throws <NotImplementedException>(() => shim.Finish(DateTimeOffset.UtcNow));
        }