1919import static org .hamcrest .CoreMatchers .equalTo ;
2020import static org .hamcrest .MatcherAssert .assertThat ;
2121import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
22- import static org .junit .jupiter .api .Assertions .assertNull ;
22+ import static org .junit .jupiter .api .Assertions .assertEquals ;
23+ import static org .junit .jupiter .api .Assertions .assertFalse ;
24+ import static org .junit .jupiter .api .Assertions .assertNotNull ;
2325import static org .junit .jupiter .api .Assertions .assertSame ;
26+ import static org .junit .jupiter .api .Assertions .assertThrows ;
2427import static org .junit .jupiter .api .Assertions .assertTrue ;
2528
2629import org .apache .logging .log4j .Level ;
3740class RegexFilterTest {
3841 @ BeforeAll
3942 static void before () {
40- StatusLogger .getLogger ().setLevel (Level .OFF );
43+ StatusLogger .getLogger ().getFallbackListener (). setLevel (Level .OFF );
4144 }
4245
4346 @ Test
4447 void testRegexFilterDoesNotThrowWithAllTheParametersExceptRegexEqualNull () {
4548 assertDoesNotThrow (() -> {
46- RegexFilter .createFilter ( ".* test .*" , null , null , null , null );
49+ RegexFilter .newBuilder (). setRegex ( ".* test .*" ). build ( );
4750 });
4851 }
4952
5053 @ Test
5154 void testThresholds () throws Exception {
52- RegexFilter filter = RegexFilter .createFilter (".* test .*" , null , false , null , null );
55+ RegexFilter filter = RegexFilter .newBuilder ()
56+ .setRegex (".* test .*" )
57+ .setUseRawMsg (false )
58+ .build ();
59+ assertNotNull (filter );
5360 filter .start ();
5461 assertTrue (filter .isStarted ());
5562 assertSame (
@@ -65,55 +72,135 @@ void testThresholds() throws Exception {
6572 .setMessage (new SimpleMessage ("test" )) //
6673 .build ();
6774 assertSame (Filter .Result .DENY , filter .filter (event ));
68- filter = RegexFilter .createFilter ( null , null , false , null , null );
69- assertNull ( filter );
75+ final RegexFilter .Builder filterBuilder = RegexFilter . newBuilder ( );
76+ assertThrows ( IllegalArgumentException . class , filterBuilder :: build );
7077 }
7178
7279 @ Test
7380 void testDotAllPattern () throws Exception {
7481 final String singleLine = "test single line matches" ;
7582 final String multiLine = "test multi line matches\n some more lines" ;
76- final RegexFilter filter = RegexFilter . createFilter (
77- " .*line.*" , new String [] { "DOTALL" , "COMMENTS" } , false , Filter .Result .DENY , Filter .Result .ACCEPT );
83+ final RegexFilter filter =
84+ RegexFilter . createFilter ( "(?xs) .*line.*" , null , false , Filter .Result .DENY , Filter .Result .ACCEPT );
7885 final Result singleLineResult = filter .filter (null , null , null , (Object ) singleLine , null );
7986 final Result multiLineResult = filter .filter (null , null , null , (Object ) multiLine , null );
8087 assertThat (singleLineResult , equalTo (Result .DENY ));
8188 assertThat (multiLineResult , equalTo (Result .DENY ));
8289 }
8390
8491 @ Test
85- void testNoMsg () throws Exception {
86- final RegexFilter filter = RegexFilter .createFilter (".* test .*" , null , false , null , null );
92+ void testNoMsg () {
93+
94+ final RegexFilter filter = RegexFilter .newBuilder ()
95+ .setRegex (".* test .*" )
96+ .setUseRawMsg (false )
97+ .build ();
98+
99+ assertNotNull (filter );
100+
87101 filter .start ();
102+
88103 assertTrue (filter .isStarted ());
89104 assertSame (Filter .Result .DENY , filter .filter (null , Level .DEBUG , null , (Object ) null , null ));
90105 assertSame (Filter .Result .DENY , filter .filter (null , Level .DEBUG , null , (Message ) null , null ));
91106 assertSame (Filter .Result .DENY , filter .filter (null , Level .DEBUG , null , null , (Object []) null ));
92107 }
93108
94109 @ Test
95- void testParameterizedMsg () throws Exception {
110+ void testParameterizedMsg () {
96111 final String msg = "params {} {}" ;
97112 final Object [] params = {"foo" , "bar" };
98113
99114 // match against raw message
100- final RegexFilter rawFilter = RegexFilter .createFilter (
101- "params \\ {\\ } \\ {\\ }" ,
102- null ,
103- true , // useRawMsg
104- Result .ACCEPT ,
105- Result .DENY );
115+ final RegexFilter rawFilter = RegexFilter .newBuilder ()
116+ .setRegex ("params \\ {\\ } \\ {\\ }" )
117+ .setUseRawMsg (true )
118+ .setOnMatch (Result .ACCEPT )
119+ .setOnMismatch (Result .DENY )
120+ .build ();
121+
122+ assertNotNull (rawFilter );
123+
106124 final Result rawResult = rawFilter .filter (null , null , null , msg , params );
107125 assertThat (rawResult , equalTo (Result .ACCEPT ));
108126
109127 // match against formatted message
110- final RegexFilter fmtFilter = RegexFilter .createFilter (
111- "params foo bar" ,
112- null ,
113- false , // useRawMsg
114- Result .ACCEPT ,
115- Result .DENY );
128+ final RegexFilter fmtFilter = RegexFilter .newBuilder ()
129+ .setRegex ("params foo bar" )
130+ .setUseRawMsg (false )
131+ .setOnMatch (Result .ACCEPT )
132+ .setOnMismatch (Result .DENY )
133+ .build ();
134+
135+ assertNotNull (fmtFilter );
136+
116137 final Result fmtResult = fmtFilter .filter (null , null , null , msg , params );
117138 assertThat (fmtResult , equalTo (Result .ACCEPT ));
118139 }
140+
141+ /**
142+ * A builder with no 'regex' expression should both be invalid and return null on 'build()'.
143+ */
144+ @ Test
145+ void testWithValidRegex () {
146+
147+ final String regex = "^[a-zA-Z0-9_]+$" ; // matches alphanumeric with underscores
148+
149+ final RegexFilter .Builder builder = RegexFilter .newBuilder ()
150+ .setRegex (regex )
151+ .setUseRawMsg (false )
152+ .setOnMatch (Result .ACCEPT )
153+ .setOnMismatch (Result .DENY );
154+
155+ final RegexFilter filter = builder .build ();
156+
157+ assertNotNull (filter );
158+
159+ assertEquals (Result .ACCEPT , filter .filter ("Hello_123" ));
160+
161+ assertEquals (Result .DENY , filter .filter ("Hello@123" ));
162+
163+ assertEquals (regex , filter .getRegex ());
164+ }
165+
166+ @ Test
167+ void testRegexFilterGetters () {
168+
169+ final String regex = "^[a-zA-Z0-9_]+$" ; // matches alphanumeric with underscores
170+
171+ final RegexFilter filter = RegexFilter .newBuilder ()
172+ .setRegex (regex )
173+ .setUseRawMsg (false )
174+ .setOnMatch (Result .ACCEPT )
175+ .setOnMismatch (Result .DENY )
176+ .build ();
177+
178+ assertNotNull (filter );
179+
180+ assertEquals (regex , filter .getRegex ());
181+ assertFalse (filter .isUseRawMessage ());
182+ assertEquals (Result .ACCEPT , filter .getOnMatch ());
183+ assertEquals (Result .DENY , filter .getOnMismatch ());
184+ assertNotNull (filter .getPattern ());
185+ assertEquals (regex , filter .getPattern ().pattern ());
186+ }
187+
188+ /**
189+ * A builder with no 'regex' expression should both be invalid and return null on 'build()'.
190+ */
191+ @ Test
192+ void testBuilderWithoutRegexNotValid () {
193+ final RegexFilter .Builder builder = RegexFilter .newBuilder ();
194+ assertThrows (IllegalArgumentException .class , builder ::build );
195+ }
196+
197+ /**
198+ * A builder with an invalid 'regex' expression should return null on 'build()'.
199+ */
200+ @ Test
201+ void testBuilderWithInvalidRegexNotValid () {
202+ final RegexFilter .Builder builder = RegexFilter .newBuilder ();
203+ builder .setRegex ("[a-z" );
204+ assertThrows (IllegalArgumentException .class , builder ::build );
205+ }
119206}
0 commit comments