public async Task CallNextMiddlewareWithHttpContextTraceIdentifierSet(bool withLogger) { // Arrange var generatedId = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture); HttpContext context = new DefaultHttpContext(); var responseFeature = new MockHttpResponseFeature(); context.Features.Set <IHttpResponseFeature>(responseFeature); var next = new MockMiddleware(async(_) => await responseFeature.CompleteAsync().ConfigureAwait(false)); var accessor = new CorrelationContextAccessor(); ILogger <CorrelationMiddleware> logger = withLogger ? new MockLogger() : null; IOptions <CorrelationOptions> options = Options.Create(new CorrelationOptions() { CorrelationIdGenerator = (_) => generatedId }); var middleware = new CorrelationMiddleware(next, accessor, logger, options); // Act await middleware.Invoke(context).ConfigureAwait(false); // Assert next.WasCalled.Should().Be(true, "the next middleware should be called"); next.WithTraceIdentifier.Should().Be(generatedId, "the TraceIdentifier should have been set to the generared correlation id"); context.Response.Headers.Should().Contain(Constants.XCorrelationID, generatedId); }
public void GenerateANewCorrelationIdIfTheRequestDoesNotContainOne(bool withLogger) { // Arrange var generatedId = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture); HttpContext context = new DefaultHttpContext(); var responseFeature = new MockHttpResponseFeature(); context.Features.Set <IHttpResponseFeature>(responseFeature); var next = new MockMiddleware(async(_) => await responseFeature.CompleteAsync()); var accessor = new CorrelationContextAccessor(); ILogger <CorrelationMiddleware> logger = withLogger ? new MockLogger() : null; IOptions <CorrelationOptions> options = Options.Create(new CorrelationOptions() { CorrelationIdGenerator = (_) => generatedId }); var middleware = new CorrelationMiddleware(next, accessor, logger, options); // Invoke middleware middleware.Invoke(context); // Assert next.WasCalled.Should().Be(true, "the next middleware should be called"); next.WithTraceIdentifier.Should().Be(generatedId, "the TraceIdentifier should have been set"); accessor.CorrelationContext.Should().NotBeNull("the middleware should initialize the CorrelationContext"); accessor.CorrelationContext.CorrelationId.Should().Be(generatedId, "the middleware should initialize the CorrelationContext.CorrelatioId correctly with the generated value form the options provider function."); accessor.CorrelationContext.Header.Should().Be(options.Value.Header, "the middleware should initialize the CorrelationContext.Header correctly with the header from the options provided"); context.Response.Headers.Should().Contain(Constants.XCorrelationID, generatedId); }
public void Middleware_Defaults_To_Status_200() { var middleware = _WebApi.AppFuncBuilder(MockMiddleware.StubAppFunc); MockMiddleware.Call(middleware, _Environment.Environment); Assert.AreEqual(200, _Environment.ResponseStatusCode); }
public void UseTheExistingCorrelationIdIfTheRequestContainsOne(bool withLogger) { // Arrange var incomingCorrelationId = Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture); HttpContext context = new DefaultHttpContext(); var responseFeature = new MockHttpResponseFeature(); context.Features.Set <IHttpResponseFeature>(responseFeature); // Add incoming correlation id context.Request.Headers.Add(Constants.XCorrelationID, incomingCorrelationId); var next = new MockMiddleware(async(_) => await responseFeature.CompleteAsync()); var accessor = new CorrelationContextAccessor(); ILogger <CorrelationMiddleware> logger = withLogger ? new MockLogger() : null; IOptions <CorrelationOptions> options = Options.Create(new CorrelationOptions() { CorrelationIdGenerator = (_) => throw new InvalidOperationException("Should not be called because a request correlation id was supplied") });