@@ -76,13 +76,19 @@ CppUnit::Test* CDetectionRulesJsonParserTest::suite() {
76
76
new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules" ,
77
77
&CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules));
78
78
suiteOfTests->addTest (
79
- new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule" ,
80
- &CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule));
79
+ new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalMatchRule" ,
80
+ &CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalMatchRule));
81
+ suiteOfTests->addTest (
82
+ new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalComplementRule" ,
83
+ &CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalComplementRule));
81
84
suiteOfTests->addTest (new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(
82
85
" CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule" , &CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule));
83
86
suiteOfTests->addTest (
84
87
new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenDifferentActions" ,
85
88
&CDetectionRulesJsonParserTest::testParseRulesGivenDifferentActions));
89
+ suiteOfTests->addTest (
90
+ new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule" ,
91
+ &CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule));
86
92
return suiteOfTests;
87
93
}
88
94
@@ -356,8 +362,37 @@ void CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules() {
356
362
CPPUNIT_ASSERT_EQUAL (std::string (" SKIP_SAMPLING (id:42) IF ACTUAL < 2.000000" ), rules[1 ].print ());
357
363
}
358
364
359
- void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule () {
360
- LOG_DEBUG (" *** testParseRulesGivenCategoricalRule ***" );
365
+ void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalMatchRule () {
366
+ LOG_DEBUG (" *** testParseRulesGivenCategoricalMatchRule ***" );
367
+
368
+ TStrPatternSetUMap filtersById;
369
+ core::CPatternSet filter;
370
+ filter.initFromJson (" [\" b\" , \" a\" ]" );
371
+ filtersById[" filter1" ] = filter;
372
+
373
+ CDetectionRulesJsonParser parser (filtersById);
374
+ CDetectionRulesJsonParser::TDetectionRuleVec rules;
375
+ std::string rulesJson = " [" ;
376
+ rulesJson += " {" ;
377
+ rulesJson += " \" actions\" :[\" filter_results\" ]," ;
378
+ rulesJson += " \" conditions_connective\" :\" or\" ," ;
379
+ rulesJson += " \" conditions\" : [" ;
380
+ rulesJson += " {\" type\" :\" categorical_match\" , \" field_name\" :\" foo\" , \" filter_id\" :\" filter1\" }" ;
381
+ rulesJson += " ]" ;
382
+ rulesJson += " }" ;
383
+ rulesJson += " ]" ;
384
+
385
+ CPPUNIT_ASSERT (parser.parseRules (rulesJson, rules));
386
+
387
+ CPPUNIT_ASSERT_EQUAL (std::size_t (1 ), rules.size ());
388
+ CPPUNIT_ASSERT_EQUAL (std::string (" FILTER_RESULTS IF (foo) IN FILTER" ), rules[0 ].print ());
389
+ }
390
+
391
+ void CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule () {
392
+ LOG_DEBUG (" *** testParseRulesGivenOldStyleCategoricalRule ***" );
393
+
394
+ // Tests that the rule type can be parsed as categorical_match
395
+ // when the type is categorical
361
396
362
397
TStrPatternSetUMap filtersById;
363
398
core::CPatternSet filter;
@@ -382,6 +417,32 @@ void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule() {
382
417
CPPUNIT_ASSERT_EQUAL (std::string (" FILTER_RESULTS IF (foo) IN FILTER" ), rules[0 ].print ());
383
418
}
384
419
420
+ void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalComplementRule () {
421
+ LOG_DEBUG (" *** testParseRulesGivenCategoricalComplementRule ***" );
422
+
423
+ TStrPatternSetUMap filtersById;
424
+ core::CPatternSet filter;
425
+ filter.initFromJson (" [\" b\" , \" a\" ]" );
426
+ filtersById[" filter1" ] = filter;
427
+
428
+ CDetectionRulesJsonParser parser (filtersById);
429
+ CDetectionRulesJsonParser::TDetectionRuleVec rules;
430
+ std::string rulesJson = " [" ;
431
+ rulesJson += " {" ;
432
+ rulesJson += " \" actions\" :[\" filter_results\" ]," ;
433
+ rulesJson += " \" conditions_connective\" :\" or\" ," ;
434
+ rulesJson += " \" conditions\" : [" ;
435
+ rulesJson += " {\" type\" :\" categorical_complement\" , \" field_name\" :\" foo\" , \" filter_id\" :\" filter1\" }" ;
436
+ rulesJson += " ]" ;
437
+ rulesJson += " }" ;
438
+ rulesJson += " ]" ;
439
+
440
+ CPPUNIT_ASSERT (parser.parseRules (rulesJson, rules));
441
+
442
+ CPPUNIT_ASSERT_EQUAL (std::size_t (1 ), rules.size ());
443
+ CPPUNIT_ASSERT_EQUAL (std::string (" FILTER_RESULTS IF (foo) NOT IN FILTER" ), rules[0 ].print ());
444
+ }
445
+
385
446
void CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule () {
386
447
LOG_DEBUG (" *** testParseRulesGivenTimeRule ***" );
387
448
0 commit comments