Ejemplo n.º 1
0
        public void IfWriteAsyncTimesOutHandleErrorIsCalled()
        {
            var logProcessor = new BackgroundLogProcessor();

            var mockLogProvider = new Mock <ILogProvider>();
            var logEntry        = new LogEntry();

            mockLogProvider.Setup(m => m.WriteAsync(It.IsAny <LogEntry>(), It.IsAny <CancellationToken>())).Returns(() => Task.Delay(200));
            mockLogProvider.Setup(m => m.Timeout).Returns(TimeSpan.FromMilliseconds(10));

            Error capturedError = null;
            var   waitHandle    = new AutoResetEvent(false);

            IErrorHandler errorHandler = DelegateErrorHandler.New(error =>
            {
                capturedError = error;
                waitHandle.Set();
            });

            logProcessor.Unlock().SendToLogProvider(mockLogProvider.Object, logEntry, errorHandler, 1);

            waitHandle.WaitOne(10000).Should().BeTrue();

            capturedError.Should().NotBeNull();
            capturedError.IsTimeout.Should().BeTrue();
            capturedError.LogProvider.Should().BeSameAs(mockLogProvider.Object);
            capturedError.LogEntry.Should().BeSameAs(logEntry);
            capturedError.FailureCount.Should().Be(2);
        }
Ejemplo n.º 2
0
        public void ProcessLogEntryCallsWriteAsyncOnTheLogProvider()
        {
            var logProcessor = new BackgroundLogProcessor();

            var mockContextProvider = new Mock <IContextProvider>();
            var mockLogProvider     = new Mock <ILogProvider>();

            var logger = new Logger(logProcessor,
                                    logProviders: new[] { mockLogProvider.Object },
                                    contextProviders: new[] { mockContextProvider.Object });

            var logEntry = new LogEntry();

            try
            {
                logProcessor.ProcessLogEntry(logger, logEntry);
            }
            finally
            {
                logProcessor.Dispose();
            }

            mockContextProvider.Verify(m => m.AddContext(logEntry), Times.Once);
            mockLogProvider.Verify(m => m.WriteAsync(logEntry, It.IsAny <CancellationToken>()), Times.Once);
        }
Ejemplo n.º 3
0
        private static BackgroundLogProcessor GetBackgroundLogProcessor()
        {
            var processor = new BackgroundLogProcessor();

            AppDomain.CurrentDomain.ProcessExit  += (sender, eventArgs) => processor.Dispose();
            AppDomain.CurrentDomain.DomainUnload += (sender, eventArgs) => processor.Dispose();

            return(processor);
        }
Ejemplo n.º 4
0
        public void ProcessLogEntryDoesNothingWhenIsDisposedIsTrue()
        {
            var logProcessor = new BackgroundLogProcessor();

            var mockContextProvider = new Mock <IContextProvider>();
            var mockLogProvider     = new Mock <ILogProvider>();

            var logger = new Logger(logProcessor,
                                    logProviders: new[] { mockLogProvider.Object },
                                    contextProviders: new[] { mockContextProvider.Object });

            var logEntry = new LogEntry();

            logProcessor.Dispose();

            logProcessor.ProcessLogEntry(logger, logEntry);

            mockContextProvider.Verify(m => m.AddContext(It.IsAny <LogEntry>()), Times.Never);
            mockLogProvider.Verify(m => m.WriteAsync(It.IsAny <LogEntry>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Ejemplo n.º 5
0
        public void IfWriteAsyncThrowsWhileAwaitingHandleErrorIsCalled()
        {
            var logProcessor = new BackgroundLogProcessor();

            var logProvider = new FakeLogProvider();
            var logEntry    = new LogEntry();

            Error capturedError = null;

            IErrorHandler errorHandler = DelegateErrorHandler.New(error =>
            {
                capturedError = error;
            });

            logProcessor.Unlock().SendToLogProvider(logProvider, logEntry, errorHandler, 1);

            logProcessor.Dispose();

            capturedError.Should().NotBeNull();
            capturedError.Exception.Message.Should().Be("oh, no.");
            capturedError.LogProvider.Should().BeSameAs(logProvider);
            capturedError.LogEntry.Should().BeSameAs(logEntry);
            capturedError.FailureCount.Should().Be(2);
        }