1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright(c) 2017 Intel Corporation 3 4if not get_option('tests') 5 subdir_done() 6endif 7 8test_sources = files('commands.c', 9 'packet_burst_generator.c', 10 'test.c', 11 'test_acl.c', 12 'test_alarm.c', 13 'test_atomic.c', 14 'test_barrier.c', 15 'test_bitops.c', 16 'test_bpf.c', 17 'test_byteorder.c', 18 'test_cmdline.c', 19 'test_cmdline_cirbuf.c', 20 'test_cmdline_etheraddr.c', 21 'test_cmdline_ipaddr.c', 22 'test_cmdline_lib.c', 23 'test_cmdline_num.c', 24 'test_cmdline_portlist.c', 25 'test_cmdline_string.c', 26 'test_common.c', 27 'test_cpuflags.c', 28 'test_crc.c', 29 'test_cryptodev.c', 30 'test_cryptodev_asym.c', 31 'test_cryptodev_blockcipher.c', 32 'test_cryptodev_security_pdcp.c', 33 'test_cycles.c', 34 'test_debug.c', 35 'test_distributor.c', 36 'test_distributor_perf.c', 37 'test_eal_flags.c', 38 'test_eal_fs.c', 39 'test_efd.c', 40 'test_efd_perf.c', 41 'test_errno.c', 42 'test_event_crypto_adapter.c', 43 'test_event_eth_rx_adapter.c', 44 'test_event_ring.c', 45 'test_event_timer_adapter.c', 46 'test_eventdev.c', 47 'test_external_mem.c', 48 'test_fbarray.c', 49 'test_fib.c', 50 'test_fib_perf.c', 51 'test_fib6.c', 52 'test_fib6_perf.c', 53 'test_func_reentrancy.c', 54 'test_flow_classify.c', 55 'test_graph.c', 56 'test_graph_perf.c', 57 'test_hash.c', 58 'test_hash_functions.c', 59 'test_hash_multiwriter.c', 60 'test_hash_readwrite.c', 61 'test_hash_perf.c', 62 'test_hash_readwrite_lf_perf.c', 63 'test_interrupts.c', 64 'test_ipfrag.c', 65 'test_ipsec.c', 66 'test_ipsec_sad.c', 67 'test_ipsec_perf.c', 68 'test_kni.c', 69 'test_kvargs.c', 70 'test_logs.c', 71 'test_lpm.c', 72 'test_lpm6.c', 73 'test_lpm6_perf.c', 74 'test_lpm_perf.c', 75 'test_malloc.c', 76 'test_mbuf.c', 77 'test_member.c', 78 'test_member_perf.c', 79 'test_memcpy.c', 80 'test_memcpy_perf.c', 81 'test_memory.c', 82 'test_mempool.c', 83 'test_mempool_perf.c', 84 'test_memzone.c', 85 'test_meter.c', 86 'test_metrics.c', 87 'test_mcslock.c', 88 'test_mp_secondary.c', 89 'test_per_lcore.c', 90 'test_pmd_perf.c', 91 'test_power.c', 92 'test_power_cpufreq.c', 93 'test_power_kvm_vm.c', 94 'test_prefetch.c', 95 'test_rand_perf.c', 96 'test_rawdev.c', 97 'test_rcu_qsbr.c', 98 'test_rcu_qsbr_perf.c', 99 'test_reciprocal_division.c', 100 'test_reciprocal_division_perf.c', 101 'test_red.c', 102 'test_reorder.c', 103 'test_rib.c', 104 'test_rib6.c', 105 'test_ring.c', 106 'test_ring_mpmc_stress.c', 107 'test_ring_hts_stress.c', 108 'test_ring_peek_stress.c', 109 'test_ring_perf.c', 110 'test_ring_rts_stress.c', 111 'test_ring_stress.c', 112 'test_rwlock.c', 113 'test_sched.c', 114 'test_security.c', 115 'test_service_cores.c', 116 'test_spinlock.c', 117 'test_stack.c', 118 'test_stack_perf.c', 119 'test_string_fns.c', 120 'test_table.c', 121 'test_table_acl.c', 122 'test_table_combined.c', 123 'test_table_pipeline.c', 124 'test_table_ports.c', 125 'test_table_tables.c', 126 'test_tailq.c', 127 'test_thash.c', 128 'test_timer.c', 129 'test_timer_perf.c', 130 'test_timer_racecond.c', 131 'test_timer_secondary.c', 132 'test_ticketlock.c', 133 'test_trace.c', 134 'test_trace_register.c', 135 'test_trace_perf.c', 136 'test_version.c', 137 'virtual_pmd.c' 138) 139 140test_deps = ['acl', 141 'bus_pci', 142 'bus_vdev', 143 'bitratestats', 144 'bpf', 145 'cfgfile', 146 'cmdline', 147 'cryptodev', 148 'distributor', 149 'efd', 150 'ethdev', 151 'eventdev', 152 'fib', 153 'flow_classify', 154 'graph', 155 'hash', 156 'ipsec', 157 'latencystats', 158 'lpm', 159 'member', 160 'metrics', 161 'node', 162 'pipeline', 163 'port', 164 'rawdev', 165 'rcu', 166 'reorder', 167 'rib', 168 'ring', 169 'security', 170 'stack', 171 'timer' 172] 173 174# Each test is marked with flag true/false 175# to indicate whether it can run in no-huge mode. 176fast_tests = [ 177 ['acl_autotest', true], 178 ['alarm_autotest', false], 179 ['atomic_autotest', false], 180 ['bitops_autotest', true], 181 ['byteorder_autotest', true], 182 ['cmdline_autotest', true], 183 ['common_autotest', true], 184 ['cpuflags_autotest', true], 185 ['cycles_autotest', true], 186 ['debug_autotest', true], 187 ['eal_flags_c_opt_autotest', false], 188 ['eal_flags_master_opt_autotest', false], 189 ['eal_flags_n_opt_autotest', false], 190 ['eal_flags_hpet_autotest', false], 191 ['eal_flags_no_huge_autotest', false], 192 ['eal_flags_w_opt_autotest', false], 193 ['eal_flags_b_opt_autotest', false], 194 ['eal_flags_vdev_opt_autotest', false], 195 ['eal_flags_r_opt_autotest', false], 196 ['eal_flags_mem_autotest', false], 197 ['eal_flags_file_prefix_autotest', false], 198 ['eal_flags_misc_autotest', false], 199 ['eal_fs_autotest', true], 200 ['errno_autotest', true], 201 ['event_ring_autotest', true], 202 ['fib_autotest', true], 203 ['fib6_autotest', true], 204 ['func_reentrancy_autotest', false], 205 ['flow_classify_autotest', false], 206 ['hash_autotest', true], 207 ['interrupt_autotest', true], 208 ['ipfrag_autotest', false], 209 ['logs_autotest', true], 210 ['lpm_autotest', true], 211 ['lpm6_autotest', true], 212 ['malloc_autotest', false], 213 ['mbuf_autotest', false], 214 ['mcslock_autotest', false], 215 ['memcpy_autotest', true], 216 ['memory_autotest', false], 217 ['mempool_autotest', false], 218 ['memzone_autotest', false], 219 ['meter_autotest', true], 220 ['multiprocess_autotest', false], 221 ['per_lcore_autotest', true], 222 ['prefetch_autotest', true], 223 ['rcu_qsbr_autotest', true], 224 ['red_autotest', true], 225 ['rib_autotest', true], 226 ['rib6_autotest', true], 227 ['ring_autotest', true], 228 ['rwlock_test1_autotest', true], 229 ['rwlock_rda_autotest', true], 230 ['rwlock_rds_wrm_autotest', true], 231 ['rwlock_rde_wro_autotest', true], 232 ['sched_autotest', true], 233 ['security_autotest', false], 234 ['spinlock_autotest', true], 235 ['stack_autotest', false], 236 ['stack_lf_autotest', false], 237 ['string_autotest', true], 238 ['table_autotest', true], 239 ['tailq_autotest', true], 240 ['timer_autotest', false], 241 ['user_delay_us', true], 242 ['version_autotest', true], 243 ['crc_autotest', true], 244 ['delay_us_sleep_autotest', true], 245 ['distributor_autotest', false], 246 ['eventdev_common_autotest', true], 247 ['fbarray_autotest', true], 248 ['hash_readwrite_func_autotest', false], 249 ['ipsec_autotest', true], 250 ['kni_autotest', false], 251 ['kvargs_autotest', true], 252 ['member_autotest', true], 253 ['metrics_autotest', true], 254 ['power_cpufreq_autotest', false], 255 ['power_autotest', true], 256 ['power_kvm_vm_autotest', false], 257 ['reorder_autotest', true], 258 ['service_autotest', true], 259 ['thash_autotest', true], 260 ['trace_autotest', true], 261] 262 263perf_test_names = [ 264 'ring_perf_autotest', 265 'mempool_perf_autotest', 266 'memcpy_perf_autotest', 267 'hash_perf_autotest', 268 'timer_perf_autotest', 269 'reciprocal_division', 270 'reciprocal_division_perf', 271 'lpm_perf_autotest', 272 'rib_slow_autotest', 273 'fib_slow_autotest', 274 'fib_perf_autotest', 275 'red_all', 276 'barrier_autotest', 277 'hash_multiwriter_autotest', 278 'timer_racecond_autotest', 279 'efd_autotest', 280 'hash_functions_autotest', 281 'member_perf_autotest', 282 'efd_perf_autotest', 283 'lpm6_perf_autotest', 284 'rib6_slow_autotest', 285 'fib6_slow_autotest', 286 'fib6_perf_autotest', 287 'rcu_qsbr_perf_autotest', 288 'red_perf', 289 'distributor_perf_autotest', 290 'pmd_perf_autotest', 291 'stack_perf_autotest', 292 'stack_lf_perf_autotest', 293 'rand_perf_autotest', 294 'hash_readwrite_perf_autotest', 295 'hash_readwrite_lf_perf_autotest', 296 'trace_perf_autotest', 297 'ipsec_perf_autotest', 298] 299 300driver_test_names = [ 301 'cryptodev_aesni_mb_autotest', 302 'cryptodev_aesni_gcm_autotest', 303 'cryptodev_dpaa_sec_autotest', 304 'cryptodev_dpaa2_sec_autotest', 305 'cryptodev_null_autotest', 306 'cryptodev_octeontx2_autotest', 307 'cryptodev_openssl_autotest', 308 'cryptodev_openssl_asym_autotest', 309 'cryptodev_qat_autotest', 310 'cryptodev_sw_armv8_autotest', 311 'cryptodev_sw_kasumi_autotest', 312 'cryptodev_sw_mvsam_autotest', 313 'cryptodev_sw_snow3g_autotest', 314 'cryptodev_sw_zuc_autotest', 315 'eventdev_selftest_octeontx', 316 'eventdev_selftest_sw', 317 'rawdev_autotest', 318] 319 320dump_test_names = [ 321 'dump_struct_sizes', 322 'dump_mempool', 323 'dump_malloc_stats', 324 'dump_devargs', 325 'dump_log_types', 326 'dump_ring', 327 'dump_physmem', 328 'dump_memzone', 329] 330 331# The following linkages are an exception to allow running the 332# unit tests without requiring that the developer install the 333# DPDK libraries. Explicit linkage of drivers (plugin libraries) 334# in applications should not be used. 335if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL') 336 test_deps += 'mempool_ring' 337endif 338if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL') 339 test_deps += 'mempool_stack' 340endif 341if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD') 342 test_deps += 'pmd_skeleton_event' 343endif 344if dpdk_conf.has('RTE_LIBRTE_TELEMETRY') 345 test_sources += 'test_telemetry_json.c' 346 fast_tests += [['telemetry_json_autotest', true]] 347endif 348 349# The following linkages of drivers are required because 350# they are used via a driver-specific API. 351if dpdk_conf.has('RTE_LIBRTE_BOND_PMD') 352 test_deps += 'pmd_bond' 353 test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] 354 driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] 355endif 356if dpdk_conf.has('RTE_LIBRTE_RING_PMD') 357 test_deps += 'pmd_ring' 358 test_sources += 'test_pmd_ring_perf.c' 359 test_sources += 'test_pmd_ring.c' 360 test_sources += 'test_event_eth_tx_adapter.c' 361 test_sources += 'test_bitratestats.c' 362 test_sources += 'test_latencystats.c' 363 test_sources += 'test_link_bonding_mode4.c' 364 test_sources += 'sample_packet_forward.c' 365 test_sources += 'test_pdump.c' 366 fast_tests += [['ring_pmd_autotest', true]] 367 perf_test_names += 'ring_pmd_perf_autotest' 368 fast_tests += [['event_eth_tx_adapter_autotest', false]] 369 fast_tests += [['bitratestats_autotest', true]] 370 fast_tests += [['latencystats_autotest', true]] 371 driver_test_names += 'link_bonding_mode4_autotest' 372 fast_tests += [['pdump_autotest', true]] 373endif 374 375if dpdk_conf.has('RTE_LIBRTE_POWER') 376 test_deps += 'power' 377endif 378if dpdk_conf.has('RTE_LIBRTE_KNI') 379 test_deps += 'kni' 380endif 381if dpdk_conf.has('RTE_LIBRTE_PDUMP') 382 test_deps += 'pdump' 383endif 384 385if cc.has_argument('-Wno-format-truncation') 386 cflags += '-Wno-format-truncation' 387endif 388 389# specify -D_GNU_SOURCE unconditionally 390cflags += '-D_GNU_SOURCE' 391# Strict-aliasing rules are violated by uint8_t[] to context size casts. 392cflags += '-fno-strict-aliasing' 393 394test_dep_objs = [] 395if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV') 396 compress_test_dep = dependency('zlib', required: false) 397 if compress_test_dep.found() 398 test_dep_objs += compress_test_dep 399 test_sources += 'test_compressdev.c' 400 test_deps += 'compressdev' 401 fast_tests += [['compressdev_autotest', false]] 402 endif 403endif 404 405if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER') 406 driver_test_names += 'cryptodev_scheduler_autotest' 407endif 408 409foreach d:test_deps 410 def_lib = get_option('default_library') 411 test_dep_objs += get_variable(def_lib + '_rte_' + d) 412endforeach 413test_dep_objs += cc.find_library('execinfo', required: false) 414 415link_libs = [] 416link_nodes = [] 417if get_option('default_library') == 'static' 418 link_libs = dpdk_drivers 419 link_nodes = dpdk_graph_nodes 420endif 421 422dpdk_test = executable('dpdk-test', 423 test_sources, 424 link_whole: link_libs + link_nodes, 425 dependencies: test_dep_objs, 426 c_args: cflags, 427 install_rpath: driver_install_path, 428 install: true) 429 430has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0' 431message('hugepage availability: @0@'.format(has_hugepage)) 432 433# some perf tests (eg: memcpy perf autotest)take very long 434# to complete, so timeout to 10 minutes 435timeout_seconds = 600 436timeout_seconds_fast = 10 437 438get_coremask = find_program('get-coremask.sh') 439num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip() 440 441default_test_args = [num_cores_arg] 442 443foreach arg : fast_tests 444 test_args = default_test_args 445 run_test = true 446 if not has_hugepage 447 if arg[1] 448 test_args += ['--no-huge', '-m', '2048'] 449 else 450 run_test = false 451 endif 452 endif 453 454 if (get_option('default_library') == 'shared' and 455 arg[0] == 'event_eth_tx_adapter_autotest') 456 foreach drv:dpdk_drivers 457 test_args += ['-d', drv.full_path().split('.a')[0] + '.so'] 458 endforeach 459 endif 460 if is_linux 461 test_args += ['--file-prefix=@0@'.format(arg[0])] 462 endif 463 464 if run_test 465 test(arg[0], dpdk_test, 466 env : ['DPDK_TEST=' + arg[0]], 467 args : test_args, 468 timeout : timeout_seconds_fast, 469 is_parallel : false, 470 suite : 'fast-tests') 471 endif 472endforeach 473 474foreach arg : perf_test_names 475 test(arg, dpdk_test, 476 env : ['DPDK_TEST=' + arg], 477 args : default_test_args, 478 timeout : timeout_seconds, 479 is_parallel : false, 480 suite : 'perf-tests') 481endforeach 482 483foreach arg : driver_test_names 484 test(arg, dpdk_test, 485 env : ['DPDK_TEST=' + arg], 486 args : default_test_args, 487 timeout : timeout_seconds, 488 is_parallel : false, 489 suite : 'driver-tests') 490endforeach 491 492foreach arg : dump_test_names 493 test(arg, dpdk_test, 494 env : ['DPDK_TEST=' + arg], 495 args : default_test_args, 496 timeout : timeout_seconds, 497 is_parallel : false, 498 suite : 'debug-tests') 499endforeach 500