* [PULL v2 00/44] Python patches
@ 2021-06-01 23:31 John Snow
2021-06-01 23:31 ` [PULL v2 04/44] Python: add utility function for retrieving port redirection John Snow
2021-06-02 16:07 ` [PULL v2 00/44] Python patches Peter Maydell
0 siblings, 2 replies; 4+ messages in thread
From: John Snow @ 2021-06-01 23:31 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Peter Maydell, Thomas Huth, Eduardo Habkost,
qemu-block, Philippe Mathieu-Daudé,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Max Reitz, Willian Rampazzo, John Snow, Cleber Rosa,
Alex Bennée, Aurelien Jarno
The following changes since commit 52848929b70dcf92a68aedcfd90207be81ba3274:
Merge remote-tracking branch 'remotes/kraxel/tags/usb-20210528-pull-request' into staging (2021-05-30 20:10:30 +0100)
are available in the Git repository at:
https://gitlab.com/jsnow/qemu.git tags/python-pull-request
for you to fetch changes up to 6b9c277797879ce41ed20deb6737f4156cc279b3:
gitlab: add python linters to CI (2021-06-01 16:21:21 -0400)
----------------------------------------------------------------
Pull request
V2:
- Squashed in fixup for
'Python: add utility function for retrieving port redirection'
- Rebased on today's upstream
CI here:
https://gitlab.com/jsnow/qemu/-/pipelines/313202814
----------------------------------------------------------------
Cleber Rosa (12):
Python: expose QEMUMachine's temporary directory
tests/acceptance/virtiofs_submounts.py: add missing accel tag
tests/acceptance/virtiofs_submounts.py: evaluate string not length
Python: add utility function for retrieving port redirection
Acceptance Tests: move useful ssh methods to base class
Acceptance Tests: add port redirection for ssh by default
Acceptance Tests: make username/password configurable
Acceptance Tests: set up SSH connection by default after boot for
LinuxTest
tests/acceptance/virtiofs_submounts.py: remove launch_vm()
Acceptance Tests: add basic documentation on LinuxTest base class
Acceptance Tests: introduce CPU hotplug test
tests/acceptance/virtiofs_submounts.py: fix setup of SSH pubkey
John Snow (31):
python/console_socket: avoid one-letter variable
python/machine: use subprocess.DEVNULL instead of
open(os.path.devnull)
python/machine: use subprocess.run instead of subprocess.Popen
python/console_socket: Add a pylint ignore
python/machine: Disable pylint warning for open() in _pre_launch
python/machine: disable warning for Popen in _launch()
python/machine: Trim line length to below 80 chars
iotests/297: add --namespace-packages to mypy arguments
python: create qemu packages
python: add qemu package installer
python: add VERSION file
python: add directory structure README.rst files
python: add MANIFEST.in
python: Add pipenv support
python: add pylint import exceptions
python: move pylintrc into setup.cfg
python: add pylint to pipenv
python: move flake8 config to setup.cfg
python: add excluded dirs to flake8 config
python: Add flake8 to pipenv
python: move mypy.ini into setup.cfg
python: add mypy to pipenv
python: move .isort.cfg into setup.cfg
python/qemu: add isort to pipenv
python/qemu: add qemu package itself to pipenv
python: add devel package requirements to setuptools
python: add avocado-framework and tests
python: add Makefile for some common tasks
python: add .gitignore
python: add tox support
gitlab: add python linters to CI
Willian Rampazzo (1):
acceptance tests: bump Avocado version to 88.1
docs/devel/testing.rst | 26 +++
python/PACKAGE.rst | 43 ++++
python/README.rst | 58 +++++
python/qemu/README.rst | 8 +
python/qemu/machine/README.rst | 9 +
python/qemu/qmp/README.rst | 9 +
python/qemu/utils/README.rst | 7 +
.gitlab-ci.d/containers.yml | 5 +
.gitlab-ci.d/static_checks.yml | 21 ++
python/.gitignore | 16 ++
python/MANIFEST.in | 3 +
python/Makefile | 48 ++++
python/Pipfile | 13 ++
python/Pipfile.lock | 231 ++++++++++++++++++++
python/VERSION | 1 +
python/avocado.cfg | 10 +
python/mypy.ini | 4 -
python/qemu/.flake8 | 2 -
python/qemu/.isort.cfg | 7 -
python/qemu/__init__.py | 11 -
python/qemu/machine/__init__.py | 36 +++
python/qemu/{ => machine}/console_socket.py | 11 +-
python/qemu/{ => machine}/machine.py | 68 ++++--
python/qemu/{ => machine}/qtest.py | 9 +-
python/qemu/pylintrc | 58 -----
python/qemu/{qmp.py => qmp/__init__.py} | 12 +-
python/qemu/utils/__init__.py | 45 ++++
python/qemu/{ => utils}/accel.py | 0
python/setup.cfg | 102 +++++++++
python/setup.py | 23 ++
python/tests/flake8.sh | 2 +
python/tests/isort.sh | 2 +
python/tests/mypy.sh | 2 +
python/tests/pylint.sh | 2 +
tests/acceptance/avocado_qemu/__init__.py | 69 +++++-
tests/acceptance/boot_linux.py | 18 +-
tests/acceptance/hotplug_cpu.py | 37 ++++
tests/acceptance/info_usernet.py | 29 +++
tests/acceptance/linux_ssh_mips_malta.py | 42 +---
tests/acceptance/virtio-gpu.py | 2 +-
tests/acceptance/virtiofs_submounts.py | 71 +-----
tests/docker/dockerfiles/python.docker | 18 ++
tests/qemu-iotests/297 | 1 +
tests/qemu-iotests/300 | 4 +-
tests/qemu-iotests/iotests.py | 4 +-
tests/requirements.txt | 2 +-
tests/vm/aarch64vm.py | 2 +-
tests/vm/basevm.py | 12 +-
48 files changed, 967 insertions(+), 248 deletions(-)
create mode 100644 python/PACKAGE.rst
create mode 100644 python/README.rst
create mode 100644 python/qemu/README.rst
create mode 100644 python/qemu/machine/README.rst
create mode 100644 python/qemu/qmp/README.rst
create mode 100644 python/qemu/utils/README.rst
create mode 100644 python/.gitignore
create mode 100644 python/MANIFEST.in
create mode 100644 python/Makefile
create mode 100644 python/Pipfile
create mode 100644 python/Pipfile.lock
create mode 100644 python/VERSION
create mode 100644 python/avocado.cfg
delete mode 100644 python/mypy.ini
delete mode 100644 python/qemu/.flake8
delete mode 100644 python/qemu/.isort.cfg
delete mode 100644 python/qemu/__init__.py
create mode 100644 python/qemu/machine/__init__.py
rename python/qemu/{ => machine}/console_socket.py (94%)
rename python/qemu/{ => machine}/machine.py (93%)
rename python/qemu/{ => machine}/qtest.py (95%)
delete mode 100644 python/qemu/pylintrc
rename python/qemu/{qmp.py => qmp/__init__.py} (96%)
create mode 100644 python/qemu/utils/__init__.py
rename python/qemu/{ => utils}/accel.py (100%)
create mode 100644 python/setup.cfg
create mode 100755 python/setup.py
create mode 100755 python/tests/flake8.sh
create mode 100755 python/tests/isort.sh
create mode 100755 python/tests/mypy.sh
create mode 100755 python/tests/pylint.sh
create mode 100644 tests/acceptance/hotplug_cpu.py
create mode 100644 tests/acceptance/info_usernet.py
create mode 100644 tests/docker/dockerfiles/python.docker
--
2.31.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PULL v2 04/44] Python: add utility function for retrieving port redirection
2021-06-01 23:31 [PULL v2 00/44] Python patches John Snow
@ 2021-06-01 23:31 ` John Snow
2021-06-02 16:07 ` [PULL v2 00/44] Python patches Peter Maydell
1 sibling, 0 replies; 4+ messages in thread
From: John Snow @ 2021-06-01 23:31 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Peter Maydell, Thomas Huth, Eduardo Habkost,
qemu-block, Philippe Mathieu-Daudé,
Philippe Mathieu-Daudé, Wainer dos Santos Moschetta,
Max Reitz, Willian Rampazzo, Eric Auger, John Snow, Cleber Rosa,
Alex Bennée, Aurelien Jarno
From: Cleber Rosa <crosa@redhat.com>
Slightly different versions for the same utility code are currently
present on different locations. This unifies them all, giving
preference to the version from virtiofs_submounts.py, because of the
last tweaks added to it.
While at it, this adds a "qemu.utils" module to host the utility
function and a test.
Signed-off-by: Cleber Rosa <crosa@redhat.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
Message-Id: <20210412044644.55083-4-crosa@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
[Squashed in below fix. --js]
Signed-off-by: John Snow <jsnow@redhat.com>
Signed-off-by: Cleber Rosa <crosa@redhat.com>
Message-Id: <20210601154546.130870-2-crosa@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
---
python/qemu/utils.py | 33 ++++++++++++++++++++++++
tests/acceptance/info_usernet.py | 29 +++++++++++++++++++++
tests/acceptance/linux_ssh_mips_malta.py | 16 +++++-------
tests/acceptance/virtiofs_submounts.py | 21 ++++-----------
tests/vm/basevm.py | 11 +++-----
5 files changed, 78 insertions(+), 32 deletions(-)
create mode 100644 python/qemu/utils.py
create mode 100644 tests/acceptance/info_usernet.py
diff --git a/python/qemu/utils.py b/python/qemu/utils.py
new file mode 100644
index 00000000000..5ed789275ee
--- /dev/null
+++ b/python/qemu/utils.py
@@ -0,0 +1,33 @@
+"""
+QEMU utility library
+
+This offers miscellaneous utility functions, which may not be easily
+distinguishable or numerous to be in their own module.
+"""
+
+# Copyright (C) 2021 Red Hat Inc.
+#
+# Authors:
+# Cleber Rosa <crosa@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2. See
+# the COPYING file in the top-level directory.
+#
+
+import re
+from typing import Optional
+
+
+def get_info_usernet_hostfwd_port(info_usernet_output: str) -> Optional[int]:
+ """
+ Returns the port given to the hostfwd parameter via info usernet
+
+ :param info_usernet_output: output generated by hmp command "info usernet"
+ :return: the port number allocated by the hostfwd option
+ """
+ for line in info_usernet_output.split('\r\n'):
+ regex = r'TCP.HOST_FORWARD.*127\.0\.0\.1\s+(\d+)\s+10\.'
+ match = re.search(regex, line)
+ if match is not None:
+ return int(match[1])
+ return None
diff --git a/tests/acceptance/info_usernet.py b/tests/acceptance/info_usernet.py
new file mode 100644
index 00000000000..9c1fd903a0b
--- /dev/null
+++ b/tests/acceptance/info_usernet.py
@@ -0,0 +1,29 @@
+# Test for the hmp command "info usernet"
+#
+# Copyright (c) 2021 Red Hat, Inc.
+#
+# Author:
+# Cleber Rosa <crosa@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later. See the COPYING file in the top-level directory.
+
+from avocado_qemu import Test
+
+from qemu.utils import get_info_usernet_hostfwd_port
+
+
+class InfoUsernet(Test):
+
+ def test_hostfwd(self):
+ self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22')
+ self.vm.launch()
+ res = self.vm.command('human-monitor-command',
+ command_line='info usernet')
+ port = get_info_usernet_hostfwd_port(res)
+ self.assertIsNotNone(port,
+ ('"info usernet" output content does not seem to '
+ 'contain the redirected port'))
+ self.assertGreater(port, 0,
+ ('Found a redirected port that is not greater than'
+ ' zero'))
diff --git a/tests/acceptance/linux_ssh_mips_malta.py b/tests/acceptance/linux_ssh_mips_malta.py
index 6dbd02d49d5..052008f02d4 100644
--- a/tests/acceptance/linux_ssh_mips_malta.py
+++ b/tests/acceptance/linux_ssh_mips_malta.py
@@ -18,6 +18,8 @@
from avocado.utils import archive
from avocado.utils import ssh
+from qemu.utils import get_info_usernet_hostfwd_port
+
class LinuxSSH(Test):
@@ -70,18 +72,14 @@ def get_kernel_info(self, endianess, wordsize):
def setUp(self):
super(LinuxSSH, self).setUp()
- def get_portfwd(self):
+ def ssh_connect(self, username, password):
+ self.ssh_logger = logging.getLogger('ssh')
res = self.vm.command('human-monitor-command',
command_line='info usernet')
- line = res.split('\r\n')[2]
- port = re.split(r'.*TCP.HOST_FORWARD.*127\.0\.0\.1 (\d+)\s+10\..*',
- line)[1]
+ 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)
- return port
-
- def ssh_connect(self, username, password):
- self.ssh_logger = logging.getLogger('ssh')
- port = self.get_portfwd()
self.ssh_session = ssh.Session(self.VM_IP, port=int(port),
user=username, password=password)
for i in range(10):
diff --git a/tests/acceptance/virtiofs_submounts.py b/tests/acceptance/virtiofs_submounts.py
index ca64b76301f..57a7047342f 100644
--- a/tests/acceptance/virtiofs_submounts.py
+++ b/tests/acceptance/virtiofs_submounts.py
@@ -9,6 +9,8 @@
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,
@@ -73,27 +75,14 @@ class VirtiofsSubmountsTest(LinuxTest):
:avocado: tags=accel:kvm
"""
- def get_portfwd(self):
- port = None
-
+ def ssh_connect(self, username, keyfile):
+ self.ssh_logger = logging.getLogger('ssh')
res = self.vm.command('human-monitor-command',
command_line='info usernet')
- for line in res.split('\r\n'):
- match = \
- re.search(r'TCP.HOST_FORWARD.*127\.0\.0\.1\s+(\d+)\s+10\.',
- line)
- if match is not None:
- port = int(match[1])
- break
-
+ port = get_info_usernet_hostfwd_port(res)
self.assertIsNotNone(port)
self.assertGreater(port, 0)
self.log.debug('sshd listening on port: %d', port)
- return port
-
- def ssh_connect(self, username, keyfile):
- self.ssh_logger = logging.getLogger('ssh')
- port = self.get_portfwd()
self.ssh_session = ssh.Session('127.0.0.1', port=port,
user=username, key=keyfile)
for i in range(10):
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 00f1d5ca8da..995e642465b 100644
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -21,6 +21,7 @@
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
from qemu.accel import kvm_available
from qemu.machine import QEMUMachine
+from qemu.utils import get_info_usernet_hostfwd_port
import subprocess
import hashlib
import argparse
@@ -227,7 +228,7 @@ def _ssh_do(self, user, cmd, check):
"-o", "UserKnownHostsFile=" + os.devnull,
"-o",
"ConnectTimeout={}".format(self._config["ssh_timeout"]),
- "-p", self.ssh_port, "-i", self._ssh_tmp_key_file]
+ "-p", str(self.ssh_port), "-i", self._ssh_tmp_key_file]
# If not in debug mode, set ssh to quiet mode to
# avoid printing the results of commands.
if not self.debug:
@@ -305,12 +306,8 @@ def boot(self, img, extra_args=[]):
# Init console so we can start consuming the chars.
self.console_init()
usernet_info = guest.qmp("human-monitor-command",
- command_line="info usernet")
- self.ssh_port = None
- for l in usernet_info["return"].splitlines():
- fields = l.split()
- if "TCP[HOST_FORWARD]" in fields and "22" in fields:
- self.ssh_port = l.split()[3]
+ command_line="info usernet").get("return")
+ self.ssh_port = get_info_usernet_hostfwd_port(usernet_info)
if not self.ssh_port:
raise Exception("Cannot find ssh port from 'info usernet':\n%s" % \
usernet_info)
--
2.31.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PULL v2 00/44] Python patches
2021-06-01 23:31 [PULL v2 00/44] Python patches John Snow
2021-06-01 23:31 ` [PULL v2 04/44] Python: add utility function for retrieving port redirection John Snow
@ 2021-06-02 16:07 ` Peter Maydell
2021-06-02 16:27 ` John Snow
1 sibling, 1 reply; 4+ messages in thread
From: Peter Maydell @ 2021-06-02 16:07 UTC (permalink / raw)
To: John Snow
Cc: Kevin Wolf, Thomas Huth, Eduardo Habkost, Qemu-block,
Philippe Mathieu-Daudé, QEMU Developers,
Wainer dos Santos Moschetta, Max Reitz, Willian Rampazzo,
Cleber Rosa, Alex Bennée, Aurelien Jarno,
Philippe Mathieu-Daudé
On Wed, 2 Jun 2021 at 00:31, John Snow <jsnow@redhat.com> wrote:
>
> The following changes since commit 52848929b70dcf92a68aedcfd90207be81ba3274:
>
> Merge remote-tracking branch 'remotes/kraxel/tags/usb-20210528-pull-request' into staging (2021-05-30 20:10:30 +0100)
>
> are available in the Git repository at:
>
> https://gitlab.com/jsnow/qemu.git tags/python-pull-request
>
> for you to fetch changes up to 6b9c277797879ce41ed20deb6737f4156cc279b3:
>
> gitlab: add python linters to CI (2021-06-01 16:21:21 -0400)
>
> ----------------------------------------------------------------
> Pull request
>
> V2:
> - Squashed in fixup for
> 'Python: add utility function for retrieving port redirection'
> - Rebased on today's upstream
>
> CI here:
> https://gitlab.com/jsnow/qemu/-/pipelines/313202814
>
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/6.1
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PULL v2 00/44] Python patches
2021-06-02 16:07 ` [PULL v2 00/44] Python patches Peter Maydell
@ 2021-06-02 16:27 ` John Snow
0 siblings, 0 replies; 4+ messages in thread
From: John Snow @ 2021-06-02 16:27 UTC (permalink / raw)
To: Peter Maydell
Cc: Kevin Wolf, Thomas Huth, Eduardo Habkost, Qemu-block,
Philippe Mathieu-Daudé, QEMU Developers,
Wainer dos Santos Moschetta, Max Reitz, Willian Rampazzo,
Cleber Rosa, Alex Bennée, Aurelien Jarno,
Philippe Mathieu-Daudé
On 6/2/21 12:07 PM, Peter Maydell wrote:
> On Wed, 2 Jun 2021 at 00:31, John Snow <jsnow@redhat.com> wrote:
>>
>> The following changes since commit 52848929b70dcf92a68aedcfd90207be81ba3274:
>>
>> Merge remote-tracking branch 'remotes/kraxel/tags/usb-20210528-pull-request' into staging (2021-05-30 20:10:30 +0100)
>>
>> are available in the Git repository at:
>>
>> https://gitlab.com/jsnow/qemu.git tags/python-pull-request
>>
>> for you to fetch changes up to 6b9c277797879ce41ed20deb6737f4156cc279b3:
>>
>> gitlab: add python linters to CI (2021-06-01 16:21:21 -0400)
>>
>> ----------------------------------------------------------------
>> Pull request
>>
>> V2:
>> - Squashed in fixup for
>> 'Python: add utility function for retrieving port redirection'
>> - Rebased on today's upstream
>>
>> CI here:
>> https://gitlab.com/jsnow/qemu/-/pipelines/313202814
>>
>
>
> Applied, thanks.
>
> Please update the changelog at https://wiki.qemu.org/ChangeLog/6.1
> for any user-visible changes.
>
> -- PMM
>
Yay!!!
Shouldn't be any user-visible changes yet, but there are some
developer-visible ones. (The new CI tests now protecting our python
code, chiefly.) I don't think it's appropriate matter for the changelog.
Thank you!
🎉
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-06-02 16:29 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-01 23:31 [PULL v2 00/44] Python patches John Snow
2021-06-01 23:31 ` [PULL v2 04/44] Python: add utility function for retrieving port redirection John Snow
2021-06-02 16:07 ` [PULL v2 00/44] Python patches Peter Maydell
2021-06-02 16:27 ` John Snow
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).