From 0a3c6fa9de6441626b18e56154fa496586ff1239 Mon Sep 17 00:00:00 2001 From: Patrick Roy Date: Wed, 16 Oct 2024 07:39:15 +0100 Subject: [PATCH] test: pass `-vvv` to ssh to debug connection failures When doing `_init_connection`, set SSHs debug level to most verbose, so that in case a connection failure occurs, we can look at the SSH logs (both local and remote, see man ssh(1)). Usually, SSH debug logs would clobber with output from the actual command being run over the SSH connection, however since we're just running `true`, and are not trying to do anything with its output, that's fine in this case. Signed-off-by: Patrick Roy --- tests/host_tools/network.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/tests/host_tools/network.py b/tests/host_tools/network.py index 316fdec5424..4aba89da603 100644 --- a/tests/host_tools/network.py +++ b/tests/host_tools/network.py @@ -90,24 +90,33 @@ def _init_connection(self): We'll keep trying to execute a remote command that can't fail (`/bin/true`), until we get a successful (0) exit code. """ - self.check_output("true", timeout=10) + self.check_output("true", timeout=10, debug=True) + + def run(self, cmd_string, timeout=None, *, check=False, debug=False): + """ + Execute the command passed as a string in the ssh context. + + If `debug` is set, pass `-vvv` to `ssh`. Note that this will clobber stderr. + """ + command = [ + "ssh", + *self.options, + f"{self.user}@{self.host}", + cmd_string, + ] + + if debug: + command.insert(1, "-vvv") - def run(self, cmd_string, timeout=None, *, check=False): - """Execute the command passed as a string in the ssh context.""" return self._exec( - [ - "ssh", - *self.options, - f"{self.user}@{self.host}", - cmd_string, - ], + command, timeout, check=check, ) - def check_output(self, cmd_string, timeout=None): + def check_output(self, cmd_string, timeout=None, *, debug=False): """Same as `run`, but raises an exception on non-zero return code of remote command""" - return self.run(cmd_string, timeout, check=True) + return self.run(cmd_string, timeout, check=True, debug=debug) def _exec(self, cmd, timeout=None, check=False): """Private function that handles the ssh client invocation."""