public void CanUseThrowOnCancel()
        {
            var schedulerToTest = new BackgroundWorkScheduler(_logger.Object, _options.Object);

            schedulerToTest.QueueWork((ct) =>
            {
                while (true)
                {
                    ct.ThrowIfCancellationRequested();
                    Thread.Sleep(1);
                }
                ;
            });

            Thread.Sleep(500);
            ((IHostedService)schedulerToTest).Stop();

            _logger.Verify(logger => logger.Log(LogLevel.Information,
                                                It.IsAny <EventId>(),
                                                It.IsAny <object>(),
                                                It.IsAny <Exception>(),
                                                It.IsAny <Func <object, Exception, string> >()), Times.AtLeastOnce());
            _logger.Verify(logger => logger.Log(LogLevel.Error,
                                                It.IsAny <EventId>(),
                                                It.IsAny <object>(),
                                                It.IsAny <Exception>(),
                                                It.IsAny <Func <object, Exception, string> >()), Times.Never());
        }
示例#2
0
        public FileStoreRepository()
        {
            var logger = new LoggerFactory().CreateLogger <BackgroundWorkScheduler>();

            _backgroundWorkScheduler = new BackgroundWorkScheduler(logger, new BackgroundWorkSchedulerOptions {
                Timeout = TimeSpan.FromMinutes(5)
            });
        }
        public void CannotQueueWorkAfterStop()
        {
            var schedulerToTest = new BackgroundWorkScheduler(_logger.Object, _options.Object);

            schedulerToTest.Stop();

            Assert.Throws <InvalidOperationException>(() => schedulerToTest.QueueWork((ct) => { return; }));
        }
        public void CanShutdownWellBehavingOnGoingWork()
        {
            var schedulerToTest = new BackgroundWorkScheduler(_logger.Object, _options.Object);

            bool complete = false;

            schedulerToTest.QueueWork((ct) =>
            {
                ct.WaitHandle.WaitOne();
                complete = true;
            });

            Thread.Sleep(500);

            ((IHostedService)schedulerToTest).Stop();
            Assert.True(complete);
        }
        public void CanThrowInBackgroundTask()
        {
            var schedulerToTest = new BackgroundWorkScheduler(_logger.Object, _options.Object);

            schedulerToTest.QueueWork((ct) =>
            {
                throw new Exception();
            });

            //Give time for task to actually start....yuck.
            Thread.Sleep(500);

            ((IHostedService)schedulerToTest).Stop();

            //TODO: Needing to check logging is probably an indicator
            //that some refactoring would help.
            _logger.Verify(logger => logger.Log(LogLevel.Error,
                                                It.IsAny <EventId>(),
                                                It.IsAny <object>(),
                                                It.IsAny <Exception>(),
                                                It.IsAny <Func <object, Exception, string> >()), Times.AtLeastOnce());
        }
        public void CannotShutdownIgnorantTaskLogsError()
        {
            var schedulerToTest = new BackgroundWorkScheduler(_logger.Object, _options.Object);

            schedulerToTest.QueueWork((ct) =>
            {
                while (true)
                {
                    Thread.Sleep(1);
                }
                ;
            });

            Thread.Sleep(500);

            ((IHostedService)schedulerToTest).Stop();

            _logger.Verify(logger => logger.Log(LogLevel.Error,
                                                It.IsAny <EventId>(),
                                                It.IsAny <object>(),
                                                It.IsAny <Exception>(),
                                                It.IsAny <Func <object, Exception, string> >()), Times.AtLeastOnce());
        }
        public void EnqueueThrowsWhenWorkNull()
        {
            var schedulerToTest = new BackgroundWorkScheduler(_logger.Object, _options.Object);

            Assert.Throws <ArgumentNullException>(() => schedulerToTest.QueueWork(null));
        }