I was annoyed that
meson build --auto-features=disabled -Dtests=enabled
will fail in unit tests. Rather than just fix that scenario, I went
down the rabbit hole and tested (almost) every single minimal build
option.
By that I mean I looked at meson_options.txt and got a list of every
option that has 'auto' as its default. I then attempted a minimal
build with only that enabled. I quickly found some options have
mandatory pre-requisite options, so I re-did the tests with such
deps present.
This uncovered many scenarios where we didn't use the right conditions
for tests. Surprisingly (at first, but not in retrospect) it also
found many places where the tests failed to depend on the earlier
build artifacts.
My test process was:
opts=$(grep auto meson_options.txt | sed -e 's/option(//' -e 's/,.*//'
-e "s/'//g")
for opt in $opts
do
deps=`grep --before 1 "option('$opt'" meson_options.txt | grep dep:
| head -1 | sed -e 's/# //' -e 's/dep:/-D/g' -e 's/$/=enabled/' -e
's/ -D/=enabled -D/g'`
echo "Try test $opt with $deps"
rm -rf build
meson setup build --auto-features=disabled -Dtests=enabled $deps -D$opt=enabled 1>
opt-$opt.log 2>&1
meson test -C build --no-suite syntax-check --print-errorlogs 1>> opt-$opt.log
2>&1 ; done
done
Then to check results
grep '^Fail:' opt-*.log | grep -v 0
This is slow, but not as slow as you might think, because each
build is very minimal, so we're not actually building more than
300-400 files each time, rather than 1000's, and we're not running
as many tests either.
Might be interesting to get extensive test into CI.
Strictly speaking we care about the combinatorial expansion of
meson_options.txt, but that would be insanely slow and is likely
to be overkill.
Daniel P. Berrangé (12):
scripts/rpcgen: skip tests if tirpc is not present
tests: fix tests when test driver is disabled
meson: record which other options are a pre-requisite
docs: ensure HTML/images are built before running reference tests
src: ensure augeas test file is generated before running test
tests: build 'virsh' before running virsh-auth test
tests: build driver modules before virdrivermoduletest
test: conditionalize 'virsh-auth' on test driver
tests: always build securityselinuxhelper if libselinux is present
test: drop bogus check for YAJL from libxl test/mock
tests: don't run mdevctl test if lacking YAJL
src/node_device: don't overwrite error messages
docs/images/meson.build | 5 ++-
docs/logos/meson.build | 5 ++-
docs/meson.build | 1 +
meson_options.txt | 20 +++++++++
scripts/rpcgen/meson.build | 2 +-
src/meson.build | 6 ++-
src/node_device/node_device_driver.c | 2 -
tests/fchosttest.c | 9 ++--
tests/libxlmock.c | 4 +-
tests/libxlxml2domconfigtest.c | 4 +-
tests/meson.build | 67 ++++++++++++++++++----------
11 files changed, 87 insertions(+), 38 deletions(-)
--
2.43.0