From 5b8e44ab2e0f4f2c67002a97470887d7afd1cb79 Mon Sep 17 00:00:00 2001 From: Riccardo Mancini Date: Mon, 16 Dec 2024 14:15:04 +0000 Subject: [PATCH] fix(test): do not use absolute path to true when opening ssh connection In #4955 the executable to check the ssh connection liveliness was changed from `true` to `/usr/bin/true`, but that is not its path in all rootfs, causing failures in the `test-populat-containers` suite. Also, since the error is retried but the daemon is not cleaned up, subsequent retries would fail for the assertion. This change fixes both issues by using the binary name `true` and stopping the daemon on error before the next retry. Fixes: 3b2c2d4d6 ("test: use single SSH connection for lifetime of microvm") Signed-off-by: Riccardo Mancini --- tests/host_tools/network.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tests/host_tools/network.py b/tests/host_tools/network.py index ff6e58be2b9..af0b3766ee0 100644 --- a/tests/host_tools/network.py +++ b/tests/host_tools/network.py @@ -129,14 +129,21 @@ def _init_connection(self): "ControlPersist=yes", *self.options, self.user_host, - "/usr/bin/true", + "true", ] - # don't set a low timeout here, because otherwise we might get into a race condition - # where ssh already forked off the persisted connection daemon, but gets killed here - # before exiting itself. In that case, self._control_path will exist, and the retry - # will hit the assert at the start of this function. - self._exec(establish_cmd, check=True) + try: + # don't set a low timeout here, because otherwise we might get into a race condition + # where ssh already forked off the persisted connection daemon, but gets killed here + # before exiting itself. In that case, self._control_path will exist, and the retry + # will hit the assert at the start of this function. + self._exec(establish_cmd, check=True) + except Exception: + # if the control socket is present, then the daemon is running, and we should stop it + # before retrying again + if self._control_path.exists(): + self.close() + raise def _check_liveness(self) -> int: """Checks whether the ControlPersist connection is still alive"""