public void TestWritingToQueuingWriter() { var msg = new SyslogMessage { Facility = SyslogFacility.ClockDaemon1, Severity = SyslogSeverity.Alert }; var mockRepo = new MockRepository(MockBehavior.Strict); Mock <ISyslogMessageWriter> syslogMessageWriterMock = mockRepo.Create <ISyslogMessageWriter>(); using (AutoResetEvent evt = new AutoResetEvent(false)) { syslogMessageWriterMock.Setup(w => w.Write(msg)).Callback(() => { // ReSharper disable once AccessToDisposedClosure evt.Set( ); }); var queuingWriter = new SyslogQueueingMessageWriter(syslogMessageWriterMock.Object, 2); queuingWriter.Write(msg); evt.WaitOne(3000); } mockRepo.VerifyAll(); }
public void TestWritingNullMessage() { var mockRepo = new MockRepository(MockBehavior.Loose); Mock <ISyslogMessageWriter> syslogMessageWriterMock = mockRepo.Create <ISyslogMessageWriter>(); var queuingWriter = new SyslogQueueingMessageWriter(syslogMessageWriterMock.Object, 2); Assert.Throws <ArgumentNullException>(() => queuingWriter.Write(null)); }
public void TestFailingWriteSuccessfullRetryToQueuingWriter() { int maxRetries = 2; string msgId = "TestMessageId"; var msg = new SyslogMessage { Facility = SyslogFacility.ClockDaemon1, Severity = SyslogSeverity.Alert, MsgId = msgId }; var mockRepo = new MockRepository(MockBehavior.Strict); using (CountdownEvent evt = new CountdownEvent(maxRetries)) { Mock <ISyslogMessageWriter> syslogMessageWriterMock = mockRepo.Create <ISyslogMessageWriter>( ); syslogMessageWriterMock.Setup(w => w.Write(msg)).Callback <SyslogMessage>(m => { // ReSharper disable once AccessToDisposedClosure evt.Signal( ); // ReSharper disable once AccessToDisposedClosure if (evt.CurrentCount == 1) { // Throw on first call throw new InvalidOperationException( ); } }); var queuingWriter = new SyslogQueueingMessageWriter(syslogMessageWriterMock.Object, maxRetries); // Test queuingWriter.Write(msg); evt.Wait(3000); // Validation syslogMessageWriterMock.Verify(w => w.Write(It.IsAny <SyslogMessage>( )), Times.Exactly(maxRetries)); } mockRepo.VerifyAll(); }
public void TestDisposeFlushesQueueingWriter() { var syncRoot = new object(); var msg = new SyslogMessage { Facility = SyslogFacility.ClockDaemon1, Severity = SyslogSeverity.Alert }; var mockRepo = new MockRepository(MockBehavior.Strict); int messagesProcessed = 0; Mock <ISyslogMessageWriter> syslogMessageWriterMock = mockRepo.Create <ISyslogMessageWriter>(); syslogMessageWriterMock.Setup(w => w.Write(msg)).Callback <SyslogMessage>(m => { lock (syncRoot) { messagesProcessed++; } }); var queuingWriter = new SyslogQueueingMessageWriter(syslogMessageWriterMock.Object, 2); // Lock when writing to queue to force the writer to wait so that the dispose actually has work to do lock (syncRoot) { for (int i = 0; i < 10; i++) { queuingWriter.Write(msg); } } queuingWriter.Dispose(); Assert.AreEqual(10, messagesProcessed, "The number of processed messages is invalid."); mockRepo.VerifyAll(); }