[RFC PATCH 0/5] replace build code for unit tests
Bruce Richardson
bruce.richardson at intel.com
Fri Jul 21 13:51:20 CEST 2023
While working on series such as [1] to make DPDK builds more
configurable, the majority of the complexity involved centered on the
unit tests, and ensuring that the individual files were added/removed
from the build as the components were enabled/disabled.
This complexity was exacerbated by:
* C files having multiple dependencies, specifically,
* Some libraries having one set of independent tests, while other
library tests requiring additional components
* Having to maintain lists of tests in various suites which also needed
to be updated, depending on component availability.
* Everything having to be checked via if-else clauses, since this was
not data-driven
This RFC attempts to address these issues by doing the following:
* Creating a per-file dependency list for the autotests, allowing easy
checks of when a file could be built
* Tagging the various fast-tests/perf-tests/drivers-tests suites via
macros in the C code. Then scan the C-files we are building to
construct the test suites based on what is available
This RFC is just an early prototype, and probably needs cleanup and
validation of the dependency lists. Windows support is probably also
broken, given the fact that our current build file maintains custom
lists there. However, I would hope it should not be too big a job to
enable the unit tests for the windows components that are already
available. (Tests for any components not being build on windows are
already removed via the dependency lists).
Another (hopefully less-impactful) side-effect of this change is that
the "test" binary has moved in the build folder. It is now put
along-side the other binaries in "build/app" rather than being in the
subdirectory "build/app/test".
Future work could also be done to scan the C files that are not being
build for tests. Those tests could then be stubbed out in an
auto-genereated file to always return "SKIPPED", meaning that all test
commands are always valid, irrespective of what components are present
or not.
[1] http://patches.dpdk.org/project/dpdk/list/?series=28628&state=10
Bruce Richardson (5):
app/test: add new macros for various test types
app/test: tag tests with the test type
app/test: build using per-file dependency matrix
app/test: define unit tests suites based on test macros
app/test: add fast test suite to new build infrastructure
app/meson.build | 15 +-
app/test/meson.build | 796 +++++-------------
app/test/suites/meson.build | 75 ++
app/test/test.h | 9 +-
app/test/test_acl.c | 2 +-
app/test/test_atomic.c | 2 +-
app/test/test_barrier.c | 2 +-
app/test/test_bitmap.c | 2 +-
app/test/test_bitops.c | 2 +-
app/test/test_bpf.c | 4 +-
app/test/test_byteorder.c | 2 +-
app/test/test_cksum.c | 2 +-
app/test/test_cmdline.c | 2 +-
app/test/test_common.c | 2 +-
app/test/test_cpuflags.c | 2 +-
app/test/test_crc.c | 2 +-
app/test/test_cryptodev.c | 38 +-
app/test/test_cryptodev_asym.c | 2 +-
app/test/test_cycles.c | 2 +-
app/test/test_debug.c | 2 +-
app/test/test_devargs.c | 2 +-
app/test/test_distributor.c | 2 +-
app/test/test_distributor_perf.c | 2 +-
app/test/test_dmadev.c | 2 +-
app/test/test_eal_flags.c | 24 +-
app/test/test_eal_fs.c | 2 +-
app/test/test_efd.c | 2 +-
app/test/test_efd_perf.c | 2 +-
app/test/test_errno.c | 2 +-
app/test/test_ethdev_link.c | 2 +-
app/test/test_event_ring.c | 2 +-
app/test/test_eventdev.c | 2 +-
app/test/test_fbarray.c | 2 +-
app/test/test_fib.c | 4 +-
app/test/test_fib6.c | 4 +-
app/test/test_fib6_perf.c | 2 +-
app/test/test_fib_perf.c | 2 +-
app/test/test_func_reentrancy.c | 2 +-
app/test/test_hash.c | 2 +-
app/test/test_hash_functions.c | 2 +-
app/test/test_hash_multiwriter.c | 2 +-
app/test/test_hash_perf.c | 2 +-
app/test/test_hash_readwrite.c | 4 +-
app/test/test_hash_readwrite_lf_perf.c | 2 +-
app/test/test_interrupts.c | 2 +-
app/test/test_ipfrag.c | 2 +-
app/test/test_ipsec.c | 2 +-
app/test/test_ipsec_perf.c | 2 +-
app/test/test_kni.c | 2 +-
app/test/test_kvargs.c | 2 +-
app/test/test_lcores.c | 2 +-
app/test/test_logs.c | 2 +-
app/test/test_lpm.c | 2 +-
app/test/test_lpm6.c | 2 +-
app/test/test_lpm6_perf.c | 2 +-
app/test/test_lpm_perf.c | 2 +-
app/test/test_malloc.c | 2 +-
app/test/test_malloc_perf.c | 2 +-
app/test/test_mbuf.c | 2 +-
app/test/test_mcslock.c | 2 +-
app/test/test_member.c | 2 +-
app/test/test_member_perf.c | 2 +-
app/test/test_memcpy.c | 2 +-
app/test/test_memcpy_perf.c | 2 +-
app/test/test_memory.c | 2 +-
app/test/test_mempool.c | 2 +-
app/test/test_mempool_perf.c | 2 +-
app/test/test_memzone.c | 2 +-
app/test/test_meter.c | 2 +-
app/test/test_mp_secondary.c | 2 +-
app/test/test_per_lcore.c | 2 +-
app/test/test_pflock.c | 2 +-
app/test/test_pie.c | 6 +-
app/test/test_pmd_perf.c | 2 +-
app/test/test_power.c | 2 +-
app/test/test_power_cpufreq.c | 2 +-
app/test/test_power_intel_uncore.c | 2 +-
app/test/test_power_kvm_vm.c | 2 +-
app/test/test_prefetch.c | 2 +-
app/test/test_rand_perf.c | 2 +-
app/test/test_rcu_qsbr.c | 2 +-
app/test/test_rcu_qsbr_perf.c | 2 +-
app/test/test_reassembly_perf.c | 2 +-
app/test/test_reciprocal_division.c | 2 +-
app/test/test_reciprocal_division_perf.c | 2 +-
app/test/test_red.c | 4 +-
app/test/test_reorder.c | 2 +-
app/test/test_rib.c | 4 +-
app/test/test_rib6.c | 4 +-
app/test/test_ring.c | 2 +-
app/test/test_ring_perf.c | 2 +-
app/test/test_rwlock.c | 8 +-
app/test/test_sched.c | 2 +-
app/test/test_security.c | 2 +-
app/test/test_seqlock.c | 2 +-
app/test/test_service_cores.c | 4 +-
app/test/test_spinlock.c | 2 +-
app/test/test_stack.c | 4 +-
app/test/test_stack_perf.c | 4 +-
app/test/test_string_fns.c | 2 +-
app/test/test_tailq.c | 2 +-
app/test/test_thash.c | 2 +-
app/test/test_thash_perf.c | 2 +-
app/test/test_threads.c | 2 +-
app/test/test_ticketlock.c | 2 +-
app/test/test_timer.c | 2 +-
app/test/test_timer_perf.c | 2 +-
app/test/test_timer_racecond.c | 2 +-
app/test/test_trace.c | 2 +-
app/test/test_trace_perf.c | 2 +-
app/test/test_version.c | 2 +-
buildtools/get-test-suites.py | 33 +
.../has-hugepages.py | 0
buildtools/meson.build | 2 +
114 files changed, 478 insertions(+), 754 deletions(-)
create mode 100644 app/test/suites/meson.build
create mode 100644 buildtools/get-test-suites.py
rename app/test/has_hugepage.py => buildtools/has-hugepages.py (100%)
--
2.39.2
More information about the dev
mailing list