public async Task Invoke_Trace() { var accessor = new HttpContextAccessor { HttpContext = new DefaultHttpContext() }; var context = CreateHttpContext(); var tracerMock = CreateIManagedTracerMock(context); var delegateMock = new Mock <RequestDelegate>(); delegateMock.Setup(d => d(context)).Returns(Task.CompletedTask); Func <TraceHeaderContext, IManagedTracer> fakeFactory = f => tracerMock.Object; Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer(accessor)); var middleware = new CloudTraceMiddleware(delegateMock.Object, fakeFactory, accessor); await middleware.Invoke(context, _traceHeaderContext); Assert.Equal(tracerMock.Object, ContextTracerManager.GetCurrentTracer(accessor)); Assert.True(context.Response.Headers.ContainsKey(TraceHeaderContext.TraceHeader)); Assert.Equal(_traceHeaderContext.ToString(), context.Response.Headers[TraceHeaderContext.TraceHeader]); delegateMock.VerifyAll(); tracerMock.VerifyAll(); }
public async Task Invoke_Trace() { var context = CreateHttpContext(); var tracerMock = CreateIManagedTracerMock(context); var delegateMock = new Mock <RequestDelegate>(); delegateMock.Setup(d => d(context)).Returns(Task.CompletedTask); Func <TraceHeaderContext, IManagedTracer> fakeFactory = f => tracerMock.Object; Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer()); var middleware = new CloudTraceMiddleware(delegateMock.Object, fakeFactory, new DefaultCloudTraceNameProvider()); await middleware.Invoke(context, _traceHeaderContext); // Since the current tracer is AsyncLocal<>, it will be back to the default after awaiting the middleware invoke Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer()); Assert.True(context.Response.Headers.ContainsKey(TraceHeaderContext.TraceHeader)); Assert.Equal(_traceHeaderContext.ToString(), context.Response.Headers[TraceHeaderContext.TraceHeader]); delegateMock.VerifyAll(); tracerMock.VerifyAll(); }