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();
        }
Exemplo n.º 2
0
        /// <summary>
        ///     Initializes the <see cref="AuditLogInstance" /> class.
        /// </summary>
        static AuditLogInstance()
        {
            IList <IAuditLogWriter> auditLogWriters = new List <IAuditLogWriter>();

            try
            {
                AuditLogConfiguration auditLogConfiguration = ConfigurationSettings.GetAuditLogConfigurationSection();

                if (auditLogConfiguration?.EventLogSettings != null && auditLogConfiguration.EventLogSettings.IsEnabled)
                {
                    auditLogWriters.Add(new AuditLogEventLogWriter(EventLog.Application));
                }

                if (auditLogConfiguration?.EntityModelSettings != null && auditLogConfiguration.EntityModelSettings.IsEnabled)
                {
                    auditLogWriters.Add(new AuditLogEntityModelWriter(new AuditLogEntityModelDeleter()));
                }

                if (auditLogConfiguration?.SyslogSettings != null && auditLogConfiguration.SyslogSettings.IsEnabled && !string.IsNullOrEmpty(auditLogConfiguration.SyslogSettings.HostName) && auditLogConfiguration.SyslogSettings.Port > 0)
                {
                    IStreamProvider          tcpStreamProvider     = new TcpStreamProvider(auditLogConfiguration.SyslogSettings.HostName, auditLogConfiguration.SyslogSettings.Port, true, auditLogConfiguration.SyslogSettings.IsSecure, auditLogConfiguration.SyslogSettings.IgnoreSslErrors);
                    ISyslogMessageSerializer syslogMsgSerializer   = new SyslogMessageSerializer();
                    ISyslogMessageWriter     streamWriter          = new SyslogStreamWriter(tcpStreamProvider, syslogMsgSerializer);
                    ISyslogMessageWriter     queueingMessageWriter = new SyslogQueueingMessageWriter(streamWriter);

                    auditLogWriters.Add(new AuditLogSyslogWriter(queueingMessageWriter));
                }
            }
            catch (Exception ex)
            {
                EventLog.Application.WriteError("AuditLogInstance failed to initialize. Error: {0}.", ex.ToString());
            }

            AuditLogInstanceInternal = new AuditLog(auditLogWriters);
        }
        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();
        }
Exemplo n.º 6
0
        /// <summary>
        /// Get the syslog writer.
        /// </summary>
        /// <returns>The syslog writer.</returns>
        public static IEventLogWriter GetSyslogEventLogWriter()
        {
            DiagnosticsConfiguration diagnosticsConfiguration = ConfigurationSettings.GetDiagnosticsConfigurationSection();

            EventLogSyslogSettings syslogSettings = diagnosticsConfiguration?.SyslogSettings;

            if (syslogSettings == null || !syslogSettings.IsEnabled || string.IsNullOrEmpty(syslogSettings.HostName) || syslogSettings.Port <= 0)
            {
                return(null);
            }

            int    enterpriseId    = 0;
            string applicationName = string.Empty;

            SyslogConfiguration syslogConfiguration = ConfigurationSettings.GetSyslogConfigurationSection();

            if (syslogConfiguration?.SyslogApplicationSettings != null)
            {
                enterpriseId    = syslogConfiguration.SyslogApplicationSettings.EnterpriseId;
                applicationName = syslogConfiguration.SyslogApplicationSettings.ApplicationName;
            }

            // Fallback
            if (enterpriseId == 0)
            {
                enterpriseId = SyslogReadiNowConstants.EnterpriseId;
            }

            if (string.IsNullOrEmpty(applicationName))
            {
                applicationName = SyslogReadiNowConstants.ApplicationName;
            }

            string databaseName          = string.Empty;
            string databaseServer        = string.Empty;
            var    databaseConfiguration = ConfigurationSettings.GetDatabaseConfigurationSection();

            if (databaseConfiguration?.ConnectionSettings != null)
            {
                databaseName   = databaseConfiguration.ConnectionSettings.Database;
                databaseServer = databaseConfiguration.ConnectionSettings.Server;
            }

            IStreamProvider          tcpStreamProvider     = new TcpStreamProvider(syslogSettings.HostName, syslogSettings.Port, true, syslogSettings.IsSecure, syslogSettings.IgnoreSslErrors);
            ISyslogMessageSerializer syslogMsgSerializer   = new SyslogMessageSerializer();
            ISyslogMessageWriter     streamWriter          = new SyslogStreamWriter(tcpStreamProvider, syslogMsgSerializer);
            ISyslogMessageWriter     queueingMessageWriter = new SyslogQueueingMessageWriter(streamWriter, 0);

            return(new EventLogSyslogWriter(queueingMessageWriter)
            {
                EnterpriseId = enterpriseId,
                ApplicationName = applicationName,
                SoftwareVersion = SystemInfo.PlatformVersion,
                ErrorEnabled = syslogSettings.ErrorEnabled,
                WarningEnabled = syslogSettings.WarningEnabled,
                InformationEnabled = syslogSettings.InformationEnabled,
                TraceEnabled = syslogSettings.TraceEnabled,
                InstallFolder = SystemInfo.InstallFolder,
                DatabaseName = databaseName,
                DatabaseServer = databaseServer
            });
        }