From: Cleber Rosa <crosa@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Fam Zheng" <fam@euphon.net>,
"Aleksandar Rikalo" <aleksandar.rikalo@syrmia.com>,
"Beraldo Leal" <bleal@redhat.com>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Max Reitz" <mreitz@redhat.com>, "John Snow" <jsnow@redhat.com>,
"Eric Auger" <eauger@redhat.com>,
"Willian Rampazzo" <wrampazz@redhat.com>,
"Cleber Rosa" <crosa@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Aurelien Jarno" <aurelien@aurel32.net>,
"Eduardo Habkost" <ehabkost@redhat.com>
Subject: [PATCH 15/22] Acceptance Tests: move useful ssh methods to base class
Date: Wed, 3 Feb 2021 12:23:50 -0500 [thread overview]
Message-ID: <20210203172357.1422425-16-crosa@redhat.com> (raw)
In-Reply-To: <20210203172357.1422425-1-crosa@redhat.com>
Both the virtiofs submounts and the linux ssh mips malta tests
contains useful methods related to ssh that deserve to be made
available to other tests. Let's move them to the base LinuxTest
class.
The method that helps with setting up an ssh connection will now
support both key and password based authentication, defaulting to key
based.
Signed-off-by: Cleber Rosa <crosa@redhat.com>
---
tests/acceptance/avocado_qemu/__init__.py | 49 ++++++++++++++++++++++-
tests/acceptance/linux_ssh_mips_malta.py | 38 ++----------------
tests/acceptance/virtiofs_submounts.py | 36 -----------------
3 files changed, 51 insertions(+), 72 deletions(-)
diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
index b06692a59d..f0649e5011 100644
--- a/tests/acceptance/avocado_qemu/__init__.py
+++ b/tests/acceptance/avocado_qemu/__init__.py
@@ -10,6 +10,7 @@
import logging
import os
+import re
import sys
import uuid
import tempfile
@@ -19,6 +20,7 @@ import avocado
from avocado.utils import cloudinit
from avocado.utils import datadrainer
from avocado.utils import network
+from avocado.utils import ssh
from avocado.utils import vmimage
from avocado.utils.path import find_command
@@ -40,6 +42,8 @@ else:
sys.path.append(os.path.join(SOURCE_DIR, 'python'))
from qemu.machine import QEMUMachine
+from qemu.utils import get_info_usernet_hostfwd_port
+
def is_readable_executable_file(path):
return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
@@ -215,7 +219,50 @@ class Test(avocado.Test):
cancel_on_missing=cancel_on_missing)
-class LinuxTest(Test):
+class LinuxSSHMixIn:
+ """Contains utility methods for interacting with a guest via SSH."""
+
+ def ssh_connect(self, username, credential, credential_is_key=True):
+ self.ssh_logger = logging.getLogger('ssh')
+ res = self.vm.command('human-monitor-command',
+ command_line='info usernet')
+ port = get_info_usernet_hostfwd_port(res)
+ self.assertIsNotNone(port)
+ self.assertGreater(port, 0)
+ self.log.debug('sshd listening on port: %d', port)
+ if credential_is_key:
+ self.ssh_session = ssh.Session('127.0.0.1', port=port,
+ user=username, key=credential)
+ else:
+ self.ssh_session = ssh.Session('127.0.0.1', port=port,
+ user=username, password=credential)
+ for i in range(10):
+ try:
+ self.ssh_session.connect()
+ return
+ except:
+ time.sleep(4)
+ pass
+ self.fail('ssh connection timeout')
+
+ def ssh_command(self, command):
+ self.ssh_logger.info(command)
+ result = self.ssh_session.cmd(command)
+ stdout_lines = [line.rstrip() for line
+ in result.stdout_text.splitlines()]
+ for line in stdout_lines:
+ self.ssh_logger.info(line)
+ stderr_lines = [line.rstrip() for line
+ in result.stderr_text.splitlines()]
+ for line in stderr_lines:
+ self.ssh_logger.warning(line)
+
+ self.assertEqual(result.exit_status, 0,
+ f'Guest command failed: {command}')
+ return stdout_lines, stderr_lines
+
+
+class LinuxTest(Test, LinuxSSHMixIn):
"""Facilitates having a cloud-image Linux based available.
For tests that indend to interact with guests, this is a better choice
diff --git a/tests/acceptance/linux_ssh_mips_malta.py b/tests/acceptance/linux_ssh_mips_malta.py
index 1742235758..3f590a081f 100644
--- a/tests/acceptance/linux_ssh_mips_malta.py
+++ b/tests/acceptance/linux_ssh_mips_malta.py
@@ -12,7 +12,7 @@ import logging
import time
from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import Test, LinuxSSHMixIn
from avocado_qemu import wait_for_console_pattern
from avocado.utils import process
from avocado.utils import archive
@@ -21,7 +21,7 @@ from avocado.utils import ssh
from qemu.utils import get_info_usernet_hostfwd_port
-class LinuxSSH(Test):
+class LinuxSSH(Test, LinuxSSHMixIn):
timeout = 150 # Not for 'configure --enable-debug --enable-debug-tcg'
@@ -72,41 +72,9 @@ class LinuxSSH(Test):
def setUp(self):
super(LinuxSSH, self).setUp()
- def ssh_connect(self, username, password):
- self.ssh_logger = logging.getLogger('ssh')
- res = self.vm.command('human-monitor-command',
- command_line='info usernet')
- port = get_info_usernet_hostfwd_port(res)
- if not port:
- self.cancel("Failed to retrieve SSH port")
- self.log.debug("sshd listening on port: %d", port)
- self.ssh_session = ssh.Session(self.VM_IP, port=port,
- user=username, password=password)
- for i in range(10):
- try:
- self.ssh_session.connect()
- return
- except:
- time.sleep(4)
- pass
- self.fail("ssh connection timeout")
-
def ssh_disconnect_vm(self):
self.ssh_session.quit()
- def ssh_command(self, command, is_root=True):
- self.ssh_logger.info(command)
- result = self.ssh_session.cmd(command)
- stdout_lines = [line.rstrip() for line
- in result.stdout_text.splitlines()]
- for line in stdout_lines:
- self.ssh_logger.info(line)
- stderr_lines = [line.rstrip() for line
- in result.stderr_text.splitlines()]
- for line in stderr_lines:
- self.ssh_logger.warning(line)
- return stdout_lines, stderr_lines
-
def boot_debian_wheezy_image_and_ssh_login(self, endianess, kernel_path):
image_url, image_hash = self.get_image_info(endianess)
image_path = self.fetch_asset(image_url, asset_hash=image_hash)
@@ -127,7 +95,7 @@ class LinuxSSH(Test):
wait_for_console_pattern(self, console_pattern, 'Oops')
self.log.info('sshd ready')
- self.ssh_connect('root', 'root')
+ self.ssh_connect('root', 'root', False)
def shutdown_via_ssh(self):
self.ssh_command('poweroff')
diff --git a/tests/acceptance/virtiofs_submounts.py b/tests/acceptance/virtiofs_submounts.py
index 25ea54b6ff..d0fc103f72 100644
--- a/tests/acceptance/virtiofs_submounts.py
+++ b/tests/acceptance/virtiofs_submounts.py
@@ -10,7 +10,6 @@ from avocado_qemu import wait_for_console_pattern
from avocado.utils import ssh
from qemu.accel import kvm_available
-from qemu.utils import get_info_usernet_hostfwd_port
def run_cmd(args):
@@ -76,41 +75,6 @@ class VirtiofsSubmountsTest(LinuxTest):
:avocado: tags=accel:kvm
"""
- def ssh_connect(self, username, keyfile):
- self.ssh_logger = logging.getLogger('ssh')
- res = self.vm.command('human-monitor-command',
- command_line='info usernet')
- port = get_info_usernet_hostfwd_port(res)
- self.assertIsNotNone(port)
- self.assertGreater(port, 0)
- self.log.debug('sshd listening on port: %d', port)
- self.ssh_session = ssh.Session('127.0.0.1', port=port,
- user=username, key=keyfile)
- for i in range(10):
- try:
- self.ssh_session.connect()
- return
- except:
- time.sleep(4)
- pass
- self.fail('ssh connection timeout')
-
- def ssh_command(self, command):
- self.ssh_logger.info(command)
- result = self.ssh_session.cmd(command)
- stdout_lines = [line.rstrip() for line
- in result.stdout_text.splitlines()]
- for line in stdout_lines:
- self.ssh_logger.info(line)
- stderr_lines = [line.rstrip() for line
- in result.stderr_text.splitlines()]
- for line in stderr_lines:
- self.ssh_logger.warning(line)
-
- self.assertEqual(result.exit_status, 0,
- f'Guest command failed: {command}')
- return stdout_lines, stderr_lines
-
def run(self, args, ignore_error=False):
stdout, stderr, ret = run_cmd(args)
--
2.25.4
next prev parent reply other threads:[~2021-02-03 18:01 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-03 17:23 [PATCH 00/22] Acceptance Test: introduce base class for Linux based tests Cleber Rosa
2021-02-03 17:23 ` [PATCH 01/22] tests/acceptance/boot_linux.py: fix typo on cloudinit error message Cleber Rosa
2021-02-03 17:41 ` Philippe Mathieu-Daudé
2021-02-04 10:34 ` Alex Bennée
2021-02-04 10:44 ` Beraldo Leal
2021-02-03 17:23 ` [PATCH 02/22] tests/acceptance/boot_linux.py: rename misleading cloudinit method Cleber Rosa
2021-02-04 6:50 ` Thomas Huth
2021-02-04 10:47 ` Alex Bennée
2021-02-04 10:48 ` Beraldo Leal
2021-02-03 17:23 ` [PATCH 03/22] Acceptance Tests: remove unnecessary tag from documentation example Cleber Rosa
2021-02-03 17:41 ` Philippe Mathieu-Daudé
2021-02-04 10:47 ` Alex Bennée
2021-02-03 17:23 ` [PATCH 04/22] tests/acceptance/virtiofs_submounts.py: use workdir property Cleber Rosa
2021-02-04 10:48 ` Alex Bennée
2021-02-04 10:50 ` Beraldo Leal
2021-02-03 17:23 ` [PATCH 05/22] tests/acceptance/virtiofs_submounts.py: do not ask for ssh key password Cleber Rosa
2021-02-04 10:49 ` Alex Bennée
2021-02-04 11:05 ` Beraldo Leal
2021-02-03 17:23 ` [PATCH 06/22] tests/acceptance/virtiofs_submounts.py: use a virtio-net device instead Cleber Rosa
2021-02-04 13:22 ` Alex Bennée
2021-02-03 17:23 ` [PATCH 07/22] tests/acceptance/virtiofs_submounts.py: evaluate string not length Cleber Rosa
2021-02-04 11:07 ` Beraldo Leal
2021-02-04 13:23 ` Alex Bennée
2021-02-09 10:25 ` Max Reitz
2021-02-09 11:24 ` Alex Bennée
2021-02-09 12:03 ` Max Reitz
2021-02-09 12:52 ` Alex Bennée
2021-02-09 13:35 ` Max Reitz
2021-02-09 16:15 ` Alex Bennée
2021-02-09 17:15 ` Philippe Mathieu-Daudé
2021-02-15 17:56 ` Cleber Rosa
2021-02-03 17:23 ` [PATCH 08/22] tests/acceptance/virtiofs_submounts.py: standardize port as integer Cleber Rosa
2021-02-04 11:14 ` Beraldo Leal
2021-02-03 17:23 ` [PATCH 09/22] tests/acceptance/virtiofs_submounts.py: required space between IP and port Cleber Rosa
2021-02-08 11:21 ` Philippe Mathieu-Daudé
2021-02-03 17:23 ` [PATCH 10/22] Python: add utility function for retrieving port redirection Cleber Rosa
2021-02-05 0:25 ` John Snow
2021-03-23 21:53 ` Cleber Rosa
2021-02-09 14:50 ` Wainer dos Santos Moschetta
2021-02-15 18:27 ` Cleber Rosa
2021-02-15 19:43 ` John Snow
2021-02-15 20:31 ` Wainer dos Santos Moschetta
2021-02-03 17:23 ` [PATCH 11/22] tests/acceptance/linux_ssh_mips_malta.py: standardize port as integer Cleber Rosa
2021-02-08 11:24 ` Philippe Mathieu-Daudé
2021-02-15 18:58 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 12/22] Acceptance tests: clarify ssh connection failure reason Cleber Rosa
2021-02-03 17:42 ` Philippe Mathieu-Daudé
2021-02-03 17:23 ` [PATCH 13/22] tests/acceptance/virtiofs_submounts.py: add missing accel tag Cleber Rosa
2021-02-08 11:28 ` Philippe Mathieu-Daudé
2021-02-15 17:37 ` Cleber Rosa
2021-02-09 14:54 ` Wainer dos Santos Moschetta
2021-02-15 20:05 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 14/22] Acceptance Tests: introduce LinuxTest base class Cleber Rosa
2021-02-09 19:27 ` Wainer dos Santos Moschetta
2021-02-15 19:06 ` Willian Rampazzo
2021-02-16 3:21 ` Cleber Rosa
2021-02-03 17:23 ` Cleber Rosa [this message]
2021-02-09 19:56 ` [PATCH 15/22] Acceptance Tests: move useful ssh methods to " Wainer dos Santos Moschetta
2021-02-15 19:15 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 16/22] Acceptance Tests: introduce method for requiring an accelerator Cleber Rosa
2021-02-04 11:25 ` Beraldo Leal
2021-02-15 19:20 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 17/22] Acceptance Tests: fix population of public key in cloudinit image Cleber Rosa
2021-02-11 10:08 ` Marc-André Lureau
2021-02-15 14:48 ` Wainer dos Santos Moschetta
2021-02-15 19:23 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 18/22] Acceptance Tests: set up existing ssh keys by default Cleber Rosa
2021-02-11 10:15 ` Marc-André Lureau
2021-02-16 3:28 ` Cleber Rosa
2021-02-15 19:25 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 19/22] Acceptance Tests: add port redirection for ssh " Cleber Rosa
2021-02-03 17:46 ` Philippe Mathieu-Daudé
2021-02-03 17:51 ` Philippe Mathieu-Daudé
2021-03-23 17:56 ` Cleber Rosa
2021-02-03 17:23 ` [PATCH 20/22] Acceptance Tests: add basic documentation on LinuxTest base class Cleber Rosa
2021-02-11 10:24 ` Marc-André Lureau
2021-02-12 20:30 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 21/22] Acceptance Tests: introduce CPU hotplug test Cleber Rosa
2021-02-11 10:25 ` Marc-André Lureau
2021-02-15 19:57 ` Willian Rampazzo
2021-02-03 17:23 ` [PATCH 22/22] [NOTFORMERGE] Bump Avocado version to latest master Cleber Rosa
2021-02-11 10:45 ` Marc-André Lureau
2021-02-08 11:35 ` [PATCH 00/22] Acceptance Test: introduce base class for Linux based tests Philippe Mathieu-Daudé
2021-02-15 15:49 ` Wainer dos Santos Moschetta
2021-02-15 17:03 ` Philippe Mathieu-Daudé
2021-02-16 3:35 ` Cleber Rosa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210203172357.1422425-16-crosa@redhat.com \
--to=crosa@redhat.com \
--cc=aleksandar.rikalo@syrmia.com \
--cc=alex.bennee@linaro.org \
--cc=aurelien@aurel32.net \
--cc=bleal@redhat.com \
--cc=eauger@redhat.com \
--cc=ehabkost@redhat.com \
--cc=f4bug@amsat.org \
--cc=fam@euphon.net \
--cc=jsnow@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mreitz@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
--cc=wrampazz@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.