From patchwork Mon Aug 14 18:21:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 130295 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B8EE243064; Mon, 14 Aug 2023 20:21:29 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 23086432E1; Mon, 14 Aug 2023 20:21:24 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id D3874432D4; Mon, 14 Aug 2023 20:21:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1692037281; x=1723573281; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jKUMGVuf7auGqQNSk0SA78G9VM7gk0uvyk76zS+fdOU=; b=PFZrhfFoE31JZM6B1avoMcVlGVVg4eFBL0pfaYDOz5jWEJI9Kmj416o1 hNzZ41tfVJHMiW2Cm7ejyNK85pQ9DoOIu62ItheDMLWaTkSCpTJq4ySGk jJDczuFY524O+ISbkDZCQCWjHFVf5u3szmC/tbHV64Sf3pu0JplwA/sOG 5IAIZw6L5klnNmGQRVMdLfbGR82IPTgyuBlC3UpEYKQWIzBkWWeANiYmQ I1qtrm5ba5aDMs8MizkAfKC+hVsY6c//TPqt7cGUC9yw2U+CGxCHro8iP m5xUlBz0xNmKOTsz0yiYapEQ2W0c7poFhpMkx7HPFb8Zgd/S1guJoiofu A==; X-IronPort-AV: E=McAfee;i="6600,9927,10802"; a="375831108" X-IronPort-AV: E=Sophos;i="6.01,173,1684825200"; d="scan'208";a="375831108" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Aug 2023 11:21:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10802"; a="733545493" X-IronPort-AV: E=Sophos;i="6.01,173,1684825200"; d="scan'208";a="733545493" Received: from silpixa00401385.ir.intel.com ([10.237.214.14]) by orsmga002.jf.intel.com with ESMTP; 14 Aug 2023 11:21:18 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: ci@dpdk.org, Bruce Richardson Subject: [PATCH v3 4/8] app/test: build using per-file dependency matrix Date: Mon, 14 Aug 2023 19:21:00 +0100 Message-Id: <20230814182104.470270-5-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230814182104.470270-1-bruce.richardson@intel.com> References: <20230721115125.55137-1-bruce.richardson@intel.com> <20230814182104.470270-1-bruce.richardson@intel.com> MIME-Version: 1.0 X-BeenThere: ci@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK CI discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ci-bounces@dpdk.org Rather than using if-else constructs to selectively add or remove files from the UT build, switch to a table-based approach where each file lists out what libs or drivers it depends upon. Initial version of this table was generated via analysis of the header files included in each C file. The basic dependencies of the test binary [cmdline, ring, mempool and mbuf] were then removed from the per-file lists, as there is no point in checking them as the whole app will be disabled if they are not present. With the file list, the dependencies for the "utility" C-files are kept separate, so that other tests which depend on the functions provided by those files can have that dependency recorded properly. The basic cryptodev tests also fall into this category as functions from the main cryptodev test file are used by other crypto tests. As well as the main table for internal dependencies, some test files have separate external components too. A second, much smaller table lists these dependencies. Signed-off-by: Bruce Richardson --- app/meson.build | 8 +- app/test/meson.build | 823 ++++++++++++------------------------------- 2 files changed, 238 insertions(+), 593 deletions(-) diff --git a/app/meson.build b/app/meson.build index 4fc1a83eba..0d8b618e7f 100644 --- a/app/meson.build +++ b/app/meson.build @@ -32,6 +32,11 @@ apps = [ 'test-security-perf', ] +if get_option('tests') +# build the auto test app if enabled. + apps += 'test' +endif + default_cflags = machine_args + ['-DALLOW_EXPERIMENTAL_API'] default_ldflags = [] if get_option('default_library') == 'static' and not is_windows @@ -106,6 +111,3 @@ foreach app:apps install_rpath: join_paths(get_option('prefix'), driver_install_path), install: true) endforeach - -# special case the autotests -subdir('test') diff --git a/app/test/meson.build b/app/test/meson.build index 66897c14a3..2b885ae273 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -1,446 +1,230 @@ # SPDX-License-Identifier: BSD-3-Clause -# Copyright(c) 2017 Intel Corporation - -if not get_option('tests') - subdir_done() -endif - -test_sources = files( - 'commands.c', - 'packet_burst_generator.c', - 'test.c', - 'test_acl.c', - 'test_alarm.c', - 'test_atomic.c', - 'test_barrier.c', - 'test_bitops.c', - 'test_bitmap.c', - 'test_bpf.c', - 'test_byteorder.c', - 'test_cksum.c', - 'test_cksum_perf.c', - 'test_cmdline.c', - 'test_cmdline_cirbuf.c', - 'test_cmdline_etheraddr.c', - 'test_cmdline_ipaddr.c', - 'test_cmdline_lib.c', - 'test_cmdline_num.c', - 'test_cmdline_portlist.c', - 'test_cmdline_string.c', - 'test_common.c', - 'test_cpuflags.c', - 'test_crc.c', - 'test_cryptodev.c', - 'test_cryptodev_asym.c', - 'test_cryptodev_blockcipher.c', - 'test_cryptodev_crosscheck.c', - 'test_cryptodev_security_ipsec.c', - 'test_cryptodev_security_pdcp.c', - 'test_cycles.c', - 'test_debug.c', - 'test_devargs.c', - 'test_distributor.c', - 'test_distributor_perf.c', - 'test_dmadev.c', - 'test_dmadev_api.c', - 'test_eal_flags.c', - 'test_eal_fs.c', - 'test_efd.c', - 'test_efd_perf.c', - 'test_errno.c', - 'test_ethdev_link.c', - 'test_event_crypto_adapter.c', - 'test_event_eth_rx_adapter.c', - 'test_event_ring.c', - 'test_event_timer_adapter.c', - 'test_eventdev.c', - 'test_external_mem.c', - 'test_fbarray.c', - 'test_fib.c', - 'test_fib_perf.c', - 'test_fib6.c', - 'test_fib6_perf.c', - 'test_func_reentrancy.c', - 'test_hash.c', - 'test_hash_functions.c', - 'test_hash_multiwriter.c', - 'test_hash_readwrite.c', - 'test_hash_perf.c', - 'test_hash_readwrite_lf_perf.c', - 'test_interrupts.c', - 'test_ipfrag.c', - 'test_ipsec.c', - 'test_ipsec_sad.c', - 'test_ipsec_perf.c', - 'test_kvargs.c', - 'test_lcores.c', - 'test_logs.c', - 'test_lpm.c', - 'test_lpm6.c', - 'test_lpm6_perf.c', - 'test_lpm_perf.c', - 'test_malloc.c', - 'test_malloc_perf.c', - 'test_mbuf.c', - 'test_member.c', - 'test_member_perf.c', - 'test_memcpy.c', - 'test_memcpy_perf.c', - 'test_memory.c', - 'test_mempool.c', - 'test_mempool_perf.c', - 'test_memzone.c', - 'test_meter.c', - 'test_mcslock.c', - 'test_mp_secondary.c', - 'test_per_lcore.c', - 'test_pflock.c', - 'test_pmd_perf.c', - 'test_power.c', - 'test_power_cpufreq.c', - 'test_power_kvm_vm.c', - 'test_power_intel_uncore.c', - 'test_prefetch.c', - 'test_rand_perf.c', - 'test_rawdev.c', - 'test_rcu_qsbr.c', - 'test_rcu_qsbr_perf.c', - 'test_reassembly_perf.c', - 'test_reciprocal_division.c', - 'test_reciprocal_division_perf.c', - 'test_red.c', - 'test_pie.c', - 'test_reorder.c', - 'test_rib.c', - 'test_rib6.c', - 'test_ring.c', - 'test_ring_mpmc_stress.c', - 'test_ring_hts_stress.c', - 'test_ring_mt_peek_stress.c', - 'test_ring_mt_peek_stress_zc.c', - 'test_ring_perf.c', - 'test_ring_rts_stress.c', - 'test_ring_st_peek_stress.c', - 'test_ring_st_peek_stress_zc.c', - 'test_ring_stress.c', - 'test_rwlock.c', - 'test_sched.c', - 'test_security.c', - 'test_security_inline_macsec.c', - 'test_security_inline_proto.c', - 'test_seqlock.c', - 'test_service_cores.c', - 'test_spinlock.c', - 'test_stack.c', - 'test_stack_perf.c', - 'test_string_fns.c', - 'test_tailq.c', - 'test_thash.c', - 'test_thash_perf.c', - 'test_threads.c', - 'test_timer.c', - 'test_timer_perf.c', - 'test_timer_racecond.c', - 'test_timer_secondary.c', - 'test_ticketlock.c', - 'test_trace.c', - 'test_trace_register.c', - 'test_trace_perf.c', - 'test_version.c', - 'virtual_pmd.c', -) - -test_deps = dpdk_libs_enabled -# as well as libs, the pci and vdev bus drivers are needed for a lot of tests -test_deps += ['bus_pci', 'bus_vdev'] - -# Each test is marked with flags: -# - the first flag indicates whether the test can run in no-huge mode, -# - the second flag indicates whether the test can run with ASan enabled, -fast_tests = [ - ['acl_autotest', true, true], - ['atomic_autotest', false, true], - ['bitmap_autotest', true, true], - ['bpf_autotest', true, true], - ['bpf_convert_autotest', true, true], - ['bitops_autotest', true, true], - ['byteorder_autotest', true, true], - ['cksum_autotest', true, true], - ['cmdline_autotest', true, true], - ['common_autotest', true, true], - ['cpuflags_autotest', true, true], - ['debug_autotest', true, true], - ['devargs_autotest', true, true], - ['eal_flags_c_opt_autotest', false, false], - ['eal_flags_main_opt_autotest', false, false], - ['eal_flags_n_opt_autotest', false, false], - ['eal_flags_hpet_autotest', false, false], - ['eal_flags_no_huge_autotest', false, false], - ['eal_flags_a_opt_autotest', false, false], - ['eal_flags_b_opt_autotest', false, false], - ['eal_flags_vdev_opt_autotest', false, false], - ['eal_flags_r_opt_autotest', false, false], - ['eal_flags_mem_autotest', false, false], - ['eal_flags_file_prefix_autotest', false, false], - ['eal_flags_misc_autotest', false, false], - ['eal_fs_autotest', true, true], - ['errno_autotest', true, true], - ['ethdev_link_status', true, true], - ['event_ring_autotest', true, true], - ['fib_autotest', true, true], - ['fib6_autotest', true, true], - ['func_reentrancy_autotest', false, true], - ['hash_autotest', true, true], - ['interrupt_autotest', true, true], - ['ipfrag_autotest', false, true], - ['lcores_autotest', true, true], - ['logs_autotest', true, true], - ['lpm_autotest', true, true], - ['lpm6_autotest', true, true], - ['malloc_autotest', false, true], - ['mbuf_autotest', false, true], - ['mcslock_autotest', false, true], - ['memcpy_autotest', true, true], - ['memory_autotest', false, true], - ['mempool_autotest', false, true], - ['memzone_autotest', false, true], - ['meter_autotest', true, true], - ['multiprocess_autotest', false, false], - ['per_lcore_autotest', true, true], - ['pflock_autotest', true, true], - ['prefetch_autotest', true, true], - ['rcu_qsbr_autotest', true, true], - ['pie_autotest', true, true], - ['rib_autotest', true, true], - ['rib6_autotest', true, true], - ['ring_autotest', true, true], - ['rwlock_test1_autotest', true, true], - ['rwlock_rda_autotest', true, true], - ['rwlock_rds_wrm_autotest', true, true], - ['rwlock_rde_wro_autotest', true, true], - ['sched_autotest', true, true], - ['security_autotest', false, true], - ['seqlock_autotest', true, true], - ['spinlock_autotest', true, true], - ['stack_autotest', false, true], - ['stack_lf_autotest', false, true], - ['string_autotest', true, true], - ['tailq_autotest', true, true], - ['ticketlock_autotest', true, true], - ['timer_autotest', false, true], - ['user_delay_us', true, true], - ['version_autotest', true, true], - ['crc_autotest', true, true], - ['distributor_autotest', false, true], - ['eventdev_common_autotest', true, true], - ['fbarray_autotest', true, true], - ['hash_readwrite_func_autotest', false, true], - ['ipsec_autotest', true, true], - ['kvargs_autotest', true, true], - ['member_autotest', true, true], - ['power_cpufreq_autotest', false, true], - ['power_autotest', true, true], - ['power_kvm_vm_autotest', false, true], - ['power_intel_uncore_autotest', true, true], - ['reorder_autotest', true, true], - ['service_autotest', true, true], - ['thash_autotest', true, true], - ['threads_autotest', true, true], - ['trace_autotest', true, true], -] - -# Tests known to have issues or which don't belong in other tests lists. -extra_test_names = [ - 'alarm_autotest', # ee00af60170b ("test: remove strict timing requirements some tests") - 'red_autotest', # https://bugs.dpdk.org/show_bug.cgi?id=826 -] - -perf_test_names = [ - 'ring_perf_autotest', - 'malloc_perf_autotest', - 'mempool_perf_autotest', - 'memcpy_perf_autotest', - 'hash_perf_autotest', - 'timer_perf_autotest', - 'reciprocal_division', - 'reciprocal_division_perf', - 'lpm_perf_autotest', - 'rib_slow_autotest', - 'fib_slow_autotest', - 'fib_perf_autotest', - 'red_all', - 'pie_all', - 'barrier_autotest', - 'hash_multiwriter_autotest', - 'timer_racecond_autotest', - 'efd_autotest', - 'hash_functions_autotest', - 'member_perf_autotest', - 'efd_perf_autotest', - 'lpm6_perf_autotest', - 'rib6_slow_autotest', - 'fib6_slow_autotest', - 'fib6_perf_autotest', - 'rcu_qsbr_perf_autotest', - 'red_perf', - 'pie_perf', - 'distributor_perf_autotest', - 'pmd_perf_autotest', - 'service_perf_autotest', - 'stack_perf_autotest', - 'stack_lf_perf_autotest', - 'rand_perf_autotest', - 'hash_readwrite_perf_autotest', - 'hash_readwrite_lf_perf_autotest', - 'trace_perf_autotest', - 'ipsec_perf_autotest', - 'thash_perf_autotest', - 'reassembly_perf_autotest', -] - -driver_test_names = [ - 'cryptodev_aesni_gcm_autotest', - 'cryptodev_aesni_mb_autotest', - 'cryptodev_chacha_poly_mb_autotest', - 'cryptodev_cn10k_autotest', - 'cryptodev_cn9k_autotest', - 'cryptodev_cpu_aesni_mb_autotest', - 'cryptodev_cpu_aesni_gcm_autotest', - 'cryptodev_dpaa2_sec_autotest', - 'cryptodev_dpaa_sec_autotest', - 'cryptodev_null_autotest', - 'cryptodev_openssl_autotest', - 'cryptodev_qat_autotest', - 'cryptodev_qat_asym_autotest', - 'cryptodev_qat_raw_api_autotest', - 'cryptodev_sw_armv8_autotest', - 'cryptodev_sw_kasumi_autotest', - 'cryptodev_sw_mvsam_autotest', - 'cryptodev_sw_snow3g_autotest', - 'cryptodev_sw_zuc_autotest', - 'cryptodev_uadk_autotest', - 'dmadev_autotest', -] - -dump_test_names = [] - -if not is_windows - driver_test_names += [ - 'cryptodev_openssl_asym_autotest', - 'eventdev_selftest_octeontx', - 'eventdev_selftest_sw', - ] - - dump_test_names += [ - 'dump_struct_sizes', - 'dump_mempool', - 'dump_malloc_stats', - 'dump_devargs', - 'dump_log_types', - 'dump_ring', - 'dump_physmem', - 'dump_memzone', - ] -endif - -# The following linkages are an exception to allow running the -# unit tests without requiring that the developer install the -# DPDK libraries. Explicit linkage of drivers (plugin libraries) -# in applications should not be used. -if dpdk_conf.has('RTE_MEMPOOL_RING') - test_deps += 'mempool_ring' -endif -if dpdk_conf.has('RTE_MEMPOOL_STACK') - test_deps += 'mempool_stack' -endif -if dpdk_conf.has('RTE_EVENT_SKELETON') - test_deps += 'event_skeleton' -endif - -if dpdk_conf.has('RTE_LIB_GRAPH') - test_sources += 'test_graph.c' - fast_tests += [['graph_autotest', true, true]] - fast_tests += [['node_list_dump', true, true]] - test_sources += 'test_graph_perf.c' - perf_test_names += 'graph_perf_autotest' -endif -if dpdk_conf.has('RTE_LIB_METRICS') - test_sources += ['test_metrics.c'] - fast_tests += [['metrics_autotest', true, true]] -endif -if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY') - test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] - fast_tests += [['telemetry_json_autotest', true, true]] - fast_tests += [['telemetry_data_autotest', true, true]] -endif -if dpdk_conf.has('RTE_LIB_PIPELINE') -# pipeline lib depends on port and table libs, so those must be present -# if pipeline library is. - test_sources += [ - 'test_table.c', - 'test_table_acl.c', - 'test_table_combined.c', - 'test_table_pipeline.c', - 'test_table_ports.c', - 'test_table_tables.c', - ] - fast_tests += [['table_autotest', true, true]] -endif - -# The following linkages of drivers are required because -# they are used via a driver-specific API. -if dpdk_conf.has('RTE_NET_BOND') - test_deps += 'net_bond' - test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] - driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] - if dpdk_conf.has('RTE_NET_RING') - test_sources += 'test_link_bonding_mode4.c' - driver_test_names += 'link_bonding_mode4_autotest' - endif -endif -if dpdk_conf.has('RTE_LIB_EVENTDEV') and dpdk_conf.has('RTE_NET_RING') - test_deps += 'net_ring' - test_sources += 'test_pmd_ring_perf.c' - test_sources += 'test_pmd_ring.c' - test_sources += 'test_event_eth_tx_adapter.c' - test_sources += 'sample_packet_forward.c' - fast_tests += [['ring_pmd_autotest', true, true]] - perf_test_names += 'ring_pmd_perf_autotest' - fast_tests += [['event_eth_tx_adapter_autotest', false, true]] - if dpdk_conf.has('RTE_LIB_BITRATESTATS') - test_sources += 'test_bitratestats.c' - fast_tests += [['bitratestats_autotest', true, true]] - endif - if dpdk_conf.has('RTE_LIB_LATENCYSTATS') - test_sources += 'test_latencystats.c' - fast_tests += [['latencystats_autotest', true, true]] - endif - if dpdk_conf.has('RTE_LIB_PDUMP') - test_sources += 'test_pdump.c' - fast_tests += [['pdump_autotest', true, false]] - endif -endif -if dpdk_conf.has('RTE_NET_NULL') - test_deps += 'net_null' - test_sources += 'test_vdev.c' - fast_tests += [['vdev_autotest', true, true]] -endif -if dpdk_conf.has('RTE_RAW_SKELETON') - test_deps += 'raw_skeleton' - fast_tests += [['rawdev_autotest', true, true]] -endif - -if dpdk_conf.has('RTE_HAS_LIBPCAP') - ext_deps += pcap_dep - if dpdk_conf.has('RTE_LIB_PCAPNG') - test_sources += 'test_pcapng.c' +# Copyright(c) 2017-2023 Intel Corporation + +# the main test files [test.c and commands.c] relies on these libraries +deps += ['cmdline', 'ring', 'mempool', 'mbuf'] +sources += files('commands.c', 'test.c') + +# some other utility C files, providing functions used by various tests +# so we need to include these deps in the dependency list for the files using those fns. +packet_burst_generator_deps = ['net'] +sample_packet_forward_deps = ['net_ring', 'ethdev', 'bus_vdev'] +virtual_pmd_deps = ['ethdev', 'net', 'bus_pci'] +# test_cryptodev has material that other crypto tests need +test_cryptodev_deps = ['bus_vdev', 'net', 'cryptodev', 'crypto_scheduler', 'security'] + +source_file_deps = { + # The C files providing functionality to other test cases + 'packet_burst_generator.c': packet_burst_generator_deps, +# 'resource.c': [], # unused currently. + 'sample_packet_forward.c': sample_packet_forward_deps, + 'virtual_pmd.c': virtual_pmd_deps, + + # the various test_*.c files + 'test_acl.c': ['net', 'acl'], + 'test_alarm.c': [], + 'test_atomic.c': ['hash'], + 'test_barrier.c': [], + 'test_bitmap.c': [], + 'test_bitops.c': [], + 'test_bitratestats.c': ['metrics', 'bitratestats', 'ethdev'] + sample_packet_forward_deps, + 'test_bpf.c': ['bpf', 'net'], + 'test_byteorder.c': [], +# 'test_cfgfile.c': ['cfgfile'], + 'test_cksum.c': ['net'], + 'test_cksum_perf.c': ['net'], + 'test_cmdline.c': [], + 'test_cmdline_cirbuf.c': [], + 'test_cmdline_etheraddr.c': ['net'], + 'test_cmdline_ipaddr.c': [], + 'test_cmdline_lib.c': [], + 'test_cmdline_num.c': [], + 'test_cmdline_portlist.c': [], + 'test_cmdline_string.c': [], + 'test_common.c': [], + 'test_compressdev.c': ['compressdev'], + 'test_cpuflags.c': [], + 'test_crc.c': ['net'], + 'test_cryptodev.c': test_cryptodev_deps, + 'test_cryptodev_asym.c': ['bus_vdev'] + test_cryptodev_deps, + 'test_cryptodev_blockcipher.c': test_cryptodev_deps, + 'test_cryptodev_crosscheck.c': test_cryptodev_deps, + 'test_cryptodev_security_ipsec.c': test_cryptodev_deps, + 'test_cryptodev_security_pdcp.c': test_cryptodev_deps, + 'test_cycles.c': [], + 'test_debug.c': [], + 'test_devargs.c': ['kvargs'], + 'test_distributor.c': ['distributor'], + 'test_distributor_perf.c': ['distributor'], + 'test_dmadev.c': ['dmadev', 'bus_vdev'], + 'test_dmadev_api.c': ['dmadev'], + 'test_eal_flags.c': [], + 'test_eal_fs.c': [], + 'test_efd.c': ['efd', 'net'], + 'test_efd_perf.c': ['efd', 'hash'], + 'test_errno.c': [], + 'test_ethdev_link.c': ['ethdev'], + 'test_event_crypto_adapter.c': ['cryptodev', 'eventdev', 'bus_vdev'], + 'test_event_eth_rx_adapter.c': ['ethdev', 'eventdev', 'bus_vdev'], + 'test_event_eth_tx_adapter.c': ['bus_vdev', 'ethdev', 'net_ring', 'eventdev'], + 'test_event_ring.c': ['eventdev'], + 'test_event_timer_adapter.c': ['ethdev', 'eventdev', 'bus_vdev'], + 'test_eventdev.c': ['eventdev', 'bus_vdev'], + 'test_external_mem.c': [], + 'test_fbarray.c': [], + 'test_fib.c': ['net', 'fib'], + 'test_fib6.c': ['rib', 'fib'], + 'test_fib6_perf.c': ['fib'], + 'test_fib_perf.c': ['net', 'fib'], + 'test_flow_classify.c': ['net', 'acl', 'table', 'ethdev', 'flow_classify'], + 'test_func_reentrancy.c': ['hash', 'lpm'], + 'test_graph.c': ['graph'], + 'test_graph_perf.c': ['graph'], + 'test_hash.c': ['net', 'hash'], + 'test_hash_functions.c': ['hash'], + 'test_hash_multiwriter.c': ['hash'], + 'test_hash_perf.c': ['hash'], + 'test_hash_readwrite.c': ['hash'], + 'test_hash_readwrite_lf_perf.c': ['hash'], + 'test_interrupts.c': [], + 'test_ipfrag.c': ['net', 'ip_frag'], + 'test_ipsec.c': ['bus_vdev', 'net', 'cryptodev', 'ipsec', 'security'], + 'test_ipsec_perf.c': ['net', 'ipsec'], + 'test_ipsec_sad.c': ['ipsec'], + 'test_kvargs.c': ['kvargs'], + 'test_latencystats.c': ['ethdev', 'latencystats', 'metrics'] + sample_packet_forward_deps, + 'test_lcores.c': [], + 'test_link_bonding.c': ['ethdev', 'net_bond', + 'net'] + packet_burst_generator_deps + virtual_pmd_deps, + 'test_link_bonding_mode4.c': ['ethdev', 'net_ring', 'net_bond', + 'net'] + packet_burst_generator_deps, + 'test_link_bonding_rssconf.c': ['ethdev', 'bus_vdev', 'net_bond'], + 'test_logs.c': [], + 'test_lpm.c': ['net', 'lpm'], + 'test_lpm6.c': ['lpm'], + 'test_lpm6_perf.c': ['lpm'], + 'test_lpm_perf.c': ['net', 'lpm'], + 'test_malloc.c': [], + 'test_malloc_perf.c': [], + 'test_mbuf.c': ['net'], + 'test_mcslock.c': [], + 'test_member.c': ['member', 'net'], + 'test_member_perf.c': ['hash', 'member'], + 'test_memcpy.c': [], + 'test_memcpy_perf.c': [], + 'test_memory.c': [], + 'test_mempool.c': [], + 'test_mempool_perf.c': [], + 'test_memzone.c': [], + 'test_meter.c': ['meter'], + 'test_metrics.c': ['metrics'], + 'test_mp_secondary.c': ['hash', 'lpm'], + 'test_pcapng.c': ['ethdev', 'net', 'pcapng'], + 'test_pdcp.c': ['eventdev', 'pdcp', 'net', 'timer', 'security'], + 'test_pdump.c': ['pdump'] + sample_packet_forward_deps, + 'test_per_lcore.c': [], + 'test_pflock.c': [], + 'test_pie.c': ['sched'], + 'test_pmd_perf.c': ['ethdev', 'net'] + packet_burst_generator_deps, + 'test_pmd_ring.c': ['net_ring', 'ethdev', 'bus_vdev'], + 'test_pmd_ring_perf.c': ['ethdev', 'net_ring', 'bus_vdev'], + 'test_power.c': ['power'], + 'test_power_cpufreq.c': ['power'], + 'test_power_intel_uncore.c': ['power'], + 'test_power_kvm_vm.c': ['power'], + 'test_prefetch.c': [], + 'test_rand_perf.c': [], + 'test_rawdev.c': ['rawdev', 'bus_vdev'], + 'test_rcu_qsbr.c': ['rcu', 'hash'], + 'test_rcu_qsbr_perf.c': ['rcu', 'hash'], + 'test_reassembly_perf.c': ['net', 'ip_frag'], + 'test_reciprocal_division.c': [], + 'test_reciprocal_division_perf.c': [], + 'test_red.c': ['sched'], + 'test_reorder.c': ['reorder'], +# 'test_resource.c': [], + 'test_rib.c': ['net', 'rib'], + 'test_rib6.c': ['net', 'rib'], + 'test_ring.c': [], + 'test_ring_hts_stress.c': [], + 'test_ring_mpmc_stress.c': [], + 'test_ring_mt_peek_stress.c': [], + 'test_ring_mt_peek_stress_zc.c': [], + 'test_ring_perf.c': [], + 'test_ring_rts_stress.c': [], + 'test_ring_st_peek_stress.c': [], + 'test_ring_st_peek_stress_zc.c': [], + 'test_ring_stress.c': [], + 'test_rwlock.c': [], + 'test_sched.c': ['net', 'sched'], + 'test_security.c': ['net', 'security'], + 'test_security_inline_macsec.c': ['ethdev', 'security'], + 'test_security_inline_proto.c': ['ethdev', 'security', 'eventdev'] + test_cryptodev_deps, + 'test_seqlock.c': [], + 'test_service_cores.c': [], + 'test_spinlock.c': [], + 'test_stack.c': ['stack'], + 'test_stack_perf.c': ['stack'], + 'test_string_fns.c': [], + 'test_table.c': ['table', 'pipeline', 'port'], + 'test_table_acl.c': ['net', 'table', 'pipeline', 'port'], + 'test_table_combined.c': ['table', 'pipeline', 'port'], + 'test_table_pipeline.c': ['pipeline', 'table', 'port'], + 'test_table_ports.c': ['table', 'pipeline', 'port'], + 'test_table_tables.c': ['table', 'pipeline', 'port'], + 'test_tailq.c': [], + 'test_telemetry_data.c': ['telemetry'], + 'test_telemetry_json.c': ['telemetry'], + 'test_thash.c': ['net', 'hash'], + 'test_thash_perf.c': ['hash'], + 'test_threads.c': [], + 'test_ticketlock.c': [], + 'test_timer.c': ['timer'], + 'test_timer_perf.c': ['timer'], + 'test_timer_racecond.c': ['timer'], + 'test_timer_secondary.c': ['timer'], + 'test_trace.c': [], + 'test_trace_perf.c': [], + 'test_trace_register.c': [], + 'test_vdev.c': ['kvargs', 'bus_vdev'], + 'test_version.c': [], +} + +source_file_ext_deps = { + 'test_compressdev.c': ['zlib'], + 'test_pcapng.c': ['pcap'], +} + +def_lib = get_option('default_library') +foreach f, f_deps : source_file_deps + has_deps = true + foreach d : f_deps + if not is_variable(def_lib + '_rte_' + d) + has_deps = false + break + else + # technically we might not need this dep, but adding it is harmless + if d not in deps + deps += d + endif + endif + endforeach + # check for any external dependencies for this file + if source_file_ext_deps.has_key(f) + foreach d: source_file_ext_deps.get(f) + dep = dependency(d, required: false, method: 'pkg-config') + if not dep.found() + message('Skipping test file @0@ due to missing external dependency @1@'.format(f, d)) + has_deps = false + else + ext_deps += dep + endif + endforeach + endif + if has_deps + sources += files(f) endif -endif - -if dpdk_conf.has('RTE_LIB_PDCP') - test_sources += 'test_pdcp.c' - fast_tests += [['pdcp_autotest', false, true]] -endif +endforeach if cc.has_argument('-Wno-format-truncation') cflags += '-Wno-format-truncation' @@ -450,154 +234,13 @@ endif cflags += '-fno-strict-aliasing' # Enable using internal APIs in unit tests -cflags += ['-DALLOW_INTERNAL_API'] - -test_dep_objs = [] -if dpdk_conf.has('RTE_LIB_COMPRESSDEV') - compress_test_dep = dependency('zlib', required: false, method: 'pkg-config') - if compress_test_dep.found() - test_dep_objs += compress_test_dep - test_sources += 'test_compressdev.c' - fast_tests += [['compressdev_autotest', false, true]] - endif -endif - -if dpdk_conf.has('RTE_CRYPTO_SCHEDULER') - driver_test_names += 'cryptodev_scheduler_autotest' - test_deps += 'crypto_scheduler' -endif - -foreach d:test_deps - def_lib = get_option('default_library') - test_dep_objs += get_variable(def_lib + '_rte_' + d) -endforeach - -link_libs = [] -if get_option('default_library') == 'static' - link_libs = dpdk_static_libraries + dpdk_drivers -endif - -dpdk_test = executable('dpdk-test', - test_sources, - link_whole: link_libs, - dependencies: test_dep_objs + ext_deps, - c_args: cflags, - install_rpath: join_paths(get_option('prefix'), - driver_install_path), - install: true) - -has_hugepage = run_command(py3, files('has_hugepage.py'), check: true).stdout().strip() != '0' -message('hugepage availability: @0@'.format(has_hugepage)) - -# some perf tests (eg: memcpy perf autotest)take very long -# to complete, so timeout to 10 minutes -timeout_seconds = 600 -timeout_seconds_fast = 10 - -test_no_huge_args = ['--no-huge', '-m', '2048'] - -foreach arg : fast_tests - test_args = [] - run_test = true - if not has_hugepage - if arg[1] - test_args += test_no_huge_args - else - run_test = false - endif - endif - - if get_option('b_sanitize') == 'address' or get_option('b_sanitize') == 'address,undefined' - if not arg[2] - run_test = false - endif - endif - - if (get_option('default_library') == 'shared' and - arg[0] == 'event_eth_tx_adapter_autotest') - test_args += ['-d', dpdk_drivers_build_dir] - endif - if is_linux - test_args += ['--file-prefix=@0@'.format(arg[0])] - endif - - if run_test - test(arg[0], dpdk_test, - env : ['DPDK_TEST=' + arg[0]], - args : test_args, - timeout : timeout_seconds_fast, - is_parallel : false, - suite : 'fast-tests') - if not is_windows and arg[0] == 'trace_autotest' - test_args += ['--trace=.*'] - test_args += ['--trace-dir=@0@'.format(meson.current_build_dir())] - test(arg[0] + '_with_traces', dpdk_test, - env : ['DPDK_TEST=' + arg[0]], - args : test_args, - timeout : timeout_seconds_fast, - is_parallel : false, - suite : 'fast-tests') - endif - endif -endforeach +cflags += '-DALLOW_INTERNAL_API' -if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY') - test_args = [dpdk_test] - test_args += test_no_huge_args - if get_option('default_library') == 'shared' - test_args += ['-d', dpdk_drivers_build_dir] - endif - if dpdk_conf.has('RTE_CRYPTO_NULL') - test_args += ['--vdev=crypto_null0'] - endif - if dpdk_conf.has('RTE_DMA_SKELETON') - test_args += ['--vdev=dma_skeleton0'] - endif - if dpdk_conf.has('RTE_EVENT_SKELETON') - test_args += ['--vdev=event_skeleton0'] - endif - if dpdk_conf.has('RTE_NET_NULL') - test_args += ['--vdev=net_null0'] - endif - if dpdk_conf.has('RTE_RAW_SKELETON') - test_args += ['--vdev=rawdev_skeleton0'] - endif - test_args += ['-a', '0000:00:00.0'] - test('telemetry_all', find_program('test_telemetry.sh'), - args: test_args, - timeout : timeout_seconds_fast, - is_parallel : false, - suite : 'fast-tests') +# create a symlink in the app/test directory for the binary, for backward compatibility +if not is_windows + custom_target('test_symlink', + output: 'dpdk-test', + command: ['ln', '-sf', '../dpdk-test', '@OUTPUT@'], + build_by_default: true, + install: false) endif - -foreach arg : perf_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'perf-tests') -endforeach - -foreach arg : driver_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'driver-tests') -endforeach - -foreach arg : dump_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'debug-tests') -endforeach - -foreach arg : extra_test_names - test(arg, dpdk_test, - env : ['DPDK_TEST=' + arg], - timeout : timeout_seconds, - is_parallel : false, - suite : 'extra-tests') -endforeach