public void OnNext_RequestObserver_With_Null_Action_Value_And_Null_Controller_Value() { // Arrange var observer = new AspNetCoreDiagnosticListenerObserver(); var registry = new DefaultCollectorRegistry(); var factory = Metrics.WithCustomRegistry(registry); var listener = new DiagnosticListener("TestListener2"); listener.Subscribe(observer); var context = new DefaultHttpContext(); context.Request.Method = "GET"; context.Request.Path = new PathString("/api/test2"); context.Response.StatusCode = 200; var httpConnectionFeature = new HttpConnectionFeature { ConnectionId = "12345" }; context.Features.Set <IHttpConnectionFeature>(httpConnectionFeature); var routeData = new RouteData(); routeData.Values.Add("controller", null); routeData.Values.Add("action", null); // Act var activity = new Activity("Microsoft.AspNetCore.Hosting.HttpRequestIn"); listener.StartActivity(activity, new { HttpContext = context }); listener.Write("Microsoft.AspNetCore.Mvc.AfterAction", new { httpContext = context, routeData }); listener.StopActivity(activity, new { HttpContext = context }); // Assert var requestCounter = (Counter)observer.GetType().GetField("_requestCounter", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(observer); var requestSummary = (Summary)observer.GetType().GetField("_requestSummary", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(observer); var counterMetrics = requestCounter.Collect(); var summaryMetrics = requestSummary.Collect(); Assert.IsTrue(counterMetrics.First().metric.Any(p => p.label[1].value == "/api/test2")); Assert.IsNotNull(summaryMetrics.First().metric[0].summary); }
public void OnNext_RequestObserved_RequestStopEventReceived() { // Arrange var observer = new AspNetCoreDiagnosticListenerObserver(); var listener = new DiagnosticListener("TestListener"); listener.Subscribe(observer); var context = new DefaultHttpContext(); context.Request.Method = "GET"; context.Request.Path = new PathString("/api/test"); context.Response.StatusCode = 200; var httpConnectionFeature = new HttpConnectionFeature { ConnectionId = "1234" }; context.Features.Set <IHttpConnectionFeature>(httpConnectionFeature); var routeData = new RouteData(); routeData.Values.Add("controller", "test"); routeData.Values.Add("action", "get"); // Act // Create the activity, start it and immediately stop it. This will // cause the OnNext method in the observer to be called with the events // Microsoft.AspNetCore.Hosting.HttpRequestIn.Start and // Microsoft.AspNetCore.Hosting.HttpRequestIn.Stop. In addition, // Activity.Current will be managed by the listener. var activity = new Activity("Microsoft.AspNetCore.Hosting.HttpRequestIn"); listener.StartActivity(activity, new { HttpContext = context }); listener.Write("Microsoft.AspNetCore.Mvc.AfterAction", new { httpContext = context, routeData }); listener.StopActivity(activity, new { HttpContext = context }); // Assert var requestCounter = (Counter)observer.GetType().GetField("_requestCounter", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(observer); var requestSummary = (Summary)observer.GetType().GetField("_requestSummary", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(observer); var counterMetrics = requestCounter.Collect(); var summaryMetrics = requestSummary.Collect(); Assert.AreEqual(1, counterMetrics.First().metric.Count); Assert.AreEqual(1, counterMetrics.First().metric[0].counter.value); Assert.AreEqual(1, summaryMetrics.First().metric.Count); Assert.IsNotNull(summaryMetrics.First().metric[0].summary); }