public async Task SendAsync_HeadersNullOrWhitespace_DoesNothing(string headersValue) { HttpRequestMessage resultRequest = null; var testHandler = new TestHandler((request) => { resultRequest = request; return(Task.FromResult(new HttpResponseMessage())); }); var headersHolder = new IstioHeadersHolder { RequestId = headersValue, B3TraceId = headersValue, B3SpanId = headersValue, B3ParentSpanId = headersValue, B3Sampled = headersValue, B3Flags = headersValue, OtSpanContext = headersValue }; var serviceProvider = new Mock <IServiceProvider>(); serviceProvider .Setup(s => s.GetService(typeof(IIstioHeadersHolder))) .Returns(headersHolder); var accessor = new Mock <IHttpContextAccessor>(); accessor .SetupGet(a => a.HttpContext.RequestServices) .Returns(serviceProvider.Object); var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "http://foo.com"); var handler = new HeadersPropagationDelegatingHandler(accessor.Object, NullLogger <HeadersPropagationDelegatingHandler> .Instance) { InnerHandler = testHandler }; var invoker = new HttpMessageInvoker(handler); var result = await invoker.SendAsync(httpRequestMessage, CancellationToken.None); Assert.NotNull(result); Assert.NotNull(resultRequest); IEnumerable <string> notUsed; Assert.False(resultRequest.Headers.TryGetValues(IstioHeaders.REQUEST_ID, out notUsed)); Assert.False(resultRequest.Headers.TryGetValues(IstioHeaders.B3_TRACE_ID, out notUsed)); Assert.False(resultRequest.Headers.TryGetValues(IstioHeaders.B3_SPAN_ID, out notUsed)); Assert.False(resultRequest.Headers.TryGetValues(IstioHeaders.B3_PARENT_SPAN_ID, out notUsed)); Assert.False(resultRequest.Headers.TryGetValues(IstioHeaders.B3_SAMPLED, out notUsed)); Assert.False(resultRequest.Headers.TryGetValues(IstioHeaders.B3_FLAGS, out notUsed)); Assert.False(resultRequest.Headers.TryGetValues(IstioHeaders.OT_SPAN_CONTEXT, out notUsed)); }
public async Task SendAsync_AddsHeaders() { HttpRequestMessage resultRequest = null; var testHandler = new TestHandler((request) => { resultRequest = request; return(Task.FromResult(new HttpResponseMessage())); }); var headersHolder = new IstioHeadersHolder { RequestId = "1", B3TraceId = "4", B3SpanId = "7", B3ParentSpanId = "10", B3Sampled = "13", B3Flags = "16", OtSpanContext = "19" }; var serviceProvider = new Mock <IServiceProvider>(); serviceProvider .Setup(s => s.GetService(typeof(IIstioHeadersHolder))) .Returns(headersHolder); var accessor = new Mock <IHttpContextAccessor>(); accessor .SetupGet(a => a.HttpContext.RequestServices) .Returns(serviceProvider.Object); var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, "http://foo.com"); var handler = new HeadersPropagationDelegatingHandler(accessor.Object, NullLogger <HeadersPropagationDelegatingHandler> .Instance) { InnerHandler = testHandler }; var invoker = new HttpMessageInvoker(handler); var result = await invoker.SendAsync(httpRequestMessage, CancellationToken.None); Assert.NotNull(result); Assert.NotNull(resultRequest); Assert.Equal("1", resultRequest.Headers.GetValues(IstioHeaders.REQUEST_ID).First()); Assert.Equal("4", resultRequest.Headers.GetValues(IstioHeaders.B3_TRACE_ID).First()); Assert.Equal("7", resultRequest.Headers.GetValues(IstioHeaders.B3_SPAN_ID).First()); Assert.Equal("10", resultRequest.Headers.GetValues(IstioHeaders.B3_PARENT_SPAN_ID).First()); Assert.Equal("13", resultRequest.Headers.GetValues(IstioHeaders.B3_SAMPLED).First()); Assert.Equal("16", resultRequest.Headers.GetValues(IstioHeaders.B3_FLAGS).First()); Assert.Equal("19", resultRequest.Headers.GetValues(IstioHeaders.OT_SPAN_CONTEXT).First()); }
public async Task InvokeAsync_IgnoresInvalidHeaders(string headersValue) { var nextWasCalled = false; RequestDelegate next = (c) => { nextWasCalled = true; return(Task.CompletedTask); }; var middleware = new IstioHeadersFetcherMiddleware(next); var headers = new MockHeaderDictionary() { { IstioHeaders.REQUEST_ID, headersValue }, { IstioHeaders.B3_TRACE_ID, headersValue }, { IstioHeaders.B3_SPAN_ID, headersValue }, { IstioHeaders.B3_PARENT_SPAN_ID, headersValue }, { IstioHeaders.B3_SAMPLED, headersValue }, { IstioHeaders.B3_FLAGS, headersValue }, { IstioHeaders.OT_SPAN_CONTEXT, headersValue }, }; var context = new Mock <HttpContext>(MockBehavior.Strict); context .SetupGet(c => c.Request.Headers) .Returns(headers); var headersHolder = new IstioHeadersHolder(); await middleware.InvokeAsync(context.Object, headersHolder); Assert.True(nextWasCalled); Assert.Null(headersHolder.RequestId); Assert.Null(headersHolder.B3TraceId); Assert.Null(headersHolder.B3SpanId); Assert.Null(headersHolder.B3ParentSpanId); Assert.Null(headersHolder.B3Sampled); Assert.Null(headersHolder.B3Flags); Assert.Null(headersHolder.OtSpanContext); }
public async Task InvokeAsync_SetsHeaders_BeforeCallingNext() { var nextWasCalled = false; RequestDelegate next = (c) => { nextWasCalled = true; return(Task.CompletedTask); }; var middleware = new IstioHeadersFetcherMiddleware(next); var headers = new MockHeaderDictionary() { { IstioHeaders.REQUEST_ID, "1" }, { IstioHeaders.B3_TRACE_ID, "4" }, { IstioHeaders.B3_SPAN_ID, "7" }, { IstioHeaders.B3_PARENT_SPAN_ID, "10" }, { IstioHeaders.B3_SAMPLED, "13" }, { IstioHeaders.B3_FLAGS, "16" }, { IstioHeaders.OT_SPAN_CONTEXT, "19" }, }; var context = new Mock <HttpContext>(MockBehavior.Strict); context .SetupGet(c => c.Request.Headers) .Returns(headers); var headersHolder = new IstioHeadersHolder(); await middleware.InvokeAsync(context.Object, headersHolder); Assert.True(nextWasCalled); Assert.Equal("1", headersHolder.RequestId); Assert.Equal("4", headersHolder.B3TraceId); Assert.Equal("7", headersHolder.B3SpanId); Assert.Equal("10", headersHolder.B3ParentSpanId); Assert.Equal("13", headersHolder.B3Sampled); Assert.Equal("16", headersHolder.B3Flags); Assert.Equal("19", headersHolder.OtSpanContext); }