33from  pytest_splunk_addon .fields_tests .test_generator  import  (
44    FieldTestGenerator ,
55)
6+ from  pytest_splunk_addon .sample_generation .sample_event  import  SampleEvent 
7+ from  pytest_splunk_addon .utilities  import  xml_event_parser 
68
79
810def  field_1 ():
@@ -71,6 +73,14 @@ def test_field_test_generator_instantiation(addon_parser_mock):
7173            "splunk_searchtime_fields_savedsearches" , 
7274            "GENERATE_SAVEDSEARCHES_TESTS_RETURN_VALUE" , 
7375        ), 
76+         ( 
77+             "splunk_searchtime_fields_requirements" , 
78+             "GENERATE_REQUIREMENT_TESTS_RETURN_VALUE" , 
79+         ), 
80+         ( 
81+             "splunk_searchtime_fields_datamodels" , 
82+             "GENERATE_REQUIREMENT_DATAMODEL_TESTS_RETURN_VALUE" , 
83+         ), 
7484    ], 
7585) 
7686def  test_generate_tests (addon_parser_mock , fixture_name , expected_ouptput ):
@@ -90,6 +100,14 @@ def test_generate_tests(addon_parser_mock, fixture_name, expected_ouptput):
90100        FieldTestGenerator ,
91101        "generate_savedsearches_tests" ,
92102        return_value = (["GENERATE_SAVEDSEARCHES_TESTS_RETURN_VALUE" ]),
103+     ), patch .object (
104+         FieldTestGenerator ,
105+         "generate_requirements_tests" ,
106+         return_value = (["GENERATE_REQUIREMENT_TESTS_RETURN_VALUE" ]),
107+     ), patch .object (
108+         FieldTestGenerator ,
109+         "generate_requirements_datamodels_tests" ,
110+         return_value = (["GENERATE_REQUIREMENT_DATAMODEL_TESTS_RETURN_VALUE" ]),
93111    ):
94112        assert  list (
95113            FieldTestGenerator (
@@ -391,3 +409,190 @@ def test_generate_field_tests(
391409        )
392410        assert  out  ==  expected_output 
393411        assert  param_mock .call_count  ==  len (expected_output )
412+ 
413+ 
414+ @pytest .mark .parametrize ( 
415+     "tokenised_events, expected_output" , 
416+     [ 
417+         ( 
418+             [ 
419+                 SampleEvent ( 
420+                     event_string = "escaped_event" , 
421+                     metadata = { 
422+                         "input_type" : "modinput" , 
423+                         "sourcetype_to_search" : "dummy_sourcetype" , 
424+                         "host" : "dummy_host" , 
425+                     }, 
426+                     sample_name = "file1.xml" , 
427+                     requirement_test_data = { 
428+                         "cim_fields" : { 
429+                             "dest" : "192.168.0.1" , 
430+                             "severity" : "low" , 
431+                             "signature_id" : "405001" , 
432+                             "src" : "192.168.0.1" , 
433+                             "type" : "event" , 
434+                         }, 
435+                         "exceptions" : {"mane_1" : "value_1" , "dest" : "192.168.0.1" }, 
436+                         "other_fields" : { 
437+                             "vendor_product" : "Pytest Splunk Addon" , 
438+                             "target_users" : "[email protected] " , 439+                         }, 
440+                     }, 
441+                 ), 
442+                 SampleEvent ( 
443+                     event_string = "escaped_event" , 
444+                     metadata = { 
445+                         "input_type" : "syslog_tcp" , 
446+                         "sourcetype_to_search" : "dummy_sourcetype" , 
447+                         "host" : "dummy_host_syslog" , 
448+                     }, 
449+                     sample_name = "file1.xml" , 
450+                     requirement_test_data = {}, 
451+                 ), 
452+                 SampleEvent ( 
453+                     event_string = "escaped_event" , 
454+                     metadata = { 
455+                         "input_type" : "syslog_tcp" , 
456+                         "sourcetype_to_search" : "dummy_sourcetype" , 
457+                         "host" : "dummy_host_syslog" , 
458+                     }, 
459+                     sample_name = "file1.xml" , 
460+                     requirement_test_data = { 
461+                         "cim_fields" : { 
462+                             "src" : "192.168.0.1" , 
463+                             "type" : "event" , 
464+                         }, 
465+                         "exceptions" : {}, 
466+                         "other_fields" : { 
467+                             "vendor_product" : "Pytest Splunk Addon" , 
468+                             "target_users" : "[email protected] " , 469+                         }, 
470+                     }, 
471+                 ), 
472+             ], 
473+             [ 
474+                 ( 
475+                     { 
476+                         "escaped_event" : "escaped_event" , 
477+                         "fields" : { 
478+                             "severity" : "low" , 
479+                             "signature_id" : "405001" , 
480+                             "src" : "192.168.0.1" , 
481+                             "type" : "event" , 
482+                             "vendor_product" : "Pytest Splunk Addon" , 
483+                             "target_users" : "[email protected] " , 484+                         }, 
485+                         "modinput_params" : {"sourcetype" : "dummy_sourcetype" }, 
486+                     }, 
487+                     "sample_name::file1.xml::host::dummy_host" , 
488+                 ), 
489+                 ( 
490+                     { 
491+                         "escaped_event" : "escaped_event" , 
492+                         "fields" : { 
493+                             "src" : "192.168.0.1" , 
494+                             "type" : "event" , 
495+                             "vendor_product" : "Pytest Splunk Addon" , 
496+                             "target_users" : "[email protected] " , 497+                         }, 
498+                         "modinput_params" : {"sourcetype" : "dummy_sourcetype" }, 
499+                     }, 
500+                     "sample_name::file1.xml::host::dummy_host_syslog" , 
501+                 ), 
502+             ], 
503+         ), 
504+     ], 
505+ ) 
506+ def  test_generate_requirement_tests (tokenised_events , expected_output ):
507+     with  patch .object (
508+         xml_event_parser , "strip_syslog_header" , return_value = "escaped_event" 
509+     ), patch .object (
510+         xml_event_parser , "escape_char_event" , return_value = "escaped_event" 
511+     ), patch .object (
512+         pytest , "param" , side_effect = lambda  x , id : (x , id )
513+     ) as  param_mock :
514+         out  =  list (
515+             FieldTestGenerator (
516+                 "app_path" ,
517+                 tokenised_events ,
518+                 "field_bank" ,
519+             ).generate_requirements_tests ()
520+         )
521+         assert  out  ==  expected_output 
522+         assert  param_mock .call_count  ==  len (expected_output )
523+ 
524+ 
525+ @pytest .mark .parametrize ( 
526+     "tokenised_events, expected_output" , 
527+     [ 
528+         ( 
529+             [ 
530+                 SampleEvent ( 
531+                     event_string = "escaped_event" , 
532+                     metadata = { 
533+                         "input_type" : "modinput" , 
534+                         "sourcetype_to_search" : "dummy_sourcetype" , 
535+                         "host" : "dummy_host" , 
536+                     }, 
537+                     sample_name = "file1.xml" , 
538+                     requirement_test_data = {"datamodels" : {"model" : "Alerts" }}, 
539+                 ), 
540+                 SampleEvent ( 
541+                     event_string = "escaped_event" , 
542+                     metadata = { 
543+                         "input_type" : "syslog_tcp" , 
544+                         "sourcetype_to_search" : "dummy_sourcetype" , 
545+                         "host" : "dummy_host_syslog" , 
546+                     }, 
547+                     sample_name = "file1.xml" , 
548+                     requirement_test_data = {}, 
549+                 ), 
550+                 SampleEvent ( 
551+                     event_string = "escaped_event" , 
552+                     metadata = { 
553+                         "input_type" : "syslog_tcp" , 
554+                         "sourcetype_to_search" : "dummy_sourcetype" , 
555+                         "host" : "dummy_host_syslog" , 
556+                     }, 
557+                     sample_name = "file1.xml" , 
558+                     requirement_test_data = { 
559+                         "datamodels" : {"model" : ["Change" , "Account Management" ]} 
560+                     }, 
561+                 ), 
562+             ], 
563+             [ 
564+                 ( 
565+                     { 
566+                         "datamodels" : ["Alerts" ], 
567+                         "stanza" : "escaped_event" , 
568+                     }, 
569+                     "Alerts::sample_name::file1.xml::host::dummy_host" , 
570+                 ), 
571+                 ( 
572+                     { 
573+                         "datamodels" : ["Change" , "Account_Management" ], 
574+                         "stanza" : "escaped_event" , 
575+                     }, 
576+                     "Change-Account_Management::sample_name::file1.xml::host::dummy_host_syslog" , 
577+                 ), 
578+             ], 
579+         ), 
580+     ], 
581+ ) 
582+ def  test_generate_requirement_datamodel_tests (tokenised_events , expected_output ):
583+     with  patch .object (
584+         xml_event_parser , "strip_syslog_header" , return_value = "escaped_event" 
585+     ), patch .object (
586+         xml_event_parser , "escape_char_event" , return_value = "escaped_event" 
587+     ), patch .object (
588+         pytest , "param" , side_effect = lambda  x , id : (x , id )
589+     ) as  param_mock :
590+         out  =  list (
591+             FieldTestGenerator (
592+                 "app_path" ,
593+                 tokenised_events ,
594+                 "field_bank" ,
595+             ).generate_requirements_datamodels_tests ()
596+         )
597+         assert  out  ==  expected_output 
598+         assert  param_mock .call_count  ==  len (expected_output )
0 commit comments