public void IsMatchTest()
        {
            Array severities = Enum.GetValues(typeof(SyslogSeverity));

            for (int i = 0; i < Enum.GetValues(typeof(SyslogFacility)).Length; i++)
            {
                for (int j = 0; j < Enum.GetValues(typeof(SyslogFacility)).Length; j++)
                {
                    SyslogFacility to_set   = (SyslogFacility)Enum.GetValues(typeof(SyslogFacility)).GetValue(i);
                    SyslogFacility to_match = (SyslogFacility)Enum.GetValues(typeof(SyslogFacility)).GetValue(j);

                    FacilityEqualsFilter target = new FacilityEqualsFilter {
                        facility = to_match
                    };
                    //Random SyslogSeverity
                    SyslogMessage message = new SyslogMessage(null, "logbus.dis.unina.it", to_set, SyslogSeverity.Info,
                                                              "Hello people!");

                    bool expected = i == j;

                    bool actual;
                    actual = target.IsMatch(message);

                    Assert.AreEqual(expected, actual);
                }
            }
        }
        public void FacilityEqualsFilterConstructorTest()
        {
            FacilityEqualsFilter target = new FacilityEqualsFilter
            {
                facility = SyslogFacility.Clock2
            };

            Assert.IsNotNull(target);
            Assert.IsInstanceOfType(target, typeof(FacilityEqualsFilter));
            Assert.AreEqual(target.facility, SyslogFacility.Clock2);
        }
Пример #3
0
        public void filterTest()
        {
            OrFilter target = new OrFilter();
            FilterBase
                f1 = new TrueFilter(),
                f2 = new NotFilter {
                filter = new FalseFilter()
            },
                f3 = new MessageRegexMatchFilter {
                pattern = "FFDA"
            },
                f4 = new FacilityEqualsFilter {
                facility = SyslogFacility.Security
            };

            target.filter = new FilterBase[] { f1, f2, f3, f4 };

            Assert.AreEqual(target.filter[0], f1);
            Assert.IsInstanceOfType(target.filter[1], typeof(NotFilter));
            Assert.IsInstanceOfType(target.filter[3], typeof(FacilityEqualsFilter));
            Assert.AreEqual(((FacilityEqualsFilter)target.filter[3]).facility, SyslogFacility.Security);
        }
Пример #4
0
        public void IsMatchTest()
        {
            {
                FilterBase f1 = new FacilityEqualsFilter
                {
                    facility = SyslogFacility.Ftp
                },
                           f2 = new MessageRegexMatchFilter
                {
                    pattern = "^FFDA"
                };

                OrFilter target = new OrFilter();
                target.filter = new FilterBase[] { f1, f2 };


                SyslogMessage message = new SyslogMessage
                {
                    Facility = SyslogFacility.Internally,
                    Severity = SyslogSeverity.Error,
                    Text     = "FFDA WOW!"
                };


                bool expected = true;
                bool actual;
                actual = target.IsMatch(message);
                Assert.AreEqual(expected, actual);
            }

            {
                FilterBase f1 = new FacilityEqualsFilter
                {
                    facility = SyslogFacility.Ftp
                },
                           f2 = new MessageRegexMatchFilter
                {
                    pattern = "^FFDA"
                };

                OrFilter target = new OrFilter();
                target.filter = new FilterBase[] { f1, f2 };


                SyslogMessage message = new SyslogMessage
                {
                    Facility = SyslogFacility.Ftp,
                    Severity = SyslogSeverity.Error,
                    Text     = "Nobody!"
                };


                bool expected = true;
                bool actual;
                actual = target.IsMatch(message);
                Assert.AreEqual(expected, actual);
            }

            {
                string msg =
                    @"<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - ’su root’ failed for lonvick on /dev/pts/8";
                FilterBase f1 = new FacilityEqualsFilter
                {
                    facility = SyslogFacility.Security
                },
                           f2 = new MessageRegexMatchFilter
                {
                    //Ok, that should be the real UNIX user pattern but let's assume only letters and numbers here :)
                    pattern = "’su root’ failed for [a-zA-Z0-9]"
                },
                           f3 = new SeverityFilter
                {
                    comparison = ComparisonOperator.neq,
                    severity   = SyslogSeverity.Emergency
                };

                OrFilter target = new OrFilter();
                target.filter = new FilterBase[] { f1, f2, f3 };


                SyslogMessage message = SyslogMessage.Parse(msg);


                bool expected = true;
                bool actual;
                actual = target.IsMatch(message);
                Assert.AreEqual(expected, actual);
            }
        }
Пример #5
0
        public void FFDATest()
        {
            FilterBase ffda_filter =
                new FacilityEqualsFilter()
            {
                facility = SyslogFacility.Local0
            } &
            new PropertyFilter()
            {
                comparison = ComparisonOperator.eq, propertyName = Property.MessageID, value = "FFDA"
            };

            StringBuilder markup = new StringBuilder();

            new XmlSerializer(typeof(FilterBase)).Serialize(XmlTextWriter.Create(markup, new XmlWriterSettings()
            {
                Indent = true
            }), ffda_filter, ffda_filter.xmlns);

            TestContext.WriteLine("{0}", markup.ToString());

            const int SEND_PORT = 5427;

            //Init Logbus
            LogbusServerConfiguration core_config = new LogbusServerConfiguration();

            core_config.corefilter = ffda_filter;
            InboundChannelDefinition in_ch = new InboundChannelDefinition();

            in_ch.type  = "SyslogUdpReceiver";
            in_ch.param = new KeyValuePair[]
            {
                new KeyValuePair()
                {
                    name  = "port",
                    value = SEND_PORT.ToString()
                }
            };
            core_config.inchannels = new InboundChannelDefinition[] { in_ch };

            using (ILogBus logbus = new LogbusService(core_config))
            {
                logbus.MessageReceived += new EventHandler <SyslogMessageEventArgs>(logbus_MessageReceived);
                logbus.Start();

                //Init FFDA
                LogbusLoggerConfiguration source_config = new LogbusLoggerConfiguration();
                LoggerDefinition          udp_def       = new LoggerDefinition()
                {
                    type  = "SyslogUdpCollector",
                    param = new KeyValuePair[] { new KeyValuePair()
                                                 {
                                                     name = "port", value = SEND_PORT.ToString()
                                                 }, new KeyValuePair()
                                                 {
                                                     name = "ip", value = "127.0.0.1"
                                                 } }
                };
                source_config.logger       = new LoggerDefinition[] { udp_def };
                LoggerHelper.Configuration = source_config;

                //Send what we want: 2 FFDA messages
                IFieldFailureDataLogger logger = FieldFailureDataHelper.CreateFailureDataLogger("ffda");
                logger.LogSST();
                logger.LogSEN();

                //Send junk
                ILog junk_log = LoggerHelper.GetLogger();
                junk_log.Debug("Hello");
                junk_log.Error("Junk error");

                Thread.Sleep(1000);
                logbus.Stop();
            }

            Assert.AreEqual(2, messages);
        }
Пример #6
0
        private static void Run(int timeout)
        {
            _messagesRcvd = new BitArray(_expected, false);
            _received     = 0;
            string pid = Process.GetCurrentProcess().Id.ToString(CultureInfo.InvariantCulture);

            ILogCollector  server     = CollectorHelper.CreateCollector();
            string         host       = Dns.GetHostName();
            PropertyFilter hostFilter = new PropertyFilter
            {
                comparison   = ComparisonOperator.eq,
                value        = host,
                propertyName = Property.Host
            };
            FacilityEqualsFilter facFilter = new FacilityEqualsFilter {
                facility = SyslogFacility.Local4
            };
            PropertyFilter pidFilter = new PropertyFilter
            {
                comparison   = ComparisonOperator.eq,
                value        = pid,
                propertyName = Property.ProcessID
            };
            PropertyFilter idFilter = new PropertyFilter
            {
                value        = "BENCH",
                comparison   = ComparisonOperator.eq,
                propertyName = Property.MessageID
            };
            SeverityFilter sevFilter = new SeverityFilter
            {
                comparison = ComparisonOperator.eq,
                severity   = SyslogSeverity.Notice
            };

            using (ILogClient client = ClientHelper.CreateReliableClient(hostFilter & pidFilter & idFilter & sevFilter & facFilter))
            {
                client.MessageReceived += client_MessageReceived;
                client.Start();

                for (int i = 0; i < _expected; i++)
                {
                    if (timeout > 0)
                    {
                        Nanosleep(timeout);
                    }
                    SyslogMessage message = new SyslogMessage
                    {
                        Timestamp = DateTime.Now,
                        Facility  = SyslogFacility.Local4,
                        Severity  = SyslogSeverity.Notice,
                        Host      = host,
                        ProcessID = pid,
                        MessageId = "BENCH",
                        Text      = i.ToString()
                    };

                    server.SubmitMessage(message);
                }
                silenceTimer = new Timer(state => Stop.Set(), null, 40000, Timeout.Infinite);
                Console.WriteLine("Waiting up to 30 seconds after last message received...");
                Stop.WaitOne();
            }

            if (_expected == _received)
            {
                Console.WriteLine("Received all messaged");
            }
            else
            {
                Console.WriteLine("Lost {0} messages", _expected - _received);
            }
        }