예제 #1
0
	def test_event_host(self):
		g = event.EventGenerator()
		events = g.randomEvents(100)
		for i in range(15):
			events[i].host = "FOO"
		host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
		self.assert_(len(host_is_foo(query_events=events))==15)
예제 #2
0
 def test_event_host(self):
     g = event.EventGenerator()
     events = g.randomEvents(100)
     for i in range(15):
         events[i].host = "FOO"
     host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
     self.assert_(len(host_is_foo(query_events=events)) == 15)
예제 #3
0
 def test_sequence(self):
     cache = TestCache([
         event.Event(name="TEST", host="A", creation=1, arrival=1),
         event.Event(name="TEST", host="B", creation=2, arrival=1),
         event.Event(name="TEST", host="B", creation=3, arrival=1),
         event.Event(name="TEST", host="C", creation=2, arrival=2),
         event.Event(name="TEST", host="C", creation=3, arrival=2),
     ])
     hosta = rulecomponents.event_host(lambda **kwargs: "A")
     hostb = rulecomponents.event_host(lambda **kwargs: "B")
     hostc = rulecomponents.event_host(lambda **kwargs: "C")
     seq_empty_any = rulecomponents.sequence("creation", "any", [])
     seq_empty_all = rulecomponents.sequence("creation", "all", [])
     seq_empty_any_arrival = rulecomponents.sequence("arrival", "any", [])
     seq_ab_any = rulecomponents.sequence("creation", "any", [hosta, hostb])
     seq_ab_all = rulecomponents.sequence("creation", "all", [hosta, hostb])
     seq_abc_any = rulecomponents.sequence("creation", "any",
                                           [hosta, hostb, hostc])
     seq_abc_all = rulecomponents.sequence("creation", "all",
                                           [hosta, hostb, hostc])
     seq_bc_any = rulecomponents.sequence("creation", "any", [hostb, hostc])
     seq_bc_all = rulecomponents.sequence("creation", "all", [hostb, hostc])
     seq_ab_any_arrival = rulecomponents.sequence("arrival", "any",
                                                  [hosta, hostb])
     seq_ab_all_arrival = rulecomponents.sequence("arrival", "all",
                                                  [hosta, hostb])
     seq_bc_any_arrival = rulecomponents.sequence("arrival", "any",
                                                  [hostb, hostc])
     seq_bc_all_arrival = rulecomponents.sequence("arrival", "all",
                                                  [hostb, hostc])
     self.assert_(seq_empty_any(query_events=cache.getEvents()) == True)
     self.assert_(seq_empty_all(query_events=cache.getEvents()) == True)
     self.assert_(seq_empty_any_arrival(query_events=cache) == True)
     self.assert_(seq_ab_any(query_events=cache.getEvents()) == True)
     self.assert_(seq_ab_all(query_events=cache.getEvents()) == True)
     self.assert_(seq_abc_any(query_events=cache.getEvents()) == True)
     self.assert_(seq_abc_all(query_events=cache.getEvents()) == False)
     self.assert_(seq_bc_any(query_events=cache.getEvents()) == True)
     self.assert_(seq_bc_all(query_events=cache.getEvents()) == False)
     self.assert_(
         seq_ab_any_arrival(query_events=cache.getEvents()) == False)
     self.assert_(
         seq_ab_all_arrival(query_events=cache.getEvents()) == False)
     self.assert_(
         seq_bc_any_arrival(query_events=cache.getEvents()) == True)
     self.assert_(
         seq_bc_all_arrival(query_events=cache.getEvents()) == True)
예제 #4
0
	def test_alphabet(self):
		cache = TestCache([
			event.Event(name="A", host="A", creation=1, arrival=6),
			event.Event(name="B", host="A", creation=2, arrival=5),
			event.Event(name="B", host="A", creation=3, arrival=4),
			event.Event(name="B", host="C", creation=4, arrival=3),
			event.Event(name="C", host="C", creation=5, arrival=2),
			event.Event(name="C", host="E", creation=5, arrival=2), # note the timestamps -> sorting must be stable
		])
		nameA = rulecomponents.event_query([rulecomponents.event_name("A")], None, None)
		nameBhostA = rulecomponents.event_query([rulecomponents.event_name("B"), rulecomponents.event_host(lambda **kwargs: "A")], None, None)
		nameB = rulecomponents.event_query([rulecomponents.event_name("B")], None, None)
		nameChostC = rulecomponents.event_query([rulecomponents.event_name("C"), rulecomponents.event_host(lambda **kwargs: "C")], None, None)
		nameC = rulecomponents.event_query([rulecomponents.event_name("C")], None, None)
		alphabet = rulecomponents.alphabet(sort_by="creation", symbols=[('f', nameA), ('o', nameBhostA), ('b', nameB), ('a', nameChostC), ('r', nameC)])
		alphabet2 = rulecomponents.alphabet(sort_by="arrival", symbols=[('f', nameA), ('o', nameBhostA), ('b', nameB), ('a', nameChostC), ('r', nameC)])
		self.assert_(alphabet(cache=cache)=="foobar")
		self.assert_(alphabet2(cache=cache)=="arboof") # not raboof, because the sorting of the two events with the same timestamp is not changed (see above)
예제 #5
0
	def test_complement(self):
		g = event.EventGenerator()
		events = g.randomEvents(100)
		cache = TestCache(events)
		for i in range(15):
			events[i].host = "FOO"
		host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
		complement = rulecomponents.complement(host_is_foo)
		self.assert_(len(complement(cache=cache, query_events=events))==85)
		self.assert_(sorted(complement(cache=cache, query_events=events))==sorted(events[15:100]))
예제 #6
0
 def test_alphabet(self):
     cache = TestCache([
         event.Event(name="A", host="A", creation=1, arrival=6),
         event.Event(name="B", host="A", creation=2, arrival=5),
         event.Event(name="B", host="A", creation=3, arrival=4),
         event.Event(name="B", host="C", creation=4, arrival=3),
         event.Event(name="C", host="C", creation=5, arrival=2),
         event.Event(
             name="C", host="E", creation=5,
             arrival=2),  # note the timestamps -> sorting must be stable
     ])
     nameA = rulecomponents.event_query([rulecomponents.event_name("A")],
                                        None, None)
     nameBhostA = rulecomponents.event_query([
         rulecomponents.event_name("B"),
         rulecomponents.event_host(lambda **kwargs: "A")
     ], None, None)
     nameB = rulecomponents.event_query([rulecomponents.event_name("B")],
                                        None, None)
     nameChostC = rulecomponents.event_query([
         rulecomponents.event_name("C"),
         rulecomponents.event_host(lambda **kwargs: "C")
     ], None, None)
     nameC = rulecomponents.event_query([rulecomponents.event_name("C")],
                                        None, None)
     alphabet = rulecomponents.alphabet(sort_by="creation",
                                        symbols=[('f', nameA),
                                                 ('o', nameBhostA),
                                                 ('b', nameB),
                                                 ('a', nameChostC),
                                                 ('r', nameC)])
     alphabet2 = rulecomponents.alphabet(sort_by="arrival",
                                         symbols=[('f', nameA),
                                                  ('o', nameBhostA),
                                                  ('b', nameB),
                                                  ('a', nameChostC),
                                                  ('r', nameC)])
     self.assert_(alphabet(cache=cache) == "foobar")
     self.assert_(
         alphabet2(cache=cache) == "arboof"
     )  # not raboof, because the sorting of the two events with the same timestamp is not changed (see above)
예제 #7
0
	def test_match_query(self):
		g = event.EventGenerator()
		events = g.randomEvents(100)
		events[42].host = "FOO"
		cache = TestCache(events)
		query = rulecomponents.event_query([rulecomponents.event_host(lambda **kwargs: "FOO")], None, "creation")
		queries = {"foo": {"bar": [query]}}
		rulemanager = TestRuleManager(queries = queries)
		match_query = rulecomponents.match_query("foo", "bar")
		evts = match_query(cache=cache, query_events=[], rulemanager=rulemanager)
		self.assert_(len(evts)==1)
		self.assert_(evts[0]==events[42])
예제 #8
0
 def test_complement(self):
     g = event.EventGenerator()
     events = g.randomEvents(100)
     cache = TestCache(events)
     for i in range(15):
         events[i].host = "FOO"
     host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
     complement = rulecomponents.complement(host_is_foo)
     self.assert_(len(complement(cache=cache, query_events=events)) == 85)
     self.assert_(
         sorted(complement(cache=cache, query_events=events)) == sorted(
             events[15:100]))
예제 #9
0
	def test_trigger_match(self):
		g = event.EventGenerator()
		e = g.randomEvent()
		e.host = "FOO"
		e.name = "BAR"
		host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
		name_is_bar = rulecomponents.event_name("BAR")
		both = rulecomponents.trigger_match([host_is_foo, name_is_bar])
		none = rulecomponents.trigger_match([])
		self.assert_(both(trigger=e)==True)
		self.assert_(none(trigger=e)==True)
		e.name = "FOO"
		self.assert_(both(trigger=e)==False)
예제 #10
0
 def test_trigger_match(self):
     g = event.EventGenerator()
     e = g.randomEvent()
     e.host = "FOO"
     e.name = "BAR"
     host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
     name_is_bar = rulecomponents.event_name("BAR")
     both = rulecomponents.trigger_match([host_is_foo, name_is_bar])
     none = rulecomponents.trigger_match([])
     self.assert_(both(trigger=e) == True)
     self.assert_(none(trigger=e) == True)
     e.name = "FOO"
     self.assert_(both(trigger=e) == False)
예제 #11
0
	def test_union(self):
		g = event.EventGenerator()
		events = g.randomEvents(100)
		for i in range(15):
			events[i].host = "FOO"
		for i in range(5,20):
			events[i].name = "BAR"
		host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
		name_is_bar = rulecomponents.event_name("BAR")
		both = rulecomponents.union([host_is_foo, name_is_bar])
		all = rulecomponents.union([])
		self.assert_(len(both(query_events=events))==20)
		self.assert_(sorted(both(query_events=events))==sorted(events[0:20]))
		self.assert_(len(all(query_events=events))==100)
예제 #12
0
 def test_union(self):
     g = event.EventGenerator()
     events = g.randomEvents(100)
     for i in range(15):
         events[i].host = "FOO"
     for i in range(5, 20):
         events[i].name = "BAR"
     host_is_foo = rulecomponents.event_host(lambda **kwargs: "FOO")
     name_is_bar = rulecomponents.event_name("BAR")
     both = rulecomponents.union([host_is_foo, name_is_bar])
     all = rulecomponents.union([])
     self.assert_(len(both(query_events=events)) == 20)
     self.assert_(sorted(both(query_events=events)) == sorted(events[0:20]))
     self.assert_(len(all(query_events=events)) == 100)
예제 #13
0
	def test_sequence(self):
		cache = TestCache([
			event.Event(name="TEST", host="A", creation=1, arrival=1),
			event.Event(name="TEST", host="B", creation=2, arrival=1),
			event.Event(name="TEST", host="B", creation=3, arrival=1),
			event.Event(name="TEST", host="C", creation=2, arrival=2),
			event.Event(name="TEST", host="C", creation=3, arrival=2),
		])
		hosta = rulecomponents.event_host(lambda **kwargs: "A")
		hostb = rulecomponents.event_host(lambda **kwargs: "B")
		hostc = rulecomponents.event_host(lambda **kwargs: "C")
		seq_empty_any = rulecomponents.sequence("creation", "any", [])
		seq_empty_all = rulecomponents.sequence("creation", "all", [])
		seq_empty_any_arrival = rulecomponents.sequence("arrival", "any", [])
		seq_ab_any = rulecomponents.sequence("creation", "any", [hosta, hostb])
		seq_ab_all = rulecomponents.sequence("creation", "all", [hosta, hostb])
		seq_abc_any = rulecomponents.sequence("creation", "any", [hosta, hostb, hostc])
		seq_abc_all = rulecomponents.sequence("creation", "all", [hosta, hostb, hostc])
		seq_bc_any = rulecomponents.sequence("creation", "any", [hostb, hostc])
		seq_bc_all = rulecomponents.sequence("creation", "all", [hostb, hostc])
		seq_ab_any_arrival = rulecomponents.sequence("arrival", "any", [hosta, hostb])
		seq_ab_all_arrival = rulecomponents.sequence("arrival", "all", [hosta, hostb])
		seq_bc_any_arrival = rulecomponents.sequence("arrival", "any", [hostb, hostc])
		seq_bc_all_arrival = rulecomponents.sequence("arrival", "all", [hostb, hostc])
		self.assert_(seq_empty_any(query_events=cache.getEvents())==True)
		self.assert_(seq_empty_all(query_events=cache.getEvents())==True)
		self.assert_(seq_empty_any_arrival(query_events=cache)==True)
		self.assert_(seq_ab_any(query_events=cache.getEvents())==True)
		self.assert_(seq_ab_all(query_events=cache.getEvents())==True)
		self.assert_(seq_abc_any(query_events=cache.getEvents())==True)
		self.assert_(seq_abc_all(query_events=cache.getEvents())==False)
		self.assert_(seq_bc_any(query_events=cache.getEvents())==True)
		self.assert_(seq_bc_all(query_events=cache.getEvents())==False)
		self.assert_(seq_ab_any_arrival(query_events=cache.getEvents())==False)
		self.assert_(seq_ab_all_arrival(query_events=cache.getEvents())==False)
		self.assert_(seq_bc_any_arrival(query_events=cache.getEvents())==True)
		self.assert_(seq_bc_all_arrival(query_events=cache.getEvents())==True)
예제 #14
0
 def test_match_query(self):
     g = event.EventGenerator()
     events = g.randomEvents(100)
     events[42].host = "FOO"
     cache = TestCache(events)
     query = rulecomponents.event_query(
         [rulecomponents.event_host(lambda **kwargs: "FOO")], None,
         "creation")
     queries = {"foo": {"bar": [query]}}
     rulemanager = TestRuleManager(queries=queries)
     match_query = rulecomponents.match_query("foo", "bar")
     evts = match_query(cache=cache,
                        query_events=[],
                        rulemanager=rulemanager)
     self.assert_(len(evts) == 1)
     self.assert_(evts[0] == events[42])