public void HttpRequestIn_PopulateSpan()
        {
            var tracer = GetTracer();

            IObserver <KeyValuePair <string, object> > observer = new AspNetCoreDiagnosticObserver(tracer);

            var context = new HostingApplication.Context {
                HttpContext = GetHttpContext()
            };

            observer.OnNext(new KeyValuePair <string, object>("Microsoft.AspNetCore.Hosting.HttpRequestIn.Start", context));

            var scope = tracer.ActiveScope;

            Assert.NotNull(scope);

            var span = scope.Span;

            Assert.NotNull(span);

            Assert.Equal("aspnet_core.request", span.OperationName);
            Assert.Equal("aspnet_core", span.GetTag(Tags.InstrumentationName));
            Assert.Equal(SpanTypes.Web, span.Type);
            Assert.Equal("GET /home/?/action", span.ResourceName);
            Assert.Equal(SpanKinds.Server, span.GetTag(Tags.SpanKind));
            Assert.Equal("GET", span.GetTag(Tags.HttpMethod));
            Assert.Equal("localhost", span.GetTag(Tags.HttpRequestHeadersHost));
            Assert.Equal("http://localhost/home/1/action", span.GetTag(Tags.HttpUrl));
            Assert.Equal(TracerConstants.Language, span.GetTag(Tags.Language));
        }
Beispiel #2
0
        public void BeforeActionEventDataIncompleteRequest()
        {
            const string initialSpanName = "testToForceCodePath";
            var          tracer          = GetTracer();

            using var scope = tracer.StartActive(initialSpanName);

            IObserver <KeyValuePair <string, object> > observer = new AspNetCoreDiagnosticObserver(tracer, new AspNetCoreDiagnosticOptions());

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupGet(r => r.RouteValues).Returns(new RouteValueDictionary {
                { "action", "Get" }
            });
            httpRequest.SetupGet(r => r.Method).Returns("GET");

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.Request).Returns(httpRequest.Object);

            const string finalSpanName    = "api/values/{id}";
            var          actionDescriptor = new ActionDescriptor()
            {
                AttributeRouteInfo = new AttributeRouteInfo {
                    Template = finalSpanName
                },
                RouteValues = new Dictionary <string, string> {
                    { "action", "Get" }
                },
            };

            var eventData = new BeforeActionEventData(
                actionDescriptor,
                httpContext.Object,
                new RouteData());

            var span = scope.Span;

            Assert.NotNull(span);
            Assert.Equal(initialSpanName, span.OperationName);
            observer.OnNext(new KeyValuePair <string, object>("Microsoft.AspNetCore.Mvc.BeforeAction", eventData));

            httpContext.VerifyAll();
            Assert.Equal(finalSpanName, span.OperationName);
            Assert.True(span.Tags.TryGetValue("http.method", out var httpMethod));
            Assert.Equal("GET", httpMethod);
        }
Beispiel #3
0
        public void HttpRequestIn_FilterRequest()
        {
            var tracer      = GetTracer();
            var httpContext = GetHttpContext();

            var options = new AspNetCoreDiagnosticOptions();

            options.IgnorePatterns.Add(h => object.ReferenceEquals(h, httpContext));

            IObserver <KeyValuePair <string, object> > observer = new AspNetCoreDiagnosticObserver(tracer, options);

            var context = new HostingApplication.Context {
                HttpContext = httpContext
            };

            observer.OnNext(new KeyValuePair <string, object>("Microsoft.AspNetCore.Hosting.HttpRequestIn.Start", context));

            var scope = tracer.ActiveScope;

            Assert.Null(scope);
        }