From a9fd81b2f5a0b4aab0efcdbdd8cd8afd0e2f475c Mon Sep 17 00:00:00 2001 From: Jacob Boddey Date: Mon, 18 Mar 2024 14:27:26 +0000 Subject: [PATCH] Fix edge cases in listener --- cmd/package | 3 +++ framework/python/src/common/session.py | 2 ++ framework/python/src/net_orc/listener.py | 10 ++++++++++ .../python/src/net_orc/network_orchestrator.py | 18 ++++++++++++------ .../python/src/test_orc/test_orchestrator.py | 4 ++-- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/cmd/package b/cmd/package index f987f625b..cb209aed5 100755 --- a/cmd/package +++ b/cmd/package @@ -18,6 +18,9 @@ MAKE_SRC_DIR=make +# Delete existing make files +rm -rf $MAKE_SRC_DIR/usr + # Copy testrun script to /bin mkdir -p $MAKE_SRC_DIR/bin cp bin/testrun $MAKE_SRC_DIR/bin/testrun diff --git a/framework/python/src/common/session.py b/framework/python/src/common/session.py index e6aa586f4..02edbc425 100644 --- a/framework/python/src/common/session.py +++ b/framework/python/src/common/session.py @@ -71,7 +71,9 @@ def get_finished(self): def stop(self): self.set_status('Stopping') + self.finish() + def finish(self): # Set any in progress test results to Error for test_result in self._results: if test_result.result == 'In Progress': diff --git a/framework/python/src/net_orc/listener.py b/framework/python/src/net_orc/listener.py index 83805f908..03fcaaaf8 100644 --- a/framework/python/src/net_orc/listener.py +++ b/framework/python/src/net_orc/listener.py @@ -44,8 +44,18 @@ def __init__(self, session): def start_listener(self): """Start sniffing packets on the device interface.""" + + # Don't start the listener if it is already running + if self._sniffer.running: + LOGGER.debug('Listener was already running') + return + self._sniffer.start() + def reset(self): + self._callbacks = [] + self._discovered_devices = [] + def stop_listener(self): """Stop sniffing packets on the device interface.""" if self._sniffer.running: diff --git a/framework/python/src/net_orc/network_orchestrator.py b/framework/python/src/net_orc/network_orchestrator.py index 8126d0738..4c89ba721 100644 --- a/framework/python/src/net_orc/network_orchestrator.py +++ b/framework/python/src/net_orc/network_orchestrator.py @@ -116,8 +116,6 @@ def start_network(self): """Start the virtual testing network.""" LOGGER.info('Starting network') - #self.build_network_modules() - self.create_net() self.start_network_services() @@ -140,6 +138,11 @@ def stop(self, kill=False): self.stop_validator(kill=kill) self.stop_network(kill=kill) + # Listener may not have been defined yet + if self.get_listener() is not None: + self.get_listener().stop_listener() + self.get_listener().reset() + def stop_validator(self, kill=False): """Stop the network validator.""" # Shutdown the validator @@ -339,7 +342,10 @@ def create_net(self): self._create_private_net() - self._listener = Listener(self._session) + # Listener may have already been created. Only create if not + if self._listener is None: + self._listener = Listener(self._session) + self.get_listener().register_callback(self._device_discovered, [NetworkEvent.DEVICE_DISCOVERED]) self.get_listener().register_callback(self._dhcp_lease_ack, @@ -486,12 +492,12 @@ def _stop_service_module(self, net_module, kill=False): container = self._get_service_container(net_module) if container is not None: if kill: - LOGGER.debug('Killing container:' + net_module.container_name) + LOGGER.debug('Killing container: ' + net_module.container_name) container.kill() else: - LOGGER.debug('Stopping container:' + net_module.container_name) + LOGGER.debug('Stopping container: ' + net_module.container_name) container.stop() - LOGGER.debug('Container stopped:' + net_module.container_name) + LOGGER.debug('Container stopped: ' + net_module.container_name) except Exception as error: # pylint: disable=W0703 LOGGER.error('Container stop error') LOGGER.error(error) diff --git a/framework/python/src/test_orc/test_orchestrator.py b/framework/python/src/test_orc/test_orchestrator.py index 6711584be..d0ca63b24 100644 --- a/framework/python/src/test_orc/test_orchestrator.py +++ b/framework/python/src/test_orc/test_orchestrator.py @@ -106,11 +106,11 @@ def run_test_modules(self): LOGGER.info("All tests complete") - self._session.stop() + self._session.finish() # Do not carry on (generating a report) if Testrun has been stopped if self.get_session().get_status() != "In Progress": - return None + return "Cancelled" report = TestReport() report.from_json(self._generate_report())