* [PATCH 0/2] simplify tests/qtest/meson.build and update docs
@ 2020-10-07 8:03 Paolo Bonzini
2020-10-07 8:03 ` [PATCH 1/2] qtest: unify extra_qtest_srcs and extra_qtest_deps Paolo Bonzini
2020-10-07 8:03 ` [PATCH 2/2] docs/devel: update instruction on how to add new unit tests Paolo Bonzini
0 siblings, 2 replies; 3+ messages in thread
From: Paolo Bonzini @ 2020-10-07 8:03 UTC (permalink / raw)
To: qemu-devel
The instructions for adding new unit tests were not in
build-system.rst and therefore I missed them in the Meson
conversion. Patch 2 updates them; before that, however,
patch 1 applies the same trick to qtests that was used to
simplify the unit tests conversion.
Paolo Bonzini (2):
qtest: unify extra_qtest_srcs and extra_qtest_deps
docs/devel: update instruction on how to add new unit tests
docs/devel/qtest.rst | 30 +++++++++++++++-------
docs/devel/testing.rst | 19 +++++++-------
tests/qtest/meson.build | 55 +++++++++++++++++++----------------------
3 files changed, 57 insertions(+), 47 deletions(-)
--
2.26.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/2] qtest: unify extra_qtest_srcs and extra_qtest_deps
2020-10-07 8:03 [PATCH 0/2] simplify tests/qtest/meson.build and update docs Paolo Bonzini
@ 2020-10-07 8:03 ` Paolo Bonzini
2020-10-07 8:03 ` [PATCH 2/2] docs/devel: update instruction on how to add new unit tests Paolo Bonzini
1 sibling, 0 replies; 3+ messages in thread
From: Paolo Bonzini @ 2020-10-07 8:03 UTC (permalink / raw)
To: qemu-devel
Currently the extra sources and extra dependencies of qtests are held
in two separate dictionaries. Use the same trick as tests/meson.build
to combine them into one. This will make it easier to update the
documentation for unit tests and qtests.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
tests/qtest/meson.build | 55 +++++++++++++++++++----------------------
1 file changed, 26 insertions(+), 29 deletions(-)
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index ad33ac311d..550a0b51a6 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -192,35 +192,25 @@ qos_test_ss.add(
qos_test_ss.add(when: 'CONFIG_VIRTFS', if_true: files('virtio-9p-test.c'))
qos_test_ss.add(when: 'CONFIG_VHOST_USER', if_true: files('vhost-user-test.c'))
-extra_qtest_deps = {
- 'bios-tables-test': [io],
- 'ivshmem-test': [rt],
- 'qos-test': [chardev, io],
- 'tpm-crb-swtpm-test': [io],
- 'tpm-crb-test': [io],
- 'tpm-tis-swtpm-test': [io],
- 'tpm-tis-test': [io],
- 'tpm-tis-device-swtpm-test': [io],
- 'tpm-tis-device-test': [io],
-}
-extra_qtest_srcs = {
- 'bios-tables-test': files('boot-sector.c', 'acpi-utils.c', 'tpm-emu.c'),
- 'pxe-test': files('boot-sector.c'),
+tpmemu_files = ['tpm-emu.c', 'tpm-util.c', 'tpm-tests.c']
+
+qtests = {
+ 'bios-tables-test': [io, 'boot-sector.c', 'acpi-utils.c', 'tpm-emu.c'],
'cdrom-test': files('boot-sector.c'),
- 'migration-test': files('migration-helpers.c'),
- 'ivshmem-test': files('../../contrib/ivshmem-server/ivshmem-server.c'),
'dbus-vmstate-test': files('migration-helpers.c') + dbus_vmstate1,
+ 'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'],
+ 'migration-test': files('migration-helpers.c'),
+ 'pxe-test': files('boot-sector.c'),
+ 'qos-test': [chardev, io, qos_test_ss.apply(config_host, strict: false).sources()],
+ 'tpm-crb-swtpm-test': [io, tpmemu_files],
+ 'tpm-crb-test': [io, tpmemu_files],
+ 'tpm-tis-swtpm-test': [io, tpmemu_files, 'tpm-tis-util.c'],
+ 'tpm-tis-test': [io, tpmemu_files, 'tpm-tis-util.c'],
+ 'tpm-tis-device-swtpm-test': [io, tpmemu_files, 'tpm-tis-util.c'],
+ 'tpm-tis-device-test': [io, tpmemu_files, 'tpm-tis-util.c'],
'vmgenid-test': files('boot-sector.c', 'acpi-utils.c'),
- 'tpm-crb-swtpm-test': files('tpm-emu.c', 'tpm-util.c', 'tpm-tests.c'),
- 'tpm-crb-test': files('tpm-emu.c', 'tpm-util.c', 'tpm-tests.c'),
- 'tpm-tis-device-swtpm-test': files('tpm-emu.c', 'tpm-util.c', 'tpm-tis-util.c', 'tpm-tests.c'),
- 'tpm-tis-device-test': files('tpm-emu.c', 'tpm-util.c', 'tpm-tis-util.c', 'tpm-tests.c'),
- 'tpm-tis-swtpm-test': files('tpm-emu.c', 'tpm-util.c', 'tpm-tis-util.c', 'tpm-tests.c'),
- 'tpm-tis-test': files('tpm-emu.c', 'tpm-util.c', 'tpm-tis-util.c', 'tpm-tests.c'),
- 'qos-test': qos_test_ss.apply(config_host, strict: false).sources()
}
-
qtest_executables = {}
foreach dir : target_dirs
if not dir.endswith('-softmmu')
@@ -229,7 +219,7 @@ foreach dir : target_dirs
target_base = dir.split('-')[0]
qtest_emulator = emulators['qemu-system-' + target_base]
- qtests = get_variable('qtests_' + target_base, []) + qtests_generic
+ target_qtests = get_variable('qtests_' + target_base, []) + qtests_generic
test_deps = []
qtest_env = environment()
@@ -240,14 +230,21 @@ foreach dir : target_dirs
qtest_env.set('G_TEST_DBUS_DAEMON', meson.source_root() / 'tests/dbus-vmstate-daemon.sh')
qtest_env.set('QTEST_QEMU_BINARY', './qemu-system-' + target_base)
- foreach test : qtests
+ foreach test : target_qtests
# Executables are shared across targets, declare them only the first time we
# encounter them
if not qtest_executables.has_key(test)
+ src = [test + '.c']
+ deps = [qemuutil, qos]
+ if test in qtests
+ # use a sourceset to quickly separate sources and deps
+ test_ss = ss.source_set()
+ test_ss.add(qtests[test])
+ src += test_ss.all_sources()
+ deps += test_ss.all_dependencies()
+ endif
qtest_executables += {
- test: executable(test,
- files(test + '.c') + extra_qtest_srcs.get(test, []),
- dependencies: [qemuutil, qos] + extra_qtest_deps.get(test, []))
+ test: executable(test, src, dependencies: deps)
}
endif
# FIXME: missing dependency on the emulator binary and qemu-img
--
2.26.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] docs/devel: update instruction on how to add new unit tests
2020-10-07 8:03 [PATCH 0/2] simplify tests/qtest/meson.build and update docs Paolo Bonzini
2020-10-07 8:03 ` [PATCH 1/2] qtest: unify extra_qtest_srcs and extra_qtest_deps Paolo Bonzini
@ 2020-10-07 8:03 ` Paolo Bonzini
1 sibling, 0 replies; 3+ messages in thread
From: Paolo Bonzini @ 2020-10-07 8:03 UTC (permalink / raw)
To: qemu-devel
The instructions for adding new unit tests were not in
build-system.rst and therefore I missed them in the Meson
conversion. Just like with the Makefile code there are
some magic variables to be aware of, so document them.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
docs/devel/qtest.rst | 30 +++++++++++++++++++++---------
docs/devel/testing.rst | 19 ++++++++++---------
2 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/docs/devel/qtest.rst b/docs/devel/qtest.rst
index 075fe5f7d5..97c5a75626 100644
--- a/docs/devel/qtest.rst
+++ b/docs/devel/qtest.rst
@@ -33,15 +33,27 @@ Steps to add a new QTest case are:
2. Write the test code with the glib and libqtest/libqos API. See also existing
tests and the library headers for reference.
-3. Register the new test in ``tests/qtest/Makefile.include``. Add the test
- executable name to an appropriate ``check-qtest-*-y`` variable. For example:
-
- ``check-qtest-generic-y = tests/qtest/foo-test$(EXESUF)``
-
-4. Add object dependencies of the executable in the Makefile, including the
- test source file(s) and other interesting objects. For example:
-
- ``tests/qtest/foo-test$(EXESUF): tests/qtest/foo-test.o $(libqos-obj-y)``
+3. Register the new test in ``tests/qtest/meson.build``. Add the test
+ executable name to an appropriate ``qtests_*`` variable. There is
+ one variable per architecture, plus ``qtests_generic`` for tests
+ that can be run for all architectures. For example::
+
+ qtests_generic = [
+ ...
+ 'foo-test',
+ ...
+ ]
+
+4. If the test has more than one source file or needs to be linked with any
+ dependency other than ``qemuutil`` and ``qos``, list them in the ``qtests``
+ dictionary. For example a test that needs to use the ``QIO`` library
+ will have an entry like::
+
+ {
+ ...
+ 'foo-test': [io],
+ ...
+ }
Debugging a QTest failure is slightly harder than the unit test because the
tests look up QEMU program names in the environment variables, such as
diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
index a171494b4e..cecee6eaa1 100644
--- a/docs/devel/testing.rst
+++ b/docs/devel/testing.rst
@@ -41,15 +41,16 @@ add a new unit test:
test. The test code should be organized with the glib testing framework.
Copying and modifying an existing test is usually a good idea.
-3. Add the test to ``tests/Makefile.include``. First, name the unit test
- program and add it to ``$(check-unit-y)``; then add a rule to build the
- executable. For example:
-
-.. code::
-
- check-unit-y += tests/foo-test$(EXESUF)
- tests/foo-test$(EXESUF): tests/foo-test.o $(test-util-obj-y)
- ...
+3. Add the test to ``tests/meson.build``. The unit tests are listed in a
+ dictionary called ``tests``. The values are any additional sources and
+ dependencies to be linked with the test. For a simple test whose source
+ is in ``tests/foo-test.c``, it is enough to add an entry like::
+
+ {
+ ...
+ 'foo-test': [],
+ ...
+ }
Since unit tests don't require environment variables, the simplest way to debug
a unit test failure is often directly invoking it or even running it under
--
2.26.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-10-07 8:05 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-07 8:03 [PATCH 0/2] simplify tests/qtest/meson.build and update docs Paolo Bonzini
2020-10-07 8:03 ` [PATCH 1/2] qtest: unify extra_qtest_srcs and extra_qtest_deps Paolo Bonzini
2020-10-07 8:03 ` [PATCH 2/2] docs/devel: update instruction on how to add new unit tests Paolo Bonzini
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).