@@ -379,10 +379,10 @@ public void testMultipleNamedCapturesWithSameName() {
379379 expected .put ("num" , "1" );
380380 assertThat (grok .captures ("12" ), equalTo (expected ));
381381 }
382-
382+
383383 public void testExponentialExpressions () {
384384 AtomicBoolean run = new AtomicBoolean (true ); // to avoid a lingering thread when test has completed
385-
385+
386386 String grokPattern = "Bonsuche mit folgender Anfrage: Belegart->\\ [%{WORD:param2},(?<param5>(\\ s*%{NOTSPACE})*)\\ ] " +
387387 "Zustand->ABGESCHLOSSEN Kassennummer->%{WORD:param9} Bonnummer->%{WORD:param10} Datum->%{DATESTAMP_OTHER:param11}" ;
388388 String logLine = "Bonsuche mit folgender Anfrage: Belegart->[EINGESCHRAENKTER_VERKAUF, VERKAUF, NACHERFASSUNG] " +
@@ -406,4 +406,50 @@ public void testExponentialExpressions() {
406406 run .set (false );
407407 assertThat (e .getMessage (), equalTo ("grok pattern matching was interrupted after [200] ms" ));
408408 }
409+
410+ public void testAtInFieldName () {
411+ assertGrokedField ("@metadata" );
412+ }
413+
414+ public void assertNonAsciiLetterInFieldName () {
415+ assertGrokedField ("metädata" );
416+ }
417+
418+ public void assertSquareBracketInFieldName () {
419+ assertGrokedField ("metadat[a]" );
420+ assertGrokedField ("metad[a]ta" );
421+ assertGrokedField ("[m]etadata" );
422+ }
423+
424+ public void testUnderscoreInFieldName () {
425+ assertGrokedField ("meta_data" );
426+ }
427+
428+ public void testDotInFieldName () {
429+ assertGrokedField ("meta.data" );
430+ }
431+
432+ public void testMinusInFieldName () {
433+ assertGrokedField ("meta-data" );
434+ }
435+
436+ public void testAlphanumericFieldName () {
437+ assertGrokedField (randomAlphaOfLengthBetween (1 , 5 ));
438+ assertGrokedField (randomAlphaOfLengthBetween (1 , 5 ) + randomIntBetween (0 , 100 ));
439+ assertGrokedField (randomIntBetween (0 , 100 ) + randomAlphaOfLengthBetween (1 , 5 ));
440+ assertGrokedField (String .valueOf (randomIntBetween (0 , 100 )));
441+ }
442+
443+ public void testUnsupportedBracketsInFieldName () {
444+ Grok grok = new Grok (basePatterns , "%{WORD:unsuppo(r)ted}" );
445+ Map <String , Object > matches = grok .captures ("line" );
446+ assertNull (matches );
447+ }
448+
449+ private void assertGrokedField (String fieldName ) {
450+ String line = "foo" ;
451+ Grok grok = new Grok (basePatterns , "%{WORD:" + fieldName + "}" );
452+ Map <String , Object > matches = grok .captures (line );
453+ assertEquals (line , matches .get (fieldName ));
454+ }
409455}
0 commit comments