tests: Use configure-provided pyvenv for tests

This patch changes how the avocado tests are provided, ever so
slightly. Instead of creating a new testing venv, use the
configure-provided 'pyvenv' instead, and install optional packages into
that.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20230511035435.734312-20-jsnow@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
John Snow 2023-05-10 23:54:27 -04:00 committed by Paolo Bonzini
parent aab9512756
commit 9c6692db55
7 changed files with 26 additions and 23 deletions

View File

@ -103,7 +103,7 @@ crash-test-debian:
script: script:
- cd build - cd build
- make NINJA=":" check-venv - make NINJA=":" check-venv
- tests/venv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386 - pyvenv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
build-system-fedora: build-system-fedora:
extends: extends:
@ -146,8 +146,8 @@ crash-test-fedora:
script: script:
- cd build - cd build
- make NINJA=":" check-venv - make NINJA=":" check-venv
- tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
- tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32 - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
build-system-centos: build-system-centos:
extends: extends:

View File

@ -61,19 +61,19 @@ Under ``tests/avocado/`` as the root we have:
:: ::
$ make check-venv (needed only the first time to create the venv) $ make check-venv (needed only the first time to create the venv)
$ ./tests/venv/bin/avocado run -t acpi tests/avocado $ ./pyvenv/bin/avocado run -t acpi tests/avocado
The above will run all acpi avocado tests including this one. The above will run all acpi avocado tests including this one.
In order to run the individual tests, perform the following: In order to run the individual tests, perform the following:
:: ::
$ ./tests/venv/bin/avocado run tests/avocado/acpi-bits.py --tap - $ ./pyvenv/bin/avocado run tests/avocado/acpi-bits.py --tap -
The above will produce output in tap format. You can omit "--tap -" in the The above will produce output in tap format. You can omit "--tap -" in the
end and it will produce output like the following: end and it will produce output like the following:
:: ::
$ ./tests/venv/bin/avocado run tests/avocado/acpi-bits.py $ ./pyvenv/bin/avocado run tests/avocado/acpi-bits.py
Fetching asset from tests/avocado/acpi-bits.py:AcpiBitsTest.test_acpi_smbios_bits Fetching asset from tests/avocado/acpi-bits.py:AcpiBitsTest.test_acpi_smbios_bits
JOB ID : eab225724da7b64c012c65705dc2fa14ab1defef JOB ID : eab225724da7b64c012c65705dc2fa14ab1defef
JOB LOG : /home/anisinha/avocado/job-results/job-2022-10-10T17.58-eab2257/job.log JOB LOG : /home/anisinha/avocado/job-results/job-2022-10-10T17.58-eab2257/job.log

View File

@ -888,9 +888,9 @@ You can run the avocado tests simply by executing:
make check-avocado make check-avocado
This involves the automatic creation of Python virtual environment This involves the automatic installation, from PyPI, of all the
within the build tree (at ``tests/venv``) which will have all the necessary avocado-framework dependencies into the QEMU venv within the
right dependencies, and will save tests results also within the build tree (at ``./pyvenv``). Test results are also saved within the
build tree (at ``tests/results``). build tree (at ``tests/results``).
Note: the build environment must be using a Python 3 stack, and have Note: the build environment must be using a Python 3 stack, and have
@ -947,7 +947,7 @@ may be invoked by running:
.. code:: .. code::
tests/venv/bin/avocado run $OPTION1 $OPTION2 tests/avocado/ pyvenv/bin/avocado run $OPTION1 $OPTION2 tests/avocado/
Note that if ``make check-avocado`` was not executed before, it is Note that if ``make check-avocado`` was not executed before, it is
possible to create the Python virtual environment with the dependencies possible to create the Python virtual environment with the dependencies
@ -962,20 +962,20 @@ a test file. To run tests from a single file within the build tree, use:
.. code:: .. code::
tests/venv/bin/avocado run tests/avocado/$TESTFILE pyvenv/bin/avocado run tests/avocado/$TESTFILE
To run a single test within a test file, use: To run a single test within a test file, use:
.. code:: .. code::
tests/venv/bin/avocado run tests/avocado/$TESTFILE:$TESTCLASS.$TESTNAME pyvenv/bin/avocado run tests/avocado/$TESTFILE:$TESTCLASS.$TESTNAME
Valid test names are visible in the output from any previous execution Valid test names are visible in the output from any previous execution
of Avocado or ``make check-avocado``, and can also be queried using: of Avocado or ``make check-avocado``, and can also be queried using:
.. code:: .. code::
tests/venv/bin/avocado list tests/avocado pyvenv/bin/avocado list tests/avocado
Manual Installation Manual Installation
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~

View File

@ -4,7 +4,7 @@
# KVM and x86_64, or tests that are generic enough to be valid for all # KVM and x86_64, or tests that are generic enough to be valid for all
# targets. Such a test list can be generated with: # targets. Such a test list can be generated with:
# #
# ./tests/venv/bin/avocado list --filter-by-tags-include-empty \ # ./pyvenv/bin/avocado list --filter-by-tags-include-empty \
# --filter-by-tags-include-empty-key -t accel:kvm,arch:x86_64 \ # --filter-by-tags-include-empty-key -t accel:kvm,arch:x86_64 \
# tests/avocado/ # tests/avocado/
# #
@ -22,7 +22,7 @@
# - tests/avocado/virtio_check_params.py:VirtioMaxSegSettingsCheck.test_machine_types # - tests/avocado/virtio_check_params.py:VirtioMaxSegSettingsCheck.test_machine_types
# #
make get-vm-images make get-vm-images
./tests/venv/bin/avocado run \ ./pyvenv/bin/avocado run \
--job-results-dir=tests/results/ \ --job-results-dir=tests/results/ \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_i440fx_kvm \ tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_i440fx_kvm \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_q35_kvm \ tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_q35_kvm \

View File

@ -43,7 +43,7 @@ except ModuleNotFoundError as exc:
print(f"Module '{exc.name}' not found.") print(f"Module '{exc.name}' not found.")
print(" Try 'make check-venv' from your build directory,") print(" Try 'make check-venv' from your build directory,")
print(" and then one way to run this script is like so:") print(" and then one way to run this script is like so:")
print(f' > $builddir/tests/venv/bin/python3 "{path}"') print(f' > $builddir/pyvenv/bin/python3 "{path}"')
sys.exit(1) sys.exit(1)
logger = logging.getLogger('device-crash-test') logger = logging.getLogger('device-crash-test')

View File

@ -89,7 +89,8 @@ distclean-tcg: $(DISTCLEAN_TCG_TARGET_RULES)
# Build up our target list from the filtered list of ninja targets # Build up our target list from the filtered list of ninja targets
TARGETS=$(patsubst libqemu-%.fa, %, $(filter libqemu-%.fa, $(ninja-targets))) TARGETS=$(patsubst libqemu-%.fa, %, $(filter libqemu-%.fa, $(ninja-targets)))
TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv TESTS_VENV_DIR=$(BUILD_DIR)/pyvenv
TESTS_VENV_TOKEN=$(BUILD_DIR)/pyvenv/tests.group
TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt
TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
TESTS_PYTHON=$(TESTS_VENV_DIR)/bin/python3 TESTS_PYTHON=$(TESTS_VENV_DIR)/bin/python3
@ -111,8 +112,7 @@ quiet-venv-pip = $(quiet-@)$(call quiet-command-run, \
$(TESTS_PYTHON) -m pip -q --disable-pip-version-check $1, \ $(TESTS_PYTHON) -m pip -q --disable-pip-version-check $1, \
"VENVPIP","$1") "VENVPIP","$1")
$(TESTS_VENV_DIR): $(TESTS_VENV_REQ) $(TESTS_VENV_TOKEN): $(TESTS_VENV_REQ)
$(call quiet-command, $(PYTHON) -m venv $@, VENV, $@)
$(call quiet-venv-pip,install -e "$(SRC_PATH)/python/") $(call quiet-venv-pip,install -e "$(SRC_PATH)/python/")
$(call quiet-venv-pip,install -r $(TESTS_VENV_REQ)) $(call quiet-venv-pip,install -r $(TESTS_VENV_REQ))
$(call quiet-command, touch $@) $(call quiet-command, touch $@)
@ -121,7 +121,7 @@ $(TESTS_RESULTS_DIR):
$(call quiet-command, mkdir -p $@, \ $(call quiet-command, mkdir -p $@, \
MKDIR, $@) MKDIR, $@)
check-venv: $(TESTS_VENV_DIR) check-venv: $(TESTS_VENV_TOKEN)
FEDORA_31_ARCHES_TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGETS))) FEDORA_31_ARCHES_TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGETS)))
FEDORA_31_ARCHES_CANDIDATES=$(patsubst ppc64,ppc64le,$(FEDORA_31_ARCHES_TARGETS)) FEDORA_31_ARCHES_CANDIDATES=$(patsubst ppc64,ppc64le,$(FEDORA_31_ARCHES_TARGETS))
@ -167,7 +167,7 @@ check:
check-build: run-ninja check-build: run-ninja
check-clean: check-clean:
rm -rf $(TESTS_VENV_DIR) $(TESTS_RESULTS_DIR) rm -rf $(TESTS_RESULTS_DIR)
clean: check-clean clean-tcg clean: check-clean clean-tcg
distclean: distclean-tcg distclean: distclean-tcg

View File

@ -1,6 +1,9 @@
# Add Python module requirements, one per line, to be installed # Add Python module requirements, one per line, to be installed
# in the tests/venv Python virtual environment. For more info, # in the qemu build_dir/pyvenv Python virtual environment. For more info,
# refer to: https://pip.pypa.io/en/stable/user_guide/#id1 # refer to: https://pip.pypa.io/en/stable/user_guide/#id1
# Note that qemu.git/python/ is always implicitly installed. #
# Note that qemu.git/python/ is implicitly installed to this venv when
# 'make check-venv' is run, and will persist until configure is run
# again.
avocado-framework==101.0 avocado-framework==101.0
pycdlib==1.11.0 pycdlib==1.11.0