예제 #1
0
        public async Task Aggregator_AlternatesTimerAndBatch()
        {
            int publishCalls   = 0;
            int totalSuccesses = 0;
            int batchSize      = 100;

            ILoggerFactory factory = CreateMockLoggerFactory((props) =>
            {
                publishCalls++;
                totalSuccesses += Convert.ToInt32(props[LogConstants.SuccessesKey]);
            });

            var aggregator = new FunctionResultAggregator(batchSize, TimeSpan.FromSeconds(1), factory);

            // do this loop twice to ensure it continues working
            for (int i = 0; i < 2; i++)
            {
                // insert 225. Expect 2 calls to publish, then a flush for 25.
                await AddSuccessResults(aggregator, 225);

                await Task.Delay(1100);

                Assert.Equal(3 * (i + 1), publishCalls);
            }

            Assert.Equal(6, publishCalls);
            Assert.Equal(450, totalSuccesses);
        }
예제 #2
0
        public async Task Aggregator_FlushesOnCancelation()
        {
            int batchSize    = 100;
            int publishCalls = 0;

            ILoggerFactory factory = CreateMockLoggerFactory((props) =>
            {
                publishCalls++;
                Assert.Equal(10, props[LogConstants.SuccessesKey]);
            });

            var aggregator = new FunctionResultAggregator(batchSize, TimeSpan.FromSeconds(1), factory);

            await AddSuccessResults(aggregator, 10);
        }
예제 #3
0
        public async Task Aggregator_DoesNotTrim_NonDefaultClassName()
        {
            int batchSize    = 10;
            int publishCalls = 0;

            ILoggerFactory factory = CreateMockLoggerFactory((props) =>
            {
                publishCalls++;
                Assert.Equal(10, props[LogConstants.SuccessesKey]);
                Assert.Equal("AnotherClass.SomeTest", props[LogConstants.NameKey]);
            });

            var aggregator = new FunctionResultAggregator(batchSize, TimeSpan.FromSeconds(1), factory);

            await AddSuccessResults(aggregator, 10, "AnotherClass.SomeTest");
        }
        public async Task Aggregator_Trims_DefaultClassName()
        {
            int batchSize    = 10;
            int publishCalls = 0;

            ILoggerFactory factory = CreateMockLoggerFactory((props) =>
            {
                publishCalls++;
                Assert.Equal(10, props[LoggingKeys.Successes]);
                Assert.Equal("SomeTest", props[LoggingKeys.Name]);
            });

            var aggregator = new FunctionResultAggregator(batchSize, TimeSpan.FromSeconds(1), factory);

            await AddSuccessResults(aggregator, 10, "Functions.SomeTest");
        }
예제 #5
0
        public async Task Aggregator_Flushes_WhenBatchIsFull(int batchSize)
        {
            int publishCalls = 0;

            ILoggerFactory factory = CreateMockLoggerFactory((props) =>
            {
                publishCalls++;
                Assert.Equal(batchSize, props[LogConstants.SuccessesKey]);
            });

            var aggregator = new FunctionResultAggregator(batchSize, TimeSpan.FromMinutes(1), factory);

            await AddSuccessResults(aggregator, batchSize * 5);

            // allow a flush
            await Task.Delay(100);

            Assert.Equal((batchSize * 5) / batchSize, publishCalls);
        }
예제 #6
0
        public async Task Aggregator_Flushes_WhenTimerFires()
        {
            int batchSize      = 1000;
            int numberToInsert = 10;
            int publishCalls   = 0;

            ILoggerFactory factory = CreateMockLoggerFactory((props) =>
            {
                publishCalls++;
                Assert.Equal(numberToInsert, props[LogConstants.SuccessesKey]);
            });

            var aggregator = new FunctionResultAggregator(batchSize, TimeSpan.FromSeconds(1), factory);

            await AddSuccessResults(aggregator, numberToInsert);

            // allow the timer to fire
            await Task.Delay(1100);

            Assert.Equal(1, publishCalls);
        }