public void CreateScope_ExpectCorrelationContextPresent() { // arrange var httpContext = new DefaultHttpContext(); var correlationId = CorrelationId.FromString("123"); var correlationContext = new RequestCorrelationContext(correlationId, HttpHeaders.CorrelationId); _factory .Setup(f => f.CreateContext(It.IsAny <HttpContext>())) .Returns(correlationContext); // act var container = new CorrelationContextContainer(_factory.Object); using var scope = container.CreateScope(httpContext); // assert // -> container content Assert.Equal(correlationContext, container.CorrelationContext); Assert.Equal(correlationId, container.CorrelationContext.CorrelationId); // -> scope content Assert.Equal(correlationContext, scope.CorrelationContext); Assert.Equal(correlationId, scope.CorrelationContext.CorrelationId); }
public void ConfigureServices(IServiceCollection services) { services.AddDefaultCorrelator(options => { options.ReadFrom.Clear(); options.ReadFrom.Add("X-Correlation-Id"); options.Factory = (_) => CorrelationId.FromString("le_correlation"); options.Emit = PropagationSettings.PropagateAs("X-Correlation-Id"); options.ReplaceTraceIdentifier = false; options.LoggingScope = LoggingScopeSettings.IncludeLoggingScope("Correlation"); }); }
public void CreateContext_WhenGeneratingCorrelation_ExpectGeneratedCorrelationContext() { // arrange var correlationId = "123"; var httpContext = new DefaultHttpContext(); _baseOptions.Factory = _ => CorrelationId.FromString(correlationId); // act var factory = new CorrelationContextFactory(new OptionsWrapper <CorrelatorOptions>(_baseOptions), _logger); var correlationContext = factory.CreateContext(httpContext); // assert Assert.IsType <GeneratedCorrelationContext>(correlationContext); Assert.Equal(correlationId, correlationContext.CorrelationId.Value); }
public async Task Emits_WhenKeepingIncomingHeaderButCorrelationIdGenerated_ExpectCorrelationIdEmittedWithPredefinedHeader() { // arrange var headerName = "X-Incoming-Request-Id"; var options = CreateEmitOptions(PropagationSettings.KeepIncomingHeaderName(headerName)); var httpContext = new DefaultHttpContext(); var correlationContext = new GeneratedCorrelationContext(CorrelationId.FromString("123")); // act var emitter = new CorrelationEmitter(options, _logger); await emitter .Emit(httpContext, correlationContext) .ConfigureAwait(false); // assert Assert.Contains(headerName, httpContext.Response.Headers); Assert.Equal("123", httpContext.Response.Headers[headerName].ToString()); }
public void Ctor_ExpectStringValueAndStructure() { // arrange var correlationKey = "CorrelationKey"; var correlationId = CorrelationId.FromString("correlation_id"); // act var state = new CorrelatedLoggerState("CorrelationKey", correlationId); // assert Assert.Equal("CorrelationKey:correlation_id", state.ToString()); Assert.IsAssignableFrom <IEnumerable <KeyValuePair <string, object> > >(state); var stateArray = state.ToArray(); Assert.Single(stateArray); Assert.Equal(correlationKey, stateArray[0].Key); Assert.Equal(correlationId, stateArray[0].Value); }
public CorrelationContext CreateContext(HttpContext httpContext) { if (!TryGetCorrelationHeader(httpContext.Request.Headers, out var headerName, out var headerValue)) { _logger.NoCorrelationHeaderReceived(); return(HandleEmptyValue(httpContext)); } if (_validator != null) { var validationResult = _validator.Validate(headerValue); if (!validationResult.IsValid) { _logger.InvalidCorrelationValue(headerName, validationResult.Reason); return(new InvalidCorrelationContext(headerName, validationResult)); } } _logger.CorrelationIdReceived(headerName, headerValue !); return(new RequestCorrelationContext(CorrelationId.FromString(headerValue), headerName)); }
public async Task Emits_WhenNoEmit_ExpectNoCorrelationIdEmitted() { // arrange var incomingHeader = HttpHeaders.AspNetRequestId; var options = CreateEmitOptions(PropagationSettings.NoPropagation); var httpContext = new DefaultHttpContext(); var correlationContext = new RequestCorrelationContext( CorrelationId.FromString("123"), incomingHeader); // act var emitter = new CorrelationEmitter(options, _logger); await emitter .Emit(httpContext, correlationContext) .ConfigureAwait(false); // assert Assert.DoesNotContain(incomingHeader, httpContext.Response.Headers); }
public async Task Emits_WhenEmmitingUsingCustomHeader_ExpectCorrelationIdEmittedWithPredefinedHeader() { // arrange var incomingHeader = HttpHeaders.AspNetRequestId; var outgoingHeader = "X-Le-Custom-Request-Id"; var options = CreateEmitOptions(PropagationSettings.PropagateAs(outgoingHeader)); var httpContext = new DefaultHttpContext(); var correlationContext = new RequestCorrelationContext( CorrelationId.FromString("123"), incomingHeader); // act var emitter = new CorrelationEmitter(options, _logger); await emitter .Emit(httpContext, correlationContext) .ConfigureAwait(false); // assert Assert.Contains(outgoingHeader, httpContext.Response.Headers); Assert.Equal("123", httpContext.Response.Headers[outgoingHeader]); }