public CorrelateRequestMiddleware(RequestDelegate next, RequestCorrelationOptions correlationOptions, ICorrelationIdProvider correlationIdProvider) { _next = next; _correlationOptions = correlationOptions ?? throw new ArgumentNullException(nameof(correlationOptions)); _correlationIdProvider = correlationIdProvider ?? throw new ArgumentNullException(nameof(correlationIdProvider)); }
public void Given_NoCorrelationIdProviderSupplied_ShouldThrow() { // Arrange var options = new RequestCorrelationOptions(false, new List <ICheckUrl>()); var next = Substitute.For <RequestDelegate>(); // Act // Assert Assert.Throws <ArgumentNullException>(() => new CorrelateRequestMiddleware(next, options, null)); }
public async Task Given_CorrelationId_NotPresent_ShouldThrow() { // Arrange var idProvider = Substitute.For <ICorrelationIdProvider>(); var options = new RequestCorrelationOptions(true, new List <ICheckUrl>()); var next = Substitute.For <RequestDelegate>(); var sut = new CorrelateRequestMiddleware(next, options, idProvider); var context = GetDefaultHttpContext(); // Act // Assert await Assert.ThrowsAsync <NotCorrelatedRequestException>(() => sut.Invoke(context)); }
public async Task Given_CorrelationId_IsPresent_ThenInvokeNextMiddlewareComponent(string header) { // Arrange var idProvider = Substitute.For <ICorrelationIdProvider>(); var options = new RequestCorrelationOptions(true, new List <ICheckUrl>()); var next = Substitute.For <RequestDelegate>(); var sut = new CorrelateRequestMiddleware(next, options, idProvider); var context = GetDefaultHttpContext(); context.Request.Headers.Add(header, Guid.NewGuid().ToString()); // Act await sut.Invoke(context); // Assert await next.Received(1).Invoke(context); }
Given_CorrelationId_NotPresent_WhenOptionsNotEnforcingMessageCorrelation_ThenRequestShouldContainGeneratedId() { // Arrange var idProvider = Substitute.For <ICorrelationIdProvider>(); var options = new RequestCorrelationOptions(false, new List <ICheckUrl>()); var next = Substitute.For <RequestDelegate>(); var sut = new CorrelateRequestMiddleware(next, options, idProvider); var context = GetDefaultHttpContext(); idProvider.GenerateId().Returns("my-id"); // Act await sut.Invoke(context); // Assert await next.Received(1).Invoke(Arg.Is <HttpContext>(c => c.Request.Headers.Values.Contains("my-id"))); }