public void EventQueueGrow_OnQueueGrow()
        {
            int queueLimit       = 2;
            int loggedEventCount = 10;

            int expectedGrowingNumber = 0;

        #if NETCOREAPP2_0
            expectedGrowingNumber = loggedEventCount - queueLimit;
        #else
            expectedGrowingNumber = 3;
        #endif

            int eventsCounter = 0;
            var myTarget      = new MyTarget();

            var targetWrapper = new AsyncTargetWrapperForEventTests()
            {
                WrappedTarget             = myTarget,
                QueueLimit                = queueLimit,
                TimeToSleepBetweenBatches = 500,    // Make it slow
                OverflowAction            = AsyncTargetWrapperOverflowAction.Grow,
            };

            var logFactory    = new LogFactory();
            var loggingConfig = new NLog.Config.LoggingConfiguration(logFactory);
            loggingConfig.AddRuleForAllLevels(targetWrapper);
            logFactory.Configuration = loggingConfig;
            var logger = logFactory.GetLogger("Test");

            try
            {
                targetWrapper.EventQueueGrow += (o, e) => { eventsCounter++; };

                for (int i = 0; i < loggedEventCount; i++)
                {
                    logger.Info("Hello");
                }

                Assert.Equal(expectedGrowingNumber, eventsCounter);
            }
            finally
            {
                logFactory.Configuration = null;
            }
        }
        public void LogEventDropped_OnRequestqueueOverflow()
        {
            int queueLimit       = 2;
            int loggedEventCount = 5;
            int eventsCounter    = 0;
            var myTarget         = new MyTarget();

            var targetWrapper = new AsyncTargetWrapperForEventTests()
            {
                WrappedTarget             = myTarget,
                QueueLimit                = queueLimit,
                TimeToSleepBetweenBatches = 500,    // Make it slow
                OverflowAction            = AsyncTargetWrapperOverflowAction.Discard,
            };

            var logFactory    = new LogFactory();
            var loggingConfig = new NLog.Config.LoggingConfiguration(logFactory);

            loggingConfig.AddRuleForAllLevels(targetWrapper);
            logFactory.Configuration = loggingConfig;
            var logger = logFactory.GetLogger("Test");

            try
            {
                targetWrapper.LogEventDropped += (o, e) => { eventsCounter++; };

                for (int i = 0; i < loggedEventCount; i++)
                {
                    logger.Info("Hello");
                }

                Assert.Equal(loggedEventCount - queueLimit, eventsCounter);
            }
            finally
            {
                logFactory.Configuration = null;
            }
        }
        public void LogEventNotDropped_IfOverflowActionGrow()
        {
            int queueLimit       = 2;
            int loggedEventCount = 5;
            int eventsCounter    = 0;
            var myTarget         = new MyTarget();

            var targetWrapper = new AsyncTargetWrapperForEventTests()
            {
                WrappedTarget  = myTarget,
                QueueLimit     = queueLimit,
                OverflowAction = AsyncTargetWrapperOverflowAction.Grow
            };

            var logFactory    = new LogFactory();
            var loggingConfig = new NLog.Config.LoggingConfiguration(logFactory);

            loggingConfig.AddRuleForAllLevels(targetWrapper);
            logFactory.Configuration = loggingConfig;
            var logger = logFactory.GetLogger("Test");

            try
            {
                targetWrapper.LogEventDropped += (o, e) => { eventsCounter++; };

                for (int i = 0; i < loggedEventCount; i++)
                {
                    logger.Info("Hello");
                }

                Assert.Equal(0, eventsCounter);
            }
            finally
            {
                logFactory.Configuration = null;
            }
        }