✨ Making sure ports are only opened for active patterns
This commit is contained in:
@ -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.
|
||||
|
@ -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]
|
||||
|
||||
|
@ -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()
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user