@@ -67,13 +67,19 @@ CppUnit::Test* CDetectionRulesJsonParserTest::suite() {
6767 new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules" ,
6868 &CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules));
6969 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));
7275 suiteOfTests->addTest (new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(
7376 " CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule" , &CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule));
7477 suiteOfTests->addTest (
7578 new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenDifferentActions" ,
7679 &CDetectionRulesJsonParserTest::testParseRulesGivenDifferentActions));
80+ suiteOfTests->addTest (
81+ new CppUnit::TestCaller<CDetectionRulesJsonParserTest>(" CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule" ,
82+ &CDetectionRulesJsonParserTest::testParseRulesGivenOldStyleCategoricalRule));
7783 return suiteOfTests;
7884}
7985
@@ -347,8 +353,37 @@ void CDetectionRulesJsonParserTest::testParseRulesGivenMultipleRules() {
347353 CPPUNIT_ASSERT_EQUAL (std::string (" SKIP_SAMPLING (id:42) IF ACTUAL < 2.000000" ), rules[1 ].print ());
348354}
349355
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
352387
353388 TStrPatternSetUMap filtersById;
354389 core::CPatternSet filter;
@@ -373,6 +408,32 @@ void CDetectionRulesJsonParserTest::testParseRulesGivenCategoricalRule() {
373408 CPPUNIT_ASSERT_EQUAL (std::string (" FILTER_RESULTS IF (foo) IN FILTER" ), rules[0 ].print ());
374409}
375410
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+
376437void CDetectionRulesJsonParserTest::testParseRulesGivenTimeRule () {
377438 LOG_DEBUG (" *** testParseRulesGivenTimeRule ***" );
378439
0 commit comments