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