@@ -67,13 +67,19 @@ CppUnit::Test* CDetectionRulesJsonParserTest::suite() {
67
67
new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules" ,
68
68
&CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules));
69
69
suiteOfTests->addTest (
70
- new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule" ,
71
- &CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule));
70
+ new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalMatchRule" ,
71
+ &CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalMatchRule));
72
+ suiteOfTests->addTest (
73
+ new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalComplementRule" ,
74
+ &CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalComplementRule));
72
75
suiteOfTests->addTest (new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(
73
76
" CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule" , &CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule));
74
77
suiteOfTests->addTest (
75
78
new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenDifferentActions" ,
76
79
&CDetectionRulesJsonParserTest::testParseRulesGivenDifferentActions));
80
+ suiteOfTests->addTest (
81
+ new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule" ,
82
+ &CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule));
77
83
return suiteOfTests;
78
84
}
79
85
@@ -347,8 +353,37 @@ void CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules() {
347
353
CPPUNIT_ASSERT_EQUAL (std::string (" SKIP_SAMPLING (id:42) IF ACTUAL < 2.000000" ), rules[1 ].print ());
348
354
}
349
355
350
- void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule () {
351
- LOG_DEBUG (" *** testParseRulesGivenCategoricalRule ***" );
356
+ void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalMatchRule () {
357
+ LOG_DEBUG (" *** testParseRulesGivenCategoricalMatchRule ***" );
358
+
359
+ TStrPatternSetUMap filtersById;
360
+ core::CPatternSet filter;
361
+ filter.initFromJson (" [\" b\" , \" a\" ]" );
362
+ filtersById[" filter1" ] = filter;
363
+
364
+ CDetectionRulesJsonParser parser (filtersById);
365
+ CDetectionRulesJsonParser::TDetectionRuleVec rules;
366
+ std::string rulesJson = " [" ;
367
+ rulesJson += " {" ;
368
+ rulesJson += " \" actions\" :[\" filter_results\" ]," ;
369
+ rulesJson += " \" conditions_connective\" :\" or\" ," ;
370
+ rulesJson += " \" conditions\" : [" ;
371
+ rulesJson += " {\" type\" :\" categorical_match\" , \" field_name\" :\" foo\" , \" filter_id\" :\" filter1\" }" ;
372
+ rulesJson += " ]" ;
373
+ rulesJson += " }" ;
374
+ rulesJson += " ]" ;
375
+
376
+ CPPUNIT_ASSERT (parser.parseRules (rulesJson, rules));
377
+
378
+ CPPUNIT_ASSERT_EQUAL (std::size_t (1 ), rules.size ());
379
+ CPPUNIT_ASSERT_EQUAL (std::string (" FILTER_RESULTS IF (foo) IN FILTER" ), rules[0 ].print ());
380
+ }
381
+
382
+ void CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule () {
383
+ LOG_DEBUG (" *** testParseRulesGivenOldStyleCategoricalRule ***" );
384
+
385
+ // Tests that the rule type can be parsed as categorical_match
386
+ // when the type is categorical
352
387
353
388
TStrPatternSetUMap filtersById;
354
389
core::CPatternSet filter;
@@ -373,6 +408,32 @@ void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule() {
373
408
CPPUNIT_ASSERT_EQUAL (std::string (" FILTER_RESULTS IF (foo) IN FILTER" ), rules[0 ].print ());
374
409
}
375
410
411
+ void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalComplementRule () {
412
+ LOG_DEBUG (" *** testParseRulesGivenCategoricalComplementRule ***" );
413
+
414
+ TStrPatternSetUMap filtersById;
415
+ core::CPatternSet filter;
416
+ filter.initFromJson (" [\" b\" , \" a\" ]" );
417
+ filtersById[" filter1" ] = filter;
418
+
419
+ CDetectionRulesJsonParser parser (filtersById);
420
+ CDetectionRulesJsonParser::TDetectionRuleVec rules;
421
+ std::string rulesJson = " [" ;
422
+ rulesJson += " {" ;
423
+ rulesJson += " \" actions\" :[\" filter_results\" ]," ;
424
+ rulesJson += " \" conditions_connective\" :\" or\" ," ;
425
+ rulesJson += " \" conditions\" : [" ;
426
+ rulesJson += " {\" type\" :\" categorical_complement\" , \" field_name\" :\" foo\" , \" filter_id\" :\" filter1\" }" ;
427
+ rulesJson += " ]" ;
428
+ rulesJson += " }" ;
429
+ rulesJson += " ]" ;
430
+
431
+ CPPUNIT_ASSERT (parser.parseRules (rulesJson, rules));
432
+
433
+ CPPUNIT_ASSERT_EQUAL (std::size_t (1 ), rules.size ());
434
+ CPPUNIT_ASSERT_EQUAL (std::string (" FILTER_RESULTS IF (foo) NOT IN FILTER" ), rules[0 ].print ());
435
+ }
436
+
376
437
void CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule () {
377
438
LOG_DEBUG (" *** testParseRulesGivenTimeRule ***" );
378
439
0 commit comments