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