mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 05:35:39 +00:00
When reviewing tracetool patches it is often very unclear what the expected output will be for the generated backends. Compounding this is that a default build will only enable the 'log' trace backend, so developers won't see generated code for other backends without making a special effort. Some backends are also platform specific, so can't be enabled in QEMU builds, even though tracetool could generate the code. To address this, introduce a test suite for tracetool which is conceptually similar to the qapi-schema test. It is a simple python program that runs tracetool and compares the actual output to historical reference output kept in git. The test directly emits TAP format logs for ease of integration with meson. This can be run with make check-tracetool to make it easier for developers changing generated output, the sample expected content can be auto-recreated QEMU_TEST_REGENERATE=1 make check-tracetool and the changes reviewed and added to the commit. This will also assist reviewers interpreting the change. Developers are reminded of this in the test output on failure: $ make check-tracetool 1/6 qemu:tracetool / dtrace OK 0.14s 2/6 qemu:tracetool / ftrace FAIL 0.06s exit status 1 ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― 1..2 ok 1 - ftrace.c # not ok 1 - ftrace.h (set QEMU_TEST_REGENERATE=1 to recreate reference output if tracetool generator was intentionally changed) ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― 3/6 qemu:tracetool / log OK 0.06s 4/6 qemu:tracetool / simple OK 0.06s 5/6 qemu:tracetool / syslog OK 0.06s 6/6 qemu:tracetool / ust OK 0.11s Summary of Failures: 2/6 qemu:tracetool / ftrace FAIL 0.06s exit status 1 Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-id: 20250916081638.764020-6-berrange@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
92 lines
2.9 KiB
Meson
92 lines
2.9 KiB
Meson
subdir('bench')
|
|
subdir('qemu-iotests')
|
|
|
|
test_qapi_outputs = [
|
|
'qapi-builtin-types.c',
|
|
'qapi-builtin-types.h',
|
|
'qapi-builtin-visit.c',
|
|
'qapi-builtin-visit.h',
|
|
'test-qapi-commands-sub-sub-module.c',
|
|
'test-qapi-commands-sub-sub-module.h',
|
|
'test-qapi-commands.c',
|
|
'test-qapi-commands.h',
|
|
'test-qapi-emit-events.c',
|
|
'test-qapi-emit-events.h',
|
|
'test-qapi-events-sub-sub-module.c',
|
|
'test-qapi-events-sub-sub-module.h',
|
|
'test-qapi-events.c',
|
|
'test-qapi-events.h',
|
|
'test-qapi-features.c',
|
|
'test-qapi-features.h',
|
|
'test-qapi-init-commands.c',
|
|
'test-qapi-init-commands.h',
|
|
'test-qapi-introspect.c',
|
|
'test-qapi-introspect.h',
|
|
'test-qapi-types-sub-sub-module.c',
|
|
'test-qapi-types-sub-sub-module.h',
|
|
'test-qapi-types.c',
|
|
'test-qapi-types.h',
|
|
'test-qapi-visit-sub-sub-module.c',
|
|
'test-qapi-visit-sub-sub-module.h',
|
|
'test-qapi-visit.c',
|
|
'test-qapi-visit.h',
|
|
]
|
|
|
|
# Problem: to generate trace events, we'd have to add the .trace-events
|
|
# file to qapi_trace_events like we do in qapi/meson.build. Since
|
|
# qapi_trace_events is used by trace/meson.build, we'd have to move
|
|
# subdir('tests') above subdir('trace') in the top-level meson.build.
|
|
# Can't, because it would break the dependency of qga on qemuutil (which
|
|
# depends on trace_ss). Not worth solving now; simply suppress trace
|
|
# event generation instead.
|
|
test_qapi_files = custom_target('Test QAPI files',
|
|
output: test_qapi_outputs,
|
|
input: files('qapi-schema/qapi-schema-test.json',
|
|
'qapi-schema/include/sub-module.json',
|
|
'qapi-schema/sub-sub-module.json'),
|
|
command: [ qapi_gen, '-o', meson.current_build_dir(),
|
|
'-b', '-p', 'test-', '@INPUT0@',
|
|
'--suppress-tracing' ],
|
|
depend_files: qapi_gen_depends)
|
|
|
|
# meson doesn't like generated output in other directories
|
|
# perhaps change qapi_gen to replace / with _, like Meson itself does?
|
|
subdir('include')
|
|
|
|
test_qapi_sources = []
|
|
test_qapi_headers = []
|
|
i = 0
|
|
foreach o: test_qapi_files.to_list() + test_qapi_files_extra.to_list()
|
|
if o.full_path().endswith('.h')
|
|
test_qapi_headers += o
|
|
endif
|
|
test_qapi_sources += o
|
|
endforeach
|
|
|
|
libtestqapi = static_library('testqapi', sources: [genh, test_qapi_sources])
|
|
testqapi = declare_dependency(link_with: libtestqapi, sources: [genh, test_qapi_headers])
|
|
|
|
test_deps = {
|
|
'test-qht-par': qht_bench,
|
|
}
|
|
|
|
if have_tools and have_vhost_user and host_os == 'linux'
|
|
executable('vhost-user-bridge',
|
|
sources: files('vhost-user-bridge.c'),
|
|
dependencies: [qemuutil, vhost_user])
|
|
endif
|
|
|
|
subdir('decode')
|
|
|
|
if 'CONFIG_TCG' in config_all_accel
|
|
subdir('fp')
|
|
subdir('tcg/plugins')
|
|
endif
|
|
|
|
subdir('unit')
|
|
subdir('qapi-schema')
|
|
subdir('qtest')
|
|
subdir('migration-stress')
|
|
subdir('functional')
|
|
subdir('tracetool')
|