From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: qemu-block@nongnu.org, "Cleber Rosa" <crosa@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Hanna Reitz" <hreitz@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Daniel Berrange" <berrange@redhat.com>,
"Kevin Wolf" <kwolf@redhat.com>, "John Snow" <jsnow@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Beraldo Leal" <bleal@redhat.com>
Subject: [RFC PATCH 0/9] tests: run python tests under the build/tests/venv environment
Date: Thu, 12 May 2022 20:06:00 -0400 [thread overview]
Message-ID: <20220513000609.197906-1-jsnow@redhat.com> (raw)
RFC: This is a very early, crude attempt at switching over to an
external Python package dependency for QMP. This series does not
actually make the switch in and of itself, but instead just switches to
the paradigm of using a venv in general to install the QEMU python
packages instead of using PYTHONPATH to load them from the source tree.
(By installing the package, we can process dependencies.)
I'm sending it to the list so I can show you some of what's ugly so far
and my notes on how I might make it less ugly.
(1) This doesn't trigger venv creation *from* iotests, it merely prints
a friendly error message if "make check-venv" has not been run
first. Not the greatest.
(2) This isn't acceptable for SRPM builds, because it uses PyPI to fetch
packages just-in-time. My thought is to use an environment variable like
QEMU_CHECK_NO_INTERNET that changes the behavior of the venv setup
process. We can use "--system-site-packages" as an argument to venv
creation and "--no-index" as an argument to pip installation to achieve
good behavior in SRPM building scenarios. It'd be up to the spec-writer
to opt into that behavior.
(3) Using one venv for *all* tests means that avocado comes as a pre-req
for iotests -- which adds avocado as a BuildRequires for the Fedora
SRPM. That's probably not ideal. It may be better to model the test venv
as something that can be created in stages: the "core" venv first, and
the avocado packages only when needed.
You can see in these patches that I wasn't really sure how to tie the
check-venv step as a dependency of 'check' or 'check-block', and it
winds up feeling kind of hacky and fragile as a result.
(Patches 6 and 7 feel particularly fishy.)
What I think I would like to do is replace the makefile logic with a
Python bootstrapping script. This will allow me to add in environment
variable logic to accommodate #2 pretty easily. It will also allow
iotests to call into the bootstrap script whenever it detects the venv
isn't set up, which it needed to do anyway in order to print a
user-friendly error message. Lastly, it will make it easier to create a
"tiered" venv that layers in the avocado dependencies only as-needed,
which avoids us having to bloat the SRPM build dependencies.
In the end, I think that approach will:
- Allow us to run iotests without having to run a manual prep step
- Keep additional SRPM deps to a minimum
- Keep makefile hacks to a minimum
The only downside I am really frowning at is that I will have to
replicate some "update the venv if it's outdated" logic that is usually
handled by the Make system in the venv bootstrapper. Still, I think it's
probably the only way to hit all of the requirements here without trying
to concoct a fairly complex Makefile.
any thoughts? If not, I'll just move on to trying to hack up that
version next instead.
--js
John Snow (9):
python: update for mypy 0.950
tests: add "TESTS_PYTHON" variable to Makefile
tests: install "qemu" namespace package into venv
tests: silence pip upgrade warnings during venv creation
tests: use tests/venv to run basevm.py-based scripts
tests: add check-venv as a dependency of check and check-block
tests: add check-venv to build-tcg-disabled CI recipe
iotests: fix source directory location
iotests: use tests/venv for running tests
.gitlab-ci.d/buildtest.yml | 1 +
python/qemu/qmp/util.py | 4 +++-
python/setup.cfg | 1 +
tests/Makefile.include | 23 +++++++++++++++------
tests/avocado/avocado_qemu/__init__.py | 11 +++++-----
tests/avocado/virtio_check_params.py | 1 -
tests/avocado/virtio_version.py | 1 -
tests/qemu-iotests/testenv.py | 28 +++++++++++++++++---------
tests/requirements.txt | 1 +
tests/vm/Makefile.include | 13 ++++++------
tests/vm/basevm.py | 6 +++---
11 files changed, 57 insertions(+), 33 deletions(-)
--
2.34.1
next reply other threads:[~2022-05-13 0:08 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-13 0:06 John Snow [this message]
2022-05-13 0:06 ` [RFC PATCH 1/9] python: update for mypy 0.950 John Snow
2022-05-13 8:42 ` Paolo Bonzini
2022-05-13 14:09 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 2/9] tests: add "TESTS_PYTHON" variable to Makefile John Snow
2022-05-13 8:23 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 3/9] tests: install "qemu" namespace package into venv John Snow
2022-05-13 8:26 ` Paolo Bonzini
2022-05-13 14:01 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 4/9] tests: silence pip upgrade warnings during venv creation John Snow
2022-05-13 8:27 ` Paolo Bonzini
2022-05-13 14:02 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 5/9] tests: use tests/venv to run basevm.py-based scripts John Snow
2022-05-13 8:33 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 6/9] tests: add check-venv as a dependency of check and check-block John Snow
2022-05-13 8:41 ` Paolo Bonzini
2022-05-13 14:12 ` John Snow
2022-05-13 15:34 ` Paolo Bonzini
2022-05-13 16:08 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 7/9] tests: add check-venv to build-tcg-disabled CI recipe John Snow
2022-05-13 8:41 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 8/9] iotests: fix source directory location John Snow
2022-05-13 8:35 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 9/9] iotests: use tests/venv for running tests John Snow
2022-05-13 8:38 ` Paolo Bonzini
2022-05-13 14:38 ` John Snow
2022-05-13 15:33 ` Paolo Bonzini
2022-05-13 16:00 ` John Snow
2022-05-14 15:55 ` John Snow
2022-05-16 7:41 ` Paolo Bonzini
2022-05-17 23:51 ` John Snow
2022-05-18 10:38 ` Paolo Bonzini
2022-05-13 8:35 ` [RFC PATCH 0/9] tests: run python tests under the build/tests/venv environment Daniel P. Berrangé
2022-05-13 9:45 ` Paolo Bonzini
2022-05-13 10:29 ` Daniel P. Berrangé
2022-05-13 15:55 ` John Snow
2022-05-13 16:07 ` Daniel P. Berrangé
2022-05-13 16:49 ` Paolo Bonzini
2022-05-13 19:09 ` John Snow
2022-05-13 12:57 ` Kevin Wolf
2022-05-13 15:25 ` John Snow
2022-05-13 10:20 ` Paolo Bonzini
2022-05-13 15:39 ` John Snow
2022-05-13 16:07 ` Paolo Bonzini
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=20220513000609.197906-1-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=berrange@redhat.com \
--cc=bleal@redhat.com \
--cc=crosa@redhat.com \
--cc=f4bug@amsat.org \
--cc=hreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=wainersm@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 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).