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); }
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); }
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 }