2424#
2525###############################################################################
2626import pytest
27- from common .shared_utils import MockConnectionManager
27+ from common .shared_utils import DummyDataModel , MockConnectionManager
28+ from pydantic import BaseModel
2829
2930from nodescraper .enums import ExecutionStatus
31+ from nodescraper .enums .eventpriority import EventPriority
32+ from nodescraper .enums .systeminteraction import SystemInteractionLevel
3033from nodescraper .interfaces import PluginInterface
3134from nodescraper .models import PluginConfig , PluginResult
3235from nodescraper .pluginexecutor import PluginExecutor
3336from nodescraper .pluginregistry import PluginRegistry
3437
3538
36- class TestPluginA (PluginInterface [MockConnectionManager , None ]):
39+ class DummyArgs (BaseModel ):
40+ foo : str = "bar"
41+ regex_match : bool = True
42+
3743
44+ class TestPluginA (PluginInterface [MockConnectionManager , None ]):
3845 CONNECTION_TYPE = MockConnectionManager
46+ COLLECTOR_ARGS = DummyArgs (foo = "initial" )
47+ ANALYZER_ARGS = DummyArgs (foo = "initial" )
48+ collection = False
49+ analysis = False
50+ preserve_connection = False
51+ data = DummyDataModel (some_version = "1" )
52+ max_event_priority_level = EventPriority .INFO
53+ system_interaction_level = SystemInteractionLevel .PASSIVE
54+ collection_args = None
3955
4056 def run (self ):
4157 self ._update_queue (("TestPluginB" , {}))
42- return PluginResult (
43- source = "testA" ,
44- status = ExecutionStatus .ERROR ,
45- )
58+ return PluginResult (source = "testA" , status = ExecutionStatus .ERROR )
4659
4760
4861class TestPluginB (PluginInterface [MockConnectionManager , None ]):
49-
5062 CONNECTION_TYPE = MockConnectionManager
5163
5264 def run (self , test_arg = None ):
@@ -67,10 +79,7 @@ def plugin_registry():
6779 "input_configs, output_config" ,
6880 [
6981 (
70- [
71- PluginConfig (plugins = {"Plugin1" : {}}),
72- PluginConfig (plugins = {"Plugin2" : {}}),
73- ],
82+ [PluginConfig (plugins = {"Plugin1" : {}}), PluginConfig (plugins = {"Plugin2" : {}})],
7483 PluginConfig (plugins = {"Plugin1" : {}, "Plugin2" : {}}),
7584 ),
7685 (
@@ -109,7 +118,8 @@ def test_plugin_queue(plugin_registry):
109118
110119def test_queue_callback (plugin_registry ):
111120 executor = PluginExecutor (
112- plugin_configs = [PluginConfig (plugins = {"TestPluginA" : {}})], plugin_registry = plugin_registry
121+ plugin_configs = [PluginConfig (plugins = {"TestPluginA" : {}})],
122+ plugin_registry = plugin_registry ,
113123 )
114124
115125 results = executor .run_queue ()
@@ -119,3 +129,37 @@ def test_queue_callback(plugin_registry):
119129 assert results [0 ].status == ExecutionStatus .ERROR
120130 assert results [1 ].source == "testB"
121131 assert results [1 ].status == ExecutionStatus .OK
132+
133+
134+ def test_apply_global_args_to_plugin ():
135+ plugin = TestPluginA ()
136+ global_args = {
137+ "collection" : True ,
138+ "analysis" : True ,
139+ "preserve_connection" : True ,
140+ "data" : {"some_version" : "1" },
141+ "max_event_priority_level" : 4 ,
142+ "system_interaction_level" : "INTERACTIVE" ,
143+ "collection_args" : {"foo" : "collected" , "regex_match" : False , "not_in_model" : "skip_this" },
144+ "analysis_args" : {"foo" : "analyzed" , "regex_match" : False , "ignore_this" : True },
145+ }
146+
147+ executor = PluginExecutor (plugin_configs = [])
148+ run_payload = executor .apply_global_args_to_plugin (plugin , TestPluginA , global_args )
149+
150+ assert run_payload ["collection" ] is True
151+ assert run_payload ["analysis" ] is True
152+ assert run_payload ["preserve_connection" ] is True
153+ assert run_payload ["data" ]["some_version" ] == "1"
154+ assert run_payload ["max_event_priority_level" ] == 4
155+ assert run_payload ["system_interaction_level" ] == "INTERACTIVE"
156+
157+ # Safely check filtered args
158+ assert run_payload .get ("collection_args" ) == {
159+ "foo" : "collected" ,
160+ "regex_match" : False ,
161+ }
162+ assert run_payload .get ("analysis_args" ) == {
163+ "foo" : "analyzed" ,
164+ "regex_match" : False ,
165+ }
0 commit comments