Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        public void Middleware_Defaults_To_Status_200()
        {
            var middleware = _WebApi.AppFuncBuilder(MockMiddleware.StubAppFunc);

            MockMiddleware.Call(middleware, _Environment.Environment);

            Assert.AreEqual(200, _Environment.ResponseStatusCode);
        }
Ejemplo n.º 4
0
        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")
            });