Making sure ports are only opened for active patterns

This commit is contained in:
NikolajDanger
2023-05-27 19:31:00 +02:00
parent 81091df34b
commit afa764ad67
3 changed files with 70 additions and 2 deletions

View File

@ -82,6 +82,8 @@ class NetworkMonitor(BaseMonitor):
name:str="", print:Any=sys.stdout, logging:int=0) -> None: name:str="", print:Any=sys.stdout, logging:int=0) -> None:
super().__init__(patterns, recipes, name=name) super().__init__(patterns, recipes, name=name)
self._print_target, self.debug_level = setup_debugging(print, logging) self._print_target, self.debug_level = setup_debugging(print, logging)
self.ports = set()
self.listeners = []
if autostart: if autostart:
self.start() self.start()
@ -91,7 +93,7 @@ class NetworkMonitor(BaseMonitor):
monitor, this may wish to directly call apply_retroactive_rules before monitor, this may wish to directly call apply_retroactive_rules before
starting.""" starting."""
self.ports = set( 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] self.listeners = [Listener("127.0.0.1",i,2048,self) for i in self.ports]

View File

@ -1196,6 +1196,8 @@ class NetworkMonitorTests(unittest.TestCase):
if from_monitor_reader.poll(3): if from_monitor_reader.poll(3):
message = from_monitor_reader.recv() message = from_monitor_reader.recv()
else:
message = None
self.assertIsNotNone(message) self.assertIsNotNone(message)
event = message event = message
@ -1590,5 +1592,69 @@ class NetworkMonitorTests(unittest.TestCase):
self.assertIsInstance(rules, dict) self.assertIsInstance(rules, dict)
self.assertEqual(len(rules), 2) 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()