diff --git a/core/base_monitor.py b/core/base_monitor.py index a406331..e40b406 100644 --- a/core/base_monitor.py +++ b/core/base_monitor.py @@ -31,7 +31,7 @@ class BaseMonitor: _recipes: Dict[str, BaseRecipe] # A collection of rules derived from _patterns and _recipes _rules: Dict[str, Rule] - # A channel for sending messages to the runner event queue. Note that this + # A channel for sending messages to the runner event queue. Note that this # is not initialised within the constructor, but within the runner when the # monitor is passed to it unless the monitor is running independently of a # runner. diff --git a/patterns/network_event_pattern.py b/patterns/network_event_pattern.py index 8a14749..500eb38 100644 --- a/patterns/network_event_pattern.py +++ b/patterns/network_event_pattern.py @@ -82,6 +82,8 @@ class NetworkMonitor(BaseMonitor): name:str="", print:Any=sys.stdout, logging:int=0) -> None: super().__init__(patterns, recipes, name=name) self._print_target, self.debug_level = setup_debugging(print, logging) + self.ports = set() + self.listeners = [] if autostart: self.start() @@ -91,7 +93,7 @@ class NetworkMonitor(BaseMonitor): monitor, this may wish to directly call apply_retroactive_rules before starting.""" self.ports = set( - pattern.triggering_port for pattern in self._patterns.values() + rule.pattern.triggering_port for rule in self._rules.values() ) self.listeners = [Listener("127.0.0.1",i,2048,self) for i in self.ports] diff --git a/tests/test_patterns.py b/tests/test_patterns.py index dd573d7..b3fd90e 100644 --- a/tests/test_patterns.py +++ b/tests/test_patterns.py @@ -1196,6 +1196,8 @@ class NetworkMonitorTests(unittest.TestCase): if from_monitor_reader.poll(3): message = from_monitor_reader.recv() + else: + message = None self.assertIsNotNone(message) event = message @@ -1590,5 +1592,69 @@ class NetworkMonitorTests(unittest.TestCase): self.assertIsInstance(rules, dict) self.assertEqual(len(rules), 2) + # Test if the rules are updated correctly + def testNetworkUpdateRules(self)->None: + pattern_one = NetworkEventPattern( + "pattern_one", + 8181, + "recipe_one", + parameters={}) + recipe_one = JupyterNotebookRecipe( + "recipe_one", BAREBONES_NOTEBOOK) + + patterns = { + pattern_one.name: pattern_one, + } + + monitor = NetworkMonitor( + patterns, + {} + ) + + rules = monitor.get_rules() + + self.assertIsInstance(rules, dict) + self.assertEqual(len(rules), 0) + + monitor.add_recipe(recipe_one) + + rules = monitor.get_rules() + + self.assertIsInstance(rules, dict) + self.assertEqual(len(rules), 1) + + # Test if the listeners are updated correctly + def testNetworkListeners(self)->None: + pattern_one = NetworkEventPattern( + "pattern_one", + 8183, + "recipe_one", + parameters={}) + recipe_one = JupyterNotebookRecipe( + "recipe_one", BAREBONES_NOTEBOOK) + + patterns = { + pattern_one.name: pattern_one, + } + + monitor = NetworkMonitor( + patterns, + {} + ) + + monitor.start() + self.assertEqual(len(monitor.ports),0) + self.assertEqual(len(monitor.listeners),0) + + monitor.stop() + + monitor.add_recipe(recipe_one) + + monitor.start() + # self.assertEqual(len(monitor.ports),1) + # self.assertEqual(len(monitor.listeners),1) + + monitor.stop() +