public void ProcessEvent_IgnoresUnknownEvent() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new AspNetCoreMvcViewObserver(opts, tracing); obs.ProcessEvent(string.Empty, new { viewContext = GetViewContext() }); }
public void ProcessEvent_IgnoresNulls() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new AspNetCoreMvcViewObserver(opts, tracing); obs.ProcessEvent(null, null); }
public void ProcessEvent_BeforeView_NoArgs() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new AspNetCoreMvcViewObserver(opts, tracing); var ctx = GetViewContext(); obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { }); Span span = AsyncLocalContext.CurrentSpan as Span; Assert.Null(span); Assert.Null(obs.Active); }
public void ProcessEvent_BeforeView_NoArgs() { var opts = GetOptions(); var tracing = new OpenTelemetryTracing(opts, null); var obs = new AspNetCoreMvcViewObserver(opts, tracing); var ctx = GetViewContext(); obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { }); var span = GetCurrentSpan(tracing.Tracer); Assert.Null(span); Assert.Null(obs.Active); }
public void ProcessEvent_AfterView_NoBeforeView() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new AspNetCoreMvcViewObserver(opts, tracing); obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_AFTERVIEW_EVENT, new { }); Span span = AsyncLocalContext.CurrentSpan as Span; Assert.Null(span); var spanContext = obs.Active; Assert.Null(spanContext); }
public void ProcessEvent_AfterView_NoBeforeView() { var opts = GetOptions(); var tracing = new OpenTelemetryTracing(opts, null); var obs = new AspNetCoreMvcViewObserver(opts, tracing); obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_AFTERVIEW_EVENT, new { }); var span = GetCurrentSpan(tracing.Tracer); Assert.Null(span); var spanContext = obs.Active; Assert.Null(spanContext); }
public void ProcessEvent_BeforeView_NoCurrentSpan() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var obs = new AspNetCoreMvcViewObserver(opts, tracing); var ctx = GetViewContext(); obs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { viewContext = ctx }); Span span = GetCurrentSpan(tracing.Tracer); Assert.Null(span); var spanContext = obs.Active; Assert.Null(spanContext); }
public void ProcessEvent_AfterView() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var hostobs = new AspNetCoreHostingObserver(opts, tracing); var request = GetHttpRequestMessage(); hostobs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request }); Span hostSpan = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(hostSpan); var hostspanContext = hostobs.Active; Assert.NotNull(hostspanContext); Assert.Equal(hostSpan, hostspanContext.Active); Assert.Null(hostspanContext.Previous); var actionobs = new AspNetCoreMvcActionObserver(opts, tracing); var descriptor = GetActionDescriptor(); actionobs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_BEFOREACTION_EVENT, new { httpContext = request, actionDescriptor = descriptor }); Span actionSpan = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(actionSpan); Assert.NotEqual(hostSpan, actionSpan); var actionspanContext = actionobs.Active; Assert.NotNull(actionspanContext); Assert.Equal(actionSpan, actionspanContext.Active); Assert.Equal(actionSpan.ParentSpanId, hostSpan.Context.SpanId); Assert.NotNull(actionspanContext.Previous); Assert.Equal(hostSpan, actionspanContext.Previous); Assert.Equal("action:" + descriptor.ControllerName + "/" + descriptor.ActionName, actionSpan.Name); var viewobs = new AspNetCoreMvcViewObserver(opts, tracing); var ctx = GetViewContext(); viewobs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { viewContext = ctx }); Span viewSpan = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(viewSpan); Assert.NotEqual(hostSpan, viewSpan); Assert.NotEqual(actionSpan, viewSpan); var viewSpanContext = viewobs.Active; Assert.NotNull(viewSpanContext); Assert.Equal(viewSpan, viewSpanContext.Active); Assert.Equal(actionSpan.Context.SpanId, viewSpan.ParentSpanId); Assert.NotNull(viewSpanContext.Previous); Assert.Equal(actionSpan, viewSpanContext.Previous); Assert.Equal("view:" + ctx.View.Path, viewSpan.Name); viewobs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_AFTERVIEW_EVENT, new { }); Assert.True(viewSpan.HasEnded); Assert.NotNull(AsyncLocalContext.CurrentSpan); Assert.Null(viewobs.Active); var viewSpanData = viewSpan.ToSpanData(); var viewAttributes = viewSpanData.Attributes.AttributeMap; Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ServerSpanKind), viewAttributes[SpanAttributeConstants.SpanKindKey]); Assert.Equal(AttributeValue.StringAttributeValue(ctx.View.Path), viewAttributes[SpanAttributeConstants.MvcViewFilePath]); actionobs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_AFTERACTION_EVENT, new { httpContext = request }); Span spanAfter = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(spanAfter); Assert.Equal(hostSpan, spanAfter); var actionSpanContextAfter = actionobs.Active; Assert.Null(actionSpanContextAfter); Assert.True(actionSpan.HasEnded); var actionSpanData = actionSpan.ToSpanData(); var actionAttributes = actionSpanData.Attributes.AttributeMap; Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ServerSpanKind), actionAttributes[SpanAttributeConstants.SpanKindKey]); Assert.Equal(AttributeValue.StringAttributeValue(descriptor.ControllerTypeInfo.FullName), actionAttributes[SpanAttributeConstants.MvcControllerClass]); Assert.Equal(AttributeValue.StringAttributeValue(descriptor.MethodInfo.ToString()), actionAttributes[SpanAttributeConstants.MvcControllerMethod]); hostobs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_STOP_EVENT, new { HttpContext = request }); Assert.True(hostSpan.HasEnded); Assert.Null(AsyncLocalContext.CurrentSpan); Assert.Null(hostobs.Active); var hostSpanData = hostSpan.ToSpanData(); var hostAttributes = hostSpanData.Attributes.AttributeMap; Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ServerSpanKind), hostAttributes[SpanAttributeConstants.SpanKindKey]); Assert.Equal(AttributeValue.StringAttributeValue("http://localhost:5555/"), hostAttributes[SpanAttributeConstants.HttpUrlKey]); Assert.Equal(AttributeValue.StringAttributeValue(HttpMethod.Get.ToString()), hostAttributes[SpanAttributeConstants.HttpMethodKey]); Assert.Equal(AttributeValue.StringAttributeValue("localhost:5555"), hostAttributes[SpanAttributeConstants.HttpHostKey]); Assert.Equal(AttributeValue.StringAttributeValue("/"), hostAttributes[SpanAttributeConstants.HttpPathKey]); Assert.Equal(AttributeValue.StringAttributeValue("Header"), hostAttributes["http.request.TEST"]); Assert.Equal(AttributeValue.StringAttributeValue("Header"), hostAttributes["http.response.TEST"]); Assert.Equal(AttributeValue.LongAttributeValue((long)HttpStatusCode.OK), hostAttributes[SpanAttributeConstants.HttpStatusCodeKey]); }
public void ProcessEvent_BeforeView() { var opts = GetOptions(); OpenCensusTracing tracing = new OpenCensusTracing(opts, null); var hostobs = new AspNetCoreHostingObserver(opts, tracing); var request = GetHttpRequestMessage(); hostobs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request }); Span hostSpan = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(hostSpan); var hostSpanContext = hostobs.Active; Assert.NotNull(hostSpanContext); Assert.Equal(hostSpan, hostSpanContext.Active); Assert.Null(hostSpanContext.Previous); var actionobs = new AspNetCoreMvcActionObserver(opts, tracing); var descriptor = GetActionDescriptor(); actionobs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_BEFOREACTION_EVENT, new { httpContext = request, actionDescriptor = descriptor }); Span actionSpan = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(actionSpan); Assert.NotEqual(hostSpan, actionSpan); var actionContext = actionobs.Active; Assert.NotNull(actionContext); Assert.Equal(actionSpan, actionContext.Active); Assert.Equal(actionSpan.ParentSpanId, hostSpan.Context.SpanId); Assert.NotNull(actionContext.Previous); Assert.Equal(hostSpan, actionContext.Previous); Assert.Equal("action:" + descriptor.ControllerName + "/" + descriptor.ActionName, actionSpan.Name); var actionSpanData = actionSpan.ToSpanData(); var actionAttributes = actionSpanData.Attributes.AttributeMap; Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ServerSpanKind), actionAttributes[SpanAttributeConstants.SpanKindKey]); Assert.Equal(AttributeValue.StringAttributeValue(descriptor.ControllerTypeInfo.FullName), actionAttributes[SpanAttributeConstants.MvcControllerClass]); Assert.Equal(AttributeValue.StringAttributeValue(descriptor.MethodInfo.ToString()), actionAttributes[SpanAttributeConstants.MvcControllerMethod]); var viewobs = new AspNetCoreMvcViewObserver(opts, tracing); var ctx = GetViewContext(); viewobs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { viewContext = ctx }); Span viewSpan = AsyncLocalContext.CurrentSpan as Span; Assert.NotNull(viewSpan); Assert.NotEqual(hostSpan, viewSpan); Assert.NotEqual(actionSpan, viewSpan); var viewSpanContext = viewobs.Active; Assert.NotNull(viewSpanContext); Assert.Equal(viewSpan, viewSpanContext.Active); Assert.Equal(actionSpan.Context.SpanId, viewSpan.ParentSpanId); Assert.NotNull(viewSpanContext.Previous); Assert.Equal(actionSpan, viewSpanContext.Previous); Assert.Equal("view:" + ctx.View.Path, viewSpan.Name); var viewSpanData = viewSpan.ToSpanData(); var viewAttributes = viewSpanData.Attributes.AttributeMap; Assert.Equal(AttributeValue.StringAttributeValue(SpanAttributeConstants.ServerSpanKind), viewAttributes[SpanAttributeConstants.SpanKindKey]); Assert.Equal(AttributeValue.StringAttributeValue(ctx.View.Path), viewAttributes[SpanAttributeConstants.MvcViewFilePath]); }
public void ProcessEvent_AfterView() { var opts = GetOptions(); var tracing = new OpenTelemetryTracing(opts, null); var hostobs = new AspNetCoreHostingObserver(opts, tracing); var request = GetHttpRequestMessage(); hostobs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request }); var hostSpan = GetCurrentSpan(tracing.Tracer); Assert.NotNull(hostSpan); var hostspanContext = hostobs.Active; Assert.NotNull(hostspanContext); Assert.Equal(hostSpan, hostspanContext); var actionobs = new AspNetCoreMvcActionObserver(opts, tracing); var descriptor = GetActionDescriptor(); actionobs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_BEFOREACTION_EVENT, new { httpContext = request, actionDescriptor = descriptor }); var actionSpan = GetCurrentSpan(tracing.Tracer); Assert.NotNull(actionSpan); Assert.NotEqual(hostSpan, actionSpan); var actionspanContext = actionobs.Active; Assert.NotNull(actionspanContext); Assert.Equal(actionSpan, actionspanContext); // Assert.Equal(actionSpan.ParentSpanId, hostSpan.Context.SpanId); Assert.Equal("action:" + descriptor.ControllerName + "/" + descriptor.ActionName, actionSpan.ToSpanData().Name); var viewobs = new AspNetCoreMvcViewObserver(opts, tracing); var ctx = GetViewContext(); viewobs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { viewContext = ctx }); var viewSpan = GetCurrentSpan(tracing.Tracer); Assert.NotNull(viewSpan); Assert.NotEqual(hostSpan, viewSpan); Assert.NotEqual(actionSpan, viewSpan); var viewSpanContext = viewobs.Active; Assert.NotNull(viewSpanContext); Assert.Equal(viewSpan, viewSpanContext); // Assert.Equal(actionSpan.Context.SpanId, viewSpan.ParentSpanId); TODO: Fix this Assert.Equal("view:" + ctx.View.Path, viewSpan.ToSpanData().Name); viewobs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_AFTERVIEW_EVENT, new { }); Assert.True(viewSpan.HasEnded()); Assert.NotNull(GetCurrentSpan(tracing.Tracer)); Assert.Null(viewobs.Active); var viewSpanData = viewSpan.ToSpanData(); var viewAttributes = viewSpanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value); Assert.Equal(SpanKind.Server, viewSpanData.Kind); Assert.Equal(ctx.View.Path, viewAttributes[SpanAttributeConstants.MvcViewFilePath]); actionobs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_AFTERACTION_EVENT, new { httpContext = request }); var spanAfter = GetCurrentSpan(tracing.Tracer); Assert.NotNull(spanAfter); Assert.Equal(hostSpan, spanAfter); var actionSpanContextAfter = actionobs.Active; Assert.Null(actionSpanContextAfter); Assert.True(actionSpan.HasEnded()); var actionSpanData = actionSpan.ToSpanData(); var actionAttributes = actionSpanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value); Assert.Equal(SpanKind.Server, actionSpanData.Kind); Assert.Equal(descriptor.ControllerTypeInfo.FullName, actionAttributes[SpanAttributeConstants.MvcControllerClass]); Assert.Equal(descriptor.MethodInfo.ToString(), actionAttributes[SpanAttributeConstants.MvcControllerMethod]); hostobs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_STOP_EVENT, new { HttpContext = request }); Assert.True(hostSpan.HasEnded()); Assert.Null(GetCurrentSpan(tracing.Tracer)); Assert.Null(hostobs.Active); var hostSpanData = hostSpan.ToSpanData(); var hostAttributes = hostSpanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value); Assert.Equal(SpanKind.Server, hostSpanData.Kind); Assert.Equal("http://localhost:5555/", hostAttributes[SpanAttributeConstants.HttpUrlKey]); Assert.Equal(HttpMethod.Get.ToString(), hostAttributes[SpanAttributeConstants.HttpMethodKey]); Assert.Equal("localhost:5555", hostAttributes[SpanAttributeConstants.HttpHostKey]); Assert.Equal("/", hostAttributes[SpanAttributeConstants.HttpPathKey]); Assert.Equal("Header", hostAttributes["http.request.TEST"]); Assert.Equal("Header", hostAttributes["http.response.TEST"]); Assert.Equal((long)HttpStatusCode.OK, hostAttributes[SpanAttributeConstants.HttpStatusCodeKey]); }
public void ProcessEvent_BeforeView() { var opts = GetOptions(); var tracing = new OpenTelemetryTracing(opts, null); var hostobs = new AspNetCoreHostingObserver(opts, tracing); var request = GetHttpRequestMessage(); hostobs.ProcessEvent(AspNetCoreHostingObserver.HOSTING_START_EVENT, new { HttpContext = request }); var hostSpan = GetCurrentSpan(tracing.Tracer); Assert.NotNull(hostSpan); var hostSpanContext = hostobs.Active; Assert.NotNull(hostSpanContext); Assert.Equal(hostSpan, hostSpanContext); var actionobs = new AspNetCoreMvcActionObserver(opts, tracing); var descriptor = GetActionDescriptor(); actionobs.ProcessEvent(AspNetCoreMvcActionObserver.MVC_BEFOREACTION_EVENT, new { httpContext = request, actionDescriptor = descriptor }); var actionSpan = GetCurrentSpan(tracing.Tracer); Assert.NotNull(actionSpan); Assert.NotEqual(hostSpan, actionSpan); var actionContext = actionobs.Active; Assert.NotNull(actionContext); Assert.Equal(actionSpan, actionContext); // Assert.Equal(actionSpan.ParentSpanId, hostSpan.Context.SpanId); Assert.Equal("action:" + descriptor.ControllerName + "/" + descriptor.ActionName, actionSpan.ToSpanData().Name); var actionSpanData = actionSpan.ToSpanData(); var actionAttributes = actionSpanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value); Assert.Equal(SpanKind.Server, actionSpanData.Kind); Assert.Equal(descriptor.ControllerTypeInfo.FullName, actionAttributes[SpanAttributeConstants.MvcControllerClass]); Assert.Equal(descriptor.MethodInfo.ToString(), actionAttributes[SpanAttributeConstants.MvcControllerMethod]); var viewobs = new AspNetCoreMvcViewObserver(opts, tracing); var ctx = GetViewContext(); viewobs.ProcessEvent(AspNetCoreMvcViewObserver.MVC_BEFOREVIEW_EVENT, new { viewContext = ctx }); var viewSpan = GetCurrentSpan(tracing.Tracer); Assert.NotNull(viewSpan); Assert.NotEqual(hostSpan, viewSpan); Assert.NotEqual(actionSpan, viewSpan); var viewSpanContext = viewobs.Active; Assert.NotNull(viewSpanContext); Assert.Equal(viewSpan, viewSpanContext); // Assert.Equal(actionSpan.Context.SpanId, viewSpan.ParentSpanId); Assert.Equal("view:" + ctx.View.Path, viewSpan.ToSpanData().Name); var viewSpanData = viewSpan.ToSpanData(); var viewAttributes = viewSpanData.Attributes.ToDictionary(kv => kv.Key, kv => kv.Value); Assert.Equal(SpanKind.Server, viewSpanData.Kind); Assert.Equal(ctx.View.Path, viewAttributes[SpanAttributeConstants.MvcViewFilePath]); }