public async Task LogRequestAndResponseMustNotBeBeforeBatchLogs()
        {
            const string url = "https://v-mock.org/v2/smoke-testing-company/ver";

#if NETCOREAPP
            var innerHandler = new BatchLogs(async ctx => await Task.CompletedTask);
            var outerHandler =
                new LogRequestAndResponse(innerHandler.InvokeAsync);
            var context = new DefaultHttpContext();
            SetRequest(context, url);
#else
            var outerHandler = new LogRequestAndResponse()
            {
                InnerHandler = new BatchLogs
                {
                    InnerHandler = new GetContextTestHandler()
                    {
                        InnerHandler = new Mock <HttpMessageHandler>().Object
                    }
                }
            };
            var invoker = new HttpMessageInvoker(outerHandler);
            var request = new HttpRequestMessage(HttpMethod.Get, url);
#endif

            try
            {
#if NETCOREAPP
                await outerHandler.InvokeAsync(context);
#else
                await invoker.SendAsync(request, CancellationToken.None);
#endif
                Assert.Fail("Expected an exception");
            }
            catch (FulcrumContractException e)
            {
                Assert.IsTrue(e.Message.Contains("must not precede"));
            }
            catch (Exception e)
            {
                Assert.Fail(
                    $"Expected an exception of type {nameof(FulcrumContractException)}, but caught exception {e.GetType().FullName}");
            }
        }
        public async Task BatchLogs()
        {
            _logCounter = 0;
            var mockLogger = new Mock <ISyncLogger>();

            mockLogger.Setup(logger =>
                             logger.LogSync(
                                 It.IsAny <LogRecord>()))
            .Callback((LogRecord lr) =>
            {
                Assert.IsTrue(FulcrumApplication.Context.IsInBatchLogger);
                Interlocked.Increment(ref _logCounter);
            })
            .Verifiable();
            FulcrumApplication.Setup.SynchronousFastLogger     = new BatchLogger(mockLogger.Object);
            FulcrumApplication.Setup.LogSeverityLevelThreshold = LogSeverityLevel.Information;

#if NETCOREAPP
            var doLogging        = new LogFiveTimesHandler(async c => await Task.CompletedTask);
            var batchLogsHandler = new BatchLogs(doLogging.InvokeAsync, LogSeverityLevel.Warning);
            var context          = new DefaultHttpContext();
            Assert.IsFalse(FulcrumApplication.Context.IsInBatchLogger);
            await batchLogsHandler.InvokeAsync(context);

            Assert.IsFalse(FulcrumApplication.Context.IsInBatchLogger);
#else
            var handler = new BatchLogs(LogSeverityLevel.Warning)
            {
                InnerHandler = new LogFiveTimesHandler()
            };
            var invoker = new HttpMessageInvoker(handler);
            var request = new HttpRequestMessage(HttpMethod.Get, "https://v-mock.org/v2/smoke-testing-company/ver");
            Assert.IsFalse(FulcrumApplication.Context.IsInBatchLogger);
            await invoker.SendAsync(request, CancellationToken.None);

            Assert.IsFalse(FulcrumApplication.Context.IsInBatchLogger);
#endif
            mockLogger.Verify();
        }