use of org.graylog2.streams.StreamRouterEngine in project graylog2-server by Graylog2.
the class StreamRouterEngineTest method testInvertedContainsMatch.
@Test
public void testInvertedContainsMatch() throws Exception {
final StreamMock stream = getStreamMock("test");
final StreamRuleMock rule = new StreamRuleMock(ImmutableMap.<String, Object>builder().put("_id", new ObjectId()).put("field", "testfield").put("inverted", true).put("value", "testvalue").put("type", StreamRuleType.CONTAINS.toInteger()).put("stream_id", stream.getId()).build());
stream.setStreamRules(Lists.newArrayList(rule));
final StreamRouterEngine engine = newEngine(Lists.newArrayList(stream));
final Message message = getMessage();
// Without the field
assertEquals(Lists.newArrayList(stream), engine.match(message));
// Without the matching value in the field
message.addField("testfield", "no-foobar");
assertEquals(Lists.newArrayList(stream), engine.match(message));
// With matching value in the field.
message.addField("testfield", "hello testvalue");
assertTrue(engine.match(message).isEmpty());
}
use of org.graylog2.streams.StreamRouterEngine in project graylog2-server by Graylog2.
the class StreamRouterEngineTest method testTestMatch.
@Test
public void testTestMatch() throws Exception {
final StreamMock stream = getStreamMock("test");
final StreamRuleMock rule1 = new StreamRuleMock(ImmutableMap.of("_id", new ObjectId(), "field", "testfield1", "type", StreamRuleType.PRESENCE.toInteger(), "stream_id", stream.getId()));
final StreamRuleMock rule2 = new StreamRuleMock(ImmutableMap.of("_id", new ObjectId(), "field", "testfield2", "value", "^test", "type", StreamRuleType.REGEX.toInteger(), "stream_id", stream.getId()));
stream.setStreamRules(Lists.newArrayList(rule1, rule2));
final StreamRouterEngine engine = newEngine(Lists.newArrayList(stream));
// Without testfield1 and testfield2 in the message.
final Message message1 = getMessage();
final StreamRouterEngine.StreamTestMatch testMatch1 = engine.testMatch(message1).get(0);
final Map<StreamRule, Boolean> matches1 = testMatch1.getMatches();
assertFalse(testMatch1.isMatched());
assertFalse(matches1.get(rule1));
assertFalse(matches1.get(rule2));
// With testfield1 but no-matching testfield2 in the message.
final Message message2 = getMessage();
message2.addField("testfield1", "testvalue");
message2.addField("testfield2", "no-testvalue");
final StreamRouterEngine.StreamTestMatch testMatch2 = engine.testMatch(message2).get(0);
final Map<StreamRule, Boolean> matches2 = testMatch2.getMatches();
assertFalse(testMatch2.isMatched());
assertTrue(matches2.get(rule1));
assertFalse(matches2.get(rule2));
// With testfield1 and matching testfield2 in the message.
final Message message3 = getMessage();
message3.addField("testfield1", "testvalue");
message3.addField("testfield2", "testvalue2");
final StreamRouterEngine.StreamTestMatch testMatch3 = engine.testMatch(message3).get(0);
final Map<StreamRule, Boolean> matches3 = testMatch3.getMatches();
assertTrue(testMatch3.isMatched());
assertTrue(matches3.get(rule1));
assertTrue(matches3.get(rule2));
}
use of org.graylog2.streams.StreamRouterEngine in project graylog2-server by Graylog2.
the class StreamRouterEngineTest method testOrMatching.
@Test
public void testOrMatching() {
final String dummyField = "dummyField";
final String dummyValue = "dummyValue";
final Stream stream = mock(Stream.class);
when(stream.getMatchingType()).thenReturn(Stream.MatchingType.OR);
final StreamRule streamRule1 = getStreamRuleMock("StreamRule1Id", StreamRuleType.EXACT, dummyField, dummyValue);
final StreamRule streamRule2 = getStreamRuleMock("StreamRule2Id", StreamRuleType.EXACT, dummyField, "not" + dummyValue);
when(stream.getStreamRules()).thenReturn(Lists.newArrayList(streamRule1, streamRule2));
final Message message = mock(Message.class);
when(message.getField(eq(dummyField))).thenReturn(dummyValue);
final StreamRouterEngine engine = newEngine(Lists.newArrayList(stream));
final List<Stream> result = engine.match(message);
assertThat(result).hasSize(1);
assertThat(result).contains(stream);
}
use of org.graylog2.streams.StreamRouterEngine in project graylog2-server by Graylog2.
the class StreamRouterEngineTest method testAndStreamWithMultipleRules.
@Test
public void testAndStreamWithMultipleRules() {
final String dummyField = "dummyField";
final String dummyValue = "dummyValue";
final StreamRule streamRule1 = getStreamRuleMock("StreamRule1Id", StreamRuleType.EXACT, dummyField, dummyValue);
final StreamRule streamRule2 = getStreamRuleMock("StreamRule2Id", StreamRuleType.EXACT, dummyField, dummyValue);
final Stream stream = mock(Stream.class);
when(stream.getId()).thenReturn("Stream1Id");
when(stream.getMatchingType()).thenReturn(Stream.MatchingType.OR);
when(stream.getStreamRules()).thenReturn(Lists.newArrayList(streamRule1, streamRule2));
final Message message = mock(Message.class);
when(message.getField(eq(dummyField))).thenReturn(dummyValue);
final StreamRouterEngine engine = newEngine(Lists.newArrayList(stream));
final List<Stream> result = engine.match(message);
assertThat(result).hasSize(1);
assertThat(result).contains(stream);
}
use of org.graylog2.streams.StreamRouterEngine in project graylog2-server by Graylog2.
the class StreamRouterEngineTest method issue1396.
@Test
public void issue1396() throws Exception {
final StreamMock stream = getStreamMock("GitHub issue #1396");
stream.setMatchingType(Stream.MatchingType.AND);
final StreamRuleMock rule1 = new StreamRuleMock(ImmutableMap.<String, Object>builder().put("_id", new ObjectId()).put("field", "custom1").put("value", "value1").put("type", StreamRuleType.EXACT.toInteger()).put("inverted", false).put("stream_id", stream.getId()).build());
final StreamRuleMock rule2 = new StreamRuleMock(ImmutableMap.<String, Object>builder().put("_id", new ObjectId()).put("field", "custom2").put("value", "value2").put("type", StreamRuleType.EXACT.toInteger()).put("inverted", false).put("stream_id", stream.getId()).build());
stream.setStreamRules(Lists.newArrayList(rule1, rule2));
final StreamRouterEngine engine = newEngine(Lists.newArrayList(stream));
final Message message1 = getMessage();
message1.addFields(ImmutableMap.of("custom1", "value1"));
assertTrue("Message without \"custom2\" should not match conditions", engine.match(message1).isEmpty());
final Message message2 = getMessage();
message2.addFields(ImmutableMap.of("custom1", "value1", "custom2", "value2"));
assertEquals("Message with \"custom1\" and \"custom2\" should match conditions", Lists.newArrayList(stream), engine.match(message2));
}
Aggregations