Ejemplo n.º 1
0
        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>());
        }
Ejemplo n.º 2
0
        // 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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
    public void TraceIdentifier_ReturnsId()
    {
        var feature = new HttpRequestIdentifierFeature();

        var id = feature.TraceIdentifier;

        Assert.NotNull(id);
    }
Ejemplo n.º 5
0
    public void TraceIdentifier_ReturnsStableId()
    {
        var feature = new HttpRequestIdentifierFeature();

        var id1 = feature.TraceIdentifier;
        var id2 = feature.TraceIdentifier;

        Assert.Equal(id1, id2);
    }
Ejemplo n.º 6
0
    public void TraceIdentifier_ReturnsUniqueIdForDifferentInstances()
    {
        var feature1 = new HttpRequestIdentifierFeature();
        var feature2 = new HttpRequestIdentifierFeature();

        var id1 = feature1.TraceIdentifier;
        var id2 = feature2.TraceIdentifier;

        Assert.NotEqual(id1, id2);
    }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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>());
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RequestIdentifierCorrelationIdFactory"/> class.
 /// </summary>
 public RequestIdentifierCorrelationIdFactory()
 {
     _httpRequestIdentifierFeature = new HttpRequestIdentifierFeature();
 }