public async Task UsesIdentifierFeature_IfAlreadyPresentOnContext() { // Arrange var requestIdentifierFeature = new HttpRequestIdentifierFeature() { TraceIdentifier = Guid.NewGuid().ToString() }; var features = new FeatureCollection(); features.Add(typeof(IHttpRequestFeature), new HttpRequestFeature()); features.Add(typeof(IHttpRequestIdentifierFeature), requestIdentifierFeature); features.Add(typeof(IHttpResponseFeature), new HttpResponseFeature()); var context = new DefaultHttpContext(features); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions())); // Act & Assert var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) => { Assert.Same(requestIdentifierFeature, innerContext.GetFeature <IHttpRequestIdentifierFeature>()); return(Task.FromResult(0)); }, loggerFactory, new TestElmOptions()); await errorPageMiddleware.Invoke(context); Assert.Same(requestIdentifierFeature, context.GetFeature <IHttpRequestIdentifierFeature>()); }
// Note that HttpRequestIdentifierFeature now provides a default TraceIdentifier and will never return null. public async Task UpdatesTraceIdentifier_IfEmpty(string requestId) { var context = new DefaultHttpContext(); var requestIdentifierFeature = new HttpRequestIdentifierFeature() { TraceIdentifier = requestId }; context.Features.Set <IHttpRequestIdentifierFeature>(requestIdentifierFeature); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), Options.Create(new ElmOptions()))); var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) => { var feature = innerContext.Features.Get <IHttpRequestIdentifierFeature>(); Assert.NotNull(feature); Assert.False(string.IsNullOrEmpty(feature.TraceIdentifier)); return(Task.FromResult(0)); }, loggerFactory, new TestElmOptions()); await errorPageMiddleware.Invoke(context); Assert.Equal(requestId, context.Features.Get <IHttpRequestIdentifierFeature>().TraceIdentifier); }
public async Task UpdatesTraceIdentifier_IfNullOrEmpty(string requestId) { // Arrange var requestIdentifierFeature = new HttpRequestIdentifierFeature() { TraceIdentifier = requestId }; var features = new FeatureCollection(); features.Add(typeof(IHttpRequestIdentifierFeature), requestIdentifierFeature); features.Add(typeof(IHttpRequestFeature), new HttpRequestFeature()); features.Add(typeof(IHttpResponseFeature), new HttpResponseFeature()); var context = new DefaultHttpContext(features); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions())); // Act & Assert var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) => { var feature = innerContext.GetFeature <IHttpRequestIdentifierFeature>(); Assert.NotNull(feature); Assert.False(string.IsNullOrEmpty(feature.TraceIdentifier)); return(Task.FromResult(0)); }, loggerFactory, new TestElmOptions()); await errorPageMiddleware.Invoke(context); Assert.Equal(requestId, context.GetFeature <IHttpRequestIdentifierFeature>().TraceIdentifier); }
public void TraceIdentifier_ReturnsId() { var feature = new HttpRequestIdentifierFeature(); var id = feature.TraceIdentifier; Assert.NotNull(id); }
public void TraceIdentifier_ReturnsStableId() { var feature = new HttpRequestIdentifierFeature(); var id1 = feature.TraceIdentifier; var id2 = feature.TraceIdentifier; Assert.Equal(id1, id2); }
public void TraceIdentifier_ReturnsUniqueIdForDifferentInstances() { var feature1 = new HttpRequestIdentifierFeature(); var feature2 = new HttpRequestIdentifierFeature(); var id1 = feature1.TraceIdentifier; var id2 = feature2.TraceIdentifier; Assert.NotEqual(id1, id2); }
private string GetRequestIdentifier(HttpContext httpContext) { var requestIdentifierFeature = httpContext.GetFeature <IHttpRequestIdentifierFeature>(); if (requestIdentifierFeature == null) { requestIdentifierFeature = new HttpRequestIdentifierFeature() { TraceIdentifier = Guid.NewGuid().ToString() }; httpContext.SetFeature(requestIdentifierFeature); } return(requestIdentifierFeature.TraceIdentifier); }
public async Task UsesIdentifierFeature_IfAlreadyPresentOnContext() { var context = new DefaultHttpContext(); var requestIdentifierFeature = new HttpRequestIdentifierFeature() { TraceIdentifier = Guid.NewGuid().ToString() }; context.Features.Set <IHttpRequestIdentifierFeature>(requestIdentifierFeature); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), Options.Create(new ElmOptions()))); var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) => { Assert.Same(requestIdentifierFeature, innerContext.Features.Get <IHttpRequestIdentifierFeature>()); return(Task.FromResult(0)); }, loggerFactory, new TestElmOptions()); await errorPageMiddleware.Invoke(context); Assert.Same(requestIdentifierFeature, context.Features.Get <IHttpRequestIdentifierFeature>()); }
/// <summary> /// Initializes a new instance of the <see cref="RequestIdentifierCorrelationIdFactory"/> class. /// </summary> public RequestIdentifierCorrelationIdFactory() { _httpRequestIdentifierFeature = new HttpRequestIdentifierFeature(); }