private static INetworkSenderFactory CreateNetworkSenderFactoryMock(WebRequestMock webRequestMock)
        {
            var networkSenderFactoryMock = Substitute.For <INetworkSenderFactory>();

            networkSenderFactoryMock.Create(Arg.Any <string>(), Arg.Any <int>(), Arg.Any <SslProtocols>(), Arg.Any <TimeSpan>())
            .Returns(url => new HttpNetworkSender(url.Arg <string>())
            {
                HttpRequestFactory = new WebRequestFactoryMock(webRequestMock)
            });
            return(networkSenderFactoryMock);
        }
        public void HttpNetworkSenderViaNetworkTargetRecoveryTest()
        {
            // Arrange
            var networkTarget = new NetworkTarget("target1")
            {
                Address = "http://test.with.mock",
                Layout  = "${logger}|${message}|${exception}"
            };

            var webRequestMock = new WebRequestMock();

            webRequestMock.FirstRequestMustFail = true;
            var networkSenderFactoryMock = CreateNetworkSenderFactoryMock(webRequestMock);

            networkTarget.SenderFactory = networkSenderFactoryMock;

            var logFactory = new LogFactory();
            var config     = new LoggingConfiguration(logFactory);

            config.AddRuleForAllLevels(networkTarget);
            logFactory.Configuration = config;

            var logger = logFactory.GetLogger("HttpHappyPathTestLogger");

            // Act
            logger.Info("test message1");   // Will fail after short delay
            logger.Info("test message2");   // Will be queued and sent after short delay
            logFactory.Flush();

            // Assert
            var mock = webRequestMock;

            var requestedString = mock.GetRequestContentAsString();

            Assert.Equal("http://test.with.mock/", mock.RequestedAddress.ToString());
            Assert.Equal("HttpHappyPathTestLogger|test message2|", requestedString);
            Assert.Equal("POST", mock.Method);

            networkSenderFactoryMock.Received(1).Create("http://test.with.mock", 0, SslProtocols.None, new TimeSpan()); // Only created one HttpNetworkSender

            // Cleanup
            mock.Dispose();
        }