diff --git a/.github/workflows/generate_reference_results_workflow.yml b/.github/workflows/generate_reference_results_workflow.yml index f1b080638..224fef9cd 100644 --- a/.github/workflows/generate_reference_results_workflow.yml +++ b/.github/workflows/generate_reference_results_workflow.yml @@ -104,6 +104,3 @@ jobs: runs/*/system-tests-stdout.log runs/*/system-tests-stderr.log runs/*/*/system-tests_*.log - - name: tidy up the docker - run: | - docker network prune -f diff --git a/.github/workflows/run_testsuite_workflow.yml b/.github/workflows/run_testsuite_workflow.yml index 085c5286e..18a913ed3 100644 --- a/.github/workflows/run_testsuite_workflow.yml +++ b/.github/workflows/run_testsuite_workflow.yml @@ -93,6 +93,3 @@ jobs: runs/*/system-tests-stdout.log runs/*/system-tests-stderr.log runs/*/*/system-tests_*.log - - name: tidy up the docker - run: | - docker network prune -f diff --git a/changelog-entries/820.md b/changelog-entries/820.md new file mode 100644 index 000000000..af1ddb10d --- /dev/null +++ b/changelog-entries/820.md @@ -0,0 +1 @@ +- The system tests now call `docker network prune` on the host before and after executing a test [#820](https://github.com/precice/tutorials/pull/820) \ No newline at end of file diff --git a/tools/tests/systemtests/Systemtest.py b/tools/tests/systemtests/Systemtest.py index f438eac03..7674fb485 100644 --- a/tools/tests/systemtests/Systemtest.py +++ b/tools/tests/systemtests/Systemtest.py @@ -399,6 +399,35 @@ def __unpack_reference_results(self) -> Tuple[bool, str]: logging.error(error_message) return False, error_message + def _cleanup_docker_networks(self): + """ + Prunes the unused Docker networks, since there is an upper limit on the number of custom networks defined. + """ + logging.debug(f"Deleting unused Docker networks...") + stdout_data = [] + stderr_data = [] + try: + # Execute docker-network-prune command + process = subprocess.Popen(['docker', + 'network', + 'prune', + '-f'], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + start_new_session=True, + cwd=self.system_test_dir) + try: + stdout, stderr = process.communicate(timeout=self.timeout) + except KeyboardInterrupt as k: + process.kill() + raise KeyboardInterrupt from k + except Exception as e: + logging.critical( + f"Systemtest {self} could not prune the Docker networks. This might prevent tests from starting.") + stdout_data.extend(stdout.decode().splitlines()) + stderr_data.extend(stderr.decode().splitlines()) + process.poll() + def _run_field_compare(self): """ Executes the field comparison step after unpacking reference results. @@ -635,6 +664,7 @@ def run(self, run_directory: Path): std_out: List[str] = [] std_err: List[str] = [] + self._cleanup_docker_networks() docker_build_result = self._build_docker() std_out.extend(docker_build_result.stdout_data) std_err.extend(docker_build_result.stderr_data) @@ -682,6 +712,7 @@ def run(self, run_directory: Path): fieldcompare_time=fieldcompare_result.runtime) # self.__cleanup() + self._cleanup_docker_networks() self.__write_logs(std_out, std_err) return SystemtestResult( True,