All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cleber Rosa <crosa@redhat.com>
To: Auger Eric <eric.auger@redhat.com>
Cc: "Fam Zheng" <fam@euphon.net>,
	"Aleksandar Rikalo" <aleksandar.rikalo@syrmia.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	qemu-devel@nongnu.org,
	"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Willian Rampazzo" <willianr@redhat.com>,
	"Eric Auger" <eauger@redhat.com>, "John Snow" <jsnow@redhat.com>,
	"Willian Rampazzo" <wrampazz@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Max Reitz" <mreitz@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Aurelien Jarno" <aurelien@aurel32.net>,
	"Beraldo Leal" <bleal@redhat.com>
Subject: Re: [PATCH v2 04/10] Acceptance Tests: move useful ssh methods to base class
Date: Sun, 11 Apr 2021 22:18:50 -0400	[thread overview]
Message-ID: <YHOuCp95g5OgnZoq@localhost.localdomain> (raw)
In-Reply-To: <41f58f57-8cc5-f375-943e-0b2d298b8fbd@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 10095 bytes --]

On Wed, Mar 24, 2021 at 10:07:31AM +0100, Auger Eric wrote:
> Hi Cleber,
> 
> On 3/23/21 11:15 PM, Cleber Rosa wrote:
> > 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
> nit: strictly speaking they are moved to another class which is
> inherited by LinuxTest, right?

I forgot to address this comment previously.  Yes, you're right.
I'll reword it.

Thanks!
- Cleber.

> > 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>
> > Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
> > Reviewed-by: Willian Rampazzo <willianr@redhat.com>
> > ---
> >  tests/acceptance/avocado_qemu/__init__.py | 48 ++++++++++++++++++++++-
> >  tests/acceptance/linux_ssh_mips_malta.py  | 38 ++----------------
> >  tests/acceptance/virtiofs_submounts.py    | 37 -----------------
> >  3 files changed, 50 insertions(+), 73 deletions(-)
> > 
> > diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
> > index 83b1741ec8..67f75f66e5 100644
> > --- a/tests/acceptance/avocado_qemu/__init__.py
> > +++ b/tests/acceptance/avocado_qemu/__init__.py
> > @@ -20,6 +20,7 @@
> >  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
> >  
> > @@ -43,6 +44,8 @@
> >  from qemu.accel import kvm_available
> >  from qemu.accel import tcg_available
> >  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)
> > @@ -253,7 +256,50 @@ def fetch_asset(self, name,
> >                          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 052008f02d..3f590a081f 100644
> > --- a/tests/acceptance/linux_ssh_mips_malta.py
> > +++ b/tests/acceptance/linux_ssh_mips_malta.py
> > @@ -12,7 +12,7 @@
> >  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 qemu.utils import get_info_usernet_hostfwd_port
> Can't you remove this now?
> >  
> >  
> > -class LinuxSSH(Test):
> > +class LinuxSSH(Test, LinuxSSHMixIn):
> out of curiosity why can't it be migrated to a LinuxTest?
> >  
> >      timeout = 150 # Not for 'configure --enable-debug --enable-debug-tcg'
> >  
> > @@ -72,41 +72,9 @@ def get_kernel_info(self, endianess, wordsize):
> >      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:" + port)
> > -        self.ssh_session = ssh.Session(self.VM_IP, port=int(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 @@ def boot_debian_wheezy_image_and_ssh_login(self, endianess, kernel_path):
> >          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 57a7047342..bed8ce44df 100644
> > --- a/tests/acceptance/virtiofs_submounts.py
> > +++ b/tests/acceptance/virtiofs_submounts.py
> > @@ -9,8 +9,6 @@
> >  from avocado_qemu import wait_for_console_pattern
> >  from avocado.utils import ssh
> >  
> > -from qemu.utils import get_info_usernet_hostfwd_port
> > -
> >  
> >  def run_cmd(args):
> >      subp = subprocess.Popen(args,
> > @@ -75,41 +73,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)
> >  
> > 
> 
> Besides,
> 
> Reviewed-by: Eric Auger <eric.auger@redhat.com>
> 
> Thanks
> 
> Eric

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2021-04-12  2:20 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-23 22:15 [PATCH v2 00/10] Acceptance Test: introduce base class for Linux based tests Cleber Rosa
2021-03-23 22:15 ` [PATCH v2 01/10] tests/acceptance/virtiofs_submounts.py: add missing accel tag Cleber Rosa
2021-03-24  8:45   ` Auger Eric
2021-03-23 22:15 ` [PATCH v2 02/10] tests/acceptance/virtiofs_submounts.py: evaluate string not length Cleber Rosa
2021-03-24  8:45   ` Auger Eric
2021-03-24 19:54   ` Willian Rampazzo
2021-03-23 22:15 ` [PATCH v2 03/10] Python: add utility function for retrieving port redirection Cleber Rosa
2021-03-24  8:58   ` Auger Eric
2021-03-24 20:35   ` Willian Rampazzo
2021-03-24 21:58     ` Cleber Rosa
2021-03-25 18:10   ` John Snow
2021-04-12  2:09     ` Cleber Rosa
2021-05-13 19:16       ` John Snow
2021-03-23 22:15 ` [PATCH v2 04/10] Acceptance Tests: move useful ssh methods to base class Cleber Rosa
2021-03-24  9:07   ` Auger Eric
2021-03-24 22:23     ` Cleber Rosa
2021-03-25 12:50       ` Auger Eric
2021-03-25 17:43         ` Wainer dos Santos Moschetta
2021-04-12  2:18     ` Cleber Rosa [this message]
2021-03-23 22:15 ` [PATCH v2 05/10] Acceptance Tests: add port redirection for ssh by default Cleber Rosa
2021-03-24  8:30   ` Marc-André Lureau
2021-03-24 22:28     ` Cleber Rosa
2021-03-24  9:10   ` Auger Eric
2021-03-24 22:27     ` Cleber Rosa
2021-03-25 17:57     ` Wainer dos Santos Moschetta
2021-04-12  2:47       ` Cleber Rosa
2021-03-24 10:36   ` Auger Eric
2021-03-24 22:40     ` Cleber Rosa
2021-03-24 20:39   ` Willian Rampazzo
2021-03-23 22:15 ` [PATCH v2 06/10] Acceptance Tests: make username/password configurable Cleber Rosa
2021-03-24  8:31   ` Marc-André Lureau
2021-03-24  9:18   ` Auger Eric
2021-03-24 20:43   ` Willian Rampazzo
2021-03-23 22:15 ` [PATCH v2 07/10] Acceptance Tests: set up SSH connection by default after boot for LinuxTest Cleber Rosa
2021-03-24  8:33   ` Marc-André Lureau
2021-03-24  9:22   ` Auger Eric
2021-03-24 22:45     ` Cleber Rosa
2021-03-24 20:45   ` Willian Rampazzo
2021-03-25 14:31   ` Wainer dos Santos Moschetta
2021-03-25 14:53     ` Wainer dos Santos Moschetta
2021-03-23 22:15 ` [PATCH v2 08/10] tests/acceptance/virtiofs_submounts.py: remove launch_vm() Cleber Rosa
2021-03-24  8:34   ` Marc-André Lureau
2021-03-24  9:24   ` Auger Eric
2021-03-24 20:46   ` Willian Rampazzo
2021-03-23 22:15 ` [PATCH v2 09/10] Acceptance Tests: add basic documentation on LinuxTest base class Cleber Rosa
2021-03-24  9:25   ` Auger Eric
2021-03-25 18:14   ` Wainer dos Santos Moschetta
2021-04-12  2:59     ` Cleber Rosa
2021-03-23 22:15 ` [PATCH v2 10/10] Acceptance Tests: introduce CPU hotplug test Cleber Rosa
2021-03-24  9:29   ` Auger Eric
2021-03-25 19:45 ` [PATCH v2 00/10] Acceptance Test: introduce base class for Linux based tests Wainer dos Santos Moschetta
2021-03-26  8:06   ` Auger Eric
2021-04-12  3:22   ` 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=YHOuCp95g5OgnZoq@localhost.localdomain \
    --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=eric.auger@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=willianr@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.