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 SetAndGetInDifferentAsyncContexts() { var mockedManagedTracer = new Mock <IManagedTracer>(MockBehavior.Strict).Object; async Task setTracer() { ContextTracerManager.SetCurrentTracer(mockedManagedTracer); await Task.Yield(); } async Task <IManagedTracer> getTracer() { var tracer = ContextTracerManager.GetCurrentTracer(); await Task.Yield(); return(tracer); } await setTracer(); var actualManagedTracer = await getTracer(); // The "intuitive" thing would be to // Assert.Equal(mockedManagedTracer, actualManagedTracer); // but, we have implemented the ContextTraceManager using AsyncLocal // and since in this test we have set the mocked tracer in an independent // async context from the one we are then obtaining the tracer, the tracer set // on the first async context is not propagated to the second async context where // we are trying to obtain it. Assert.Equal(NullManagedTracer.Instance, actualManagedTracer); }
public void FromGoogleTrace() { var oldTracer = ContextTracerManager.GetCurrentTracer(); try { string traceId = "dummy_trace_id"; ulong spanId = 0x12D687; // The spanId set on the log entry should confirm to x16 // format so that the backend can really associate the log entry // to the span. string expectedSpanId = "000000000012d687"; ContextTracerManager.SetCurrentTracer(MockTracer(traceId, spanId)); var traceContext = TraceContextForLogEntry.FromGoogleTrace(); Assert.Equal(traceId, traceContext.TraceId); Assert.Equal(expectedSpanId, traceContext.SpanId); } finally { ContextTracerManager.SetCurrentTracer(oldTracer); } }
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(); }
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); var tracerFactoryMock = new Mock <IManagedTracerFactory>(); tracerFactoryMock.Setup(f => f.CreateTracer(_traceHeaderContext)).Returns(tracerMock.Object); Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer(accessor)); var middleware = new CloudTraceMiddleware(delegateMock.Object, tracerFactoryMock.Object, accessor); await middleware.Invoke(context, _traceHeaderContext); Assert.Equal(tracerMock.Object, ContextTracerManager.GetCurrentTracer(accessor)); delegateMock.VerifyAll(); tracerMock.VerifyAll(); }
public void Set() { var mockedManagedTracer = new Mock <IManagedTracer>(MockBehavior.Strict).Object; ContextTracerManager.SetCurrentTracer(mockedManagedTracer); Assert.Equal(mockedManagedTracer, ContextTracerManager.GetCurrentTracer()); }
public void CreateManagedTracer() { var mockProvider = new Mock <IServiceProvider>(); var mockTracer = new Mock <IManagedTracer>(); string traceId = Guid.NewGuid().ToString("N"); mockTracer.Setup(p => p.GetCurrentTraceId()).Returns(traceId); ContextTracerManager.SetCurrentTracer(mockTracer.Object); var tracer = ManagedTracer.CreateDelegatingTracer(() => ContextTracerManager.GetCurrentTracer()); Assert.IsType <DelegatingTracer>(tracer); Assert.Equal(traceId, tracer.GetCurrentTraceId()); mockTracer.Verify(); }
public void FromGoogleTrace_NoTrace() { var oldTracer = ContextTracerManager.GetCurrentTracer(); try { ContextTracerManager.SetCurrentTracer(MockTracer()); Assert.Null(TraceContextForLogEntry.FromGoogleTrace()); } finally { ContextTracerManager.SetCurrentTracer(oldTracer); } }
public async Task Invoke_NoTrace() { var context = new DefaultHttpContext(); var delegateMock = new Mock <RequestDelegate>(); var tracerMock = new Mock <IManagedTracer>(); Func <ITraceContext, IManagedTracer> fakeFactory = f => tracerMock.Object; var middleware = new CloudTraceMiddleware(delegateMock.Object, fakeFactory, new DefaultCloudTraceNameProvider()); await middleware.Invoke(context, _traceContext, TraceDecisionPredicate.Default, CustomTraceContextPropagator); // Since the current tracer is AsyncLocal<>, it will be back to the default after awaiting the middleware invoke Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer()); AssertNoTraceContext(context.Response); delegateMock.Verify(d => d(context), Times.Once()); tracerMock.Verify(t => t.StartSpan(It.IsAny <string>(), null), Times.Never()); }
public async Task Invoke_NoTrace() { var context = new DefaultHttpContext(); var delegateMock = new Mock <RequestDelegate>(); var tracerMock = new Mock <IManagedTracer>(); Func <TraceHeaderContext, IManagedTracer> fakeFactory = f => tracerMock.Object; var middleware = new CloudTraceMiddleware(delegateMock.Object, fakeFactory); 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.False(context.Response.Headers.ContainsKey(TraceHeaderContext.TraceHeader)); delegateMock.Verify(d => d(context), Times.Once()); tracerMock.Verify(t => t.StartSpan(It.IsAny <string>(), null), Times.Never()); }
public async Task Invoke_NoTrace() { var accessor = new HttpContextAccessor { HttpContext = new DefaultHttpContext() }; var context = new DefaultHttpContext(); var delegateMock = new Mock <RequestDelegate>(); var tracerMock = new Mock <IManagedTracer>(); Func <TraceHeaderContext, IManagedTracer> fakeFactory = f => tracerMock.Object; var middleware = new CloudTraceMiddleware(delegateMock.Object, fakeFactory, accessor); await middleware.Invoke(context, _traceHeaderContext); Assert.Equal(tracerMock.Object, ContextTracerManager.GetCurrentTracer(accessor)); Assert.False(context.Response.Headers.ContainsKey(TraceHeaderContext.TraceHeader)); delegateMock.Verify(d => d(context), Times.Once()); tracerMock.Verify(t => t.StartSpan(It.IsAny <string>(), null), Times.Never()); }
public void FromGoogleTrace_NoSpan() { var oldTracer = ContextTracerManager.GetCurrentTracer(); try { string traceId = "dummy_trace_id"; ContextTracerManager.SetCurrentTracer(MockTracer(traceId)); var traceContext = TraceContextForLogEntry.FromGoogleTrace(); Assert.Equal(traceId, traceContext.TraceId); Assert.Null(traceContext.SpanId); } finally { ContextTracerManager.SetCurrentTracer(oldTracer); } }
public async Task Invoke_NoTrace() { var accessor = new HttpContextAccessor { HttpContext = new DefaultHttpContext() }; var context = new DefaultHttpContext(); var delegateMock = new Mock <RequestDelegate>(); var tracerMock = new Mock <IManagedTracer>(); var tracerFactoryMock = new Mock <IManagedTracerFactory>(); tracerFactoryMock.Setup(f => f.CreateTracer(_traceHeaderContext)).Returns(tracerMock.Object); var middleware = new CloudTraceMiddleware(delegateMock.Object, tracerFactoryMock.Object, accessor); await middleware.Invoke(context, _traceHeaderContext); Assert.Equal(tracerMock.Object, ContextTracerManager.GetCurrentTracer(accessor)); delegateMock.Verify(d => d(context), Times.Once()); tracerMock.Verify(t => t.StartSpan(It.IsAny <string>(), null), Times.Never()); tracerMock.Verify(t => t.EndSpan(), Times.Never()); }
public async Task SetAndGetInNestedAsyncContexts() { var mockedManagedTracer = new Mock <IManagedTracer>(MockBehavior.Strict).Object; async Task <IManagedTracer> getTracer() { var tracer = ContextTracerManager.GetCurrentTracer(); await Task.Yield(); return(tracer); } async Task <IManagedTracer> setTracerAndGet() { ContextTracerManager.SetCurrentTracer(mockedManagedTracer); await Task.Yield(); return(await getTracer()); } var actualManagedTracer = await setTracerAndGet(); Assert.Equal(mockedManagedTracer, actualManagedTracer); }
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 <ITraceContext, IManagedTracer> fakeFactory = f => tracerMock.Object; Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer()); var middleware = new CloudTraceMiddleware(delegateMock.Object, fakeFactory, new DefaultCloudTraceNameProvider()); await middleware.Invoke(context, _traceContext, TraceDecisionPredicate.Default, CustomTraceContextPropagator); // Since the current tracer is AsyncLocal<>, it will be back to the default after awaiting the middleware invoke Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer()); AssertCustomTraceContext(context.Response); delegateMock.VerifyAll(); tracerMock.VerifyAll(); }
public void Unset_NullManagedTracer() { Assert.Equal(NullManagedTracer.Instance, ContextTracerManager.GetCurrentTracer()); }