Ejemplo n.º 1
0
        public async Task Should_Generate_New_Trace_Id()
        {
            // Arrange
            var appContext  = new AppContextAccessorMock();
            var middleware  = new TraceIdMiddleware((innerHttpContext) => Task.CompletedTask, Options.Create(new TraceIdSettings()), appContext);
            var httpContext = new DefaultHttpContext();
            //Act
            await middleware.Invoke(httpContext);

            //Assert
            Assert.Equal(appContext.Context.TraceId, httpContext.TraceIdentifier);
        }
Ejemplo n.º 2
0
        public async Task Should_Reuse_Trace_Id()
        {
            // Arrange
            var appContext = new AppContextAccessorMock();
            var middleware = new TraceIdMiddleware((innerHttpContext) => Task.CompletedTask, Options.Create(new TraceIdSettings()), appContext);
            var context    = new DefaultHttpContext();

            context.Request.Headers.Add(
                new KeyValuePair <string, StringValues>(TraceIdSettings.DefaultHeader, appContext.Context.TraceId)
                );

            //Act
            await middleware.Invoke(context);

            //Assert
            Assert.Equal(appContext.Context.TraceId, context.TraceIdentifier);
        }
Ejemplo n.º 3
0
        public async Task CorrectHandleSettingsAsync(
            int caseNumber,
            HttpStatusCode expectedStatusCode,
            string initialTraceString,
            bool generateIfNotPresent,
            bool throwBadRequestIfNotPresent,
            bool initialAndFinalTraceIdMustBeEqual
            )
        {
            #region Arrange

            var initialTraceId  = Guid.Parse(initialTraceString);
            var traceIdSettings = new TraceIdSettings
            {
                GenerateIfNotPresent        = generateIfNotPresent,
                ThrowBadRequestIfNotPresent = throwBadRequestIfNotPresent
            };
            var traceContext1 = TraceContext.Create(initialTraceId);

            var context           = GetMockedContextFor(traceIdSettings, out var feature);
            var traceIdMiddleware =
                new TraceIdMiddleware(_ => feature.CompleteAsync(), Options.Create(traceIdSettings));

            #endregion Arrange

            #region Act

            await traceIdMiddleware.Invoke(context, NullLogger <TraceIdMiddleware> .Instance);

            #endregion Act

            #region Assert

            var traceContext2 = TraceContext.Current;

            var actualTraceId = GetActualTraceId(context, traceIdSettings);

            Assert.Multiple(() =>
            {
                Assert.AreEqual((int)expectedStatusCode, context.Response.StatusCode,
                                "status code должен быть ожидаемым.");

                if (initialAndFinalTraceIdMustBeEqual)
                {
                    Assert.AreEqual(initialTraceId, actualTraceId ?? Guid.Empty, "traceId до и после выполнения должны быть одинаковыми.");
                }

                if (traceIdSettings.GenerateIfNotPresent)
                {
                    Assert.IsTrue(ReferenceEquals(traceContext1, traceContext2), "Инстансы должны быть одним и тем же.");
                    Assert.AreNotEqual(Guid.Empty, TraceContext.Current.TraceId,
                                       "Если требуется генерировать при отсутствии TraceId, то TraceId не должен быть пустым.");

                    if (actualTraceId.HasValue)
                    {
                        Assert.IsTrue(actualTraceId != Guid.Empty);
                    }
                }
                else
                {
                    if (initialTraceId == Guid.Empty)
                    {
                        Assert.IsNull(actualTraceId);
                    }
                    else
                    {
                        Assert.AreEqual(initialTraceId, actualTraceId);
                    }
                }
            });

            #endregion Assert
        }