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 'telemetry', 175 'timer' 176] 177 178# Each test is marked with flag true/false 179# to indicate whether it can run in no-huge mode. 180fast_tests = [ 181 ['acl_autotest', true], 182 ['alarm_autotest', false], 183 ['atomic_autotest', false], 184 ['bitops_autotest', true], 185 ['byteorder_autotest', true], 186 ['cmdline_autotest', true], 187 ['common_autotest', true], 188 ['cpuflags_autotest', true], 189 ['cycles_autotest', true], 190 ['debug_autotest', true], 191 ['eal_flags_c_opt_autotest', false], 192 ['eal_flags_master_opt_autotest', false], 193 ['eal_flags_n_opt_autotest', false], 194 ['eal_flags_hpet_autotest', false], 195 ['eal_flags_no_huge_autotest', false], 196 ['eal_flags_w_opt_autotest', false], 197 ['eal_flags_b_opt_autotest', false], 198 ['eal_flags_vdev_opt_autotest', false], 199 ['eal_flags_r_opt_autotest', false], 200 ['eal_flags_mem_autotest', false], 201 ['eal_flags_file_prefix_autotest', false], 202 ['eal_flags_misc_autotest', false], 203 ['eal_fs_autotest', true], 204 ['errno_autotest', true], 205 ['ethdev_link_status', true], 206 ['event_ring_autotest', true], 207 ['fib_autotest', true], 208 ['fib6_autotest', true], 209 ['func_reentrancy_autotest', false], 210 ['flow_classify_autotest', false], 211 ['hash_autotest', true], 212 ['interrupt_autotest', true], 213 ['ipfrag_autotest', false], 214 ['lcores_autotest', true], 215 ['logs_autotest', true], 216 ['lpm_autotest', true], 217 ['lpm6_autotest', true], 218 ['malloc_autotest', false], 219 ['mbuf_autotest', false], 220 ['mcslock_autotest', false], 221 ['memcpy_autotest', true], 222 ['memory_autotest', false], 223 ['mempool_autotest', false], 224 ['memzone_autotest', false], 225 ['meter_autotest', true], 226 ['multiprocess_autotest', false], 227 ['per_lcore_autotest', true], 228 ['prefetch_autotest', true], 229 ['rcu_qsbr_autotest', true], 230 ['red_autotest', true], 231 ['rib_autotest', true], 232 ['rib6_autotest', true], 233 ['ring_autotest', true], 234 ['rwlock_test1_autotest', true], 235 ['rwlock_rda_autotest', true], 236 ['rwlock_rds_wrm_autotest', true], 237 ['rwlock_rde_wro_autotest', true], 238 ['sched_autotest', true], 239 ['security_autotest', false], 240 ['spinlock_autotest', true], 241 ['stack_autotest', false], 242 ['stack_lf_autotest', false], 243 ['string_autotest', true], 244 ['table_autotest', true], 245 ['tailq_autotest', true], 246 ['timer_autotest', false], 247 ['user_delay_us', true], 248 ['version_autotest', true], 249 ['crc_autotest', true], 250 ['delay_us_sleep_autotest', true], 251 ['distributor_autotest', false], 252 ['eventdev_common_autotest', true], 253 ['fbarray_autotest', true], 254 ['hash_readwrite_func_autotest', false], 255 ['ipsec_autotest', true], 256 ['kni_autotest', false], 257 ['kvargs_autotest', true], 258 ['member_autotest', true], 259 ['metrics_autotest', true], 260 ['power_cpufreq_autotest', false], 261 ['power_autotest', true], 262 ['power_kvm_vm_autotest', false], 263 ['reorder_autotest', true], 264 ['service_autotest', true], 265 ['thash_autotest', true], 266 ['trace_autotest', true], 267] 268 269perf_test_names = [ 270 'ring_perf_autotest', 271 'mempool_perf_autotest', 272 'memcpy_perf_autotest', 273 'hash_perf_autotest', 274 'timer_perf_autotest', 275 'reciprocal_division', 276 'reciprocal_division_perf', 277 'lpm_perf_autotest', 278 'rib_slow_autotest', 279 'fib_slow_autotest', 280 'fib_perf_autotest', 281 'red_all', 282 'barrier_autotest', 283 'hash_multiwriter_autotest', 284 'timer_racecond_autotest', 285 'efd_autotest', 286 'hash_functions_autotest', 287 'member_perf_autotest', 288 'efd_perf_autotest', 289 'lpm6_perf_autotest', 290 'rib6_slow_autotest', 291 'fib6_slow_autotest', 292 'fib6_perf_autotest', 293 'rcu_qsbr_perf_autotest', 294 'red_perf', 295 'distributor_perf_autotest', 296 'pmd_perf_autotest', 297 'stack_perf_autotest', 298 'stack_lf_perf_autotest', 299 'rand_perf_autotest', 300 'hash_readwrite_perf_autotest', 301 'hash_readwrite_lf_perf_autotest', 302 'trace_perf_autotest', 303 'ipsec_perf_autotest', 304] 305 306driver_test_names = [ 307 'cryptodev_aesni_mb_autotest', 308 'cryptodev_aesni_gcm_autotest', 309 'cryptodev_dpaa_sec_autotest', 310 'cryptodev_dpaa2_sec_autotest', 311 'cryptodev_null_autotest', 312 'cryptodev_octeontx2_autotest', 313 'cryptodev_openssl_autotest', 314 'cryptodev_openssl_asym_autotest', 315 'cryptodev_qat_autotest', 316 'cryptodev_sw_armv8_autotest', 317 'cryptodev_sw_kasumi_autotest', 318 'cryptodev_sw_mvsam_autotest', 319 'cryptodev_sw_snow3g_autotest', 320 'cryptodev_sw_zuc_autotest', 321 'eventdev_selftest_octeontx', 322 'eventdev_selftest_sw', 323 'rawdev_autotest', 324] 325 326dump_test_names = [ 327 'dump_struct_sizes', 328 'dump_mempool', 329 'dump_malloc_stats', 330 'dump_devargs', 331 'dump_log_types', 332 'dump_ring', 333 'dump_physmem', 334 'dump_memzone', 335] 336 337# The following linkages are an exception to allow running the 338# unit tests without requiring that the developer install the 339# DPDK libraries. Explicit linkage of drivers (plugin libraries) 340# in applications should not be used. 341if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL') 342 test_deps += 'mempool_ring' 343endif 344if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL') 345 test_deps += 'mempool_stack' 346endif 347if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD') 348 test_deps += 'pmd_skeleton_event' 349endif 350if dpdk_conf.has('RTE_LIBRTE_TELEMETRY') 351 test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] 352 fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]] 353endif 354 355# The following linkages of drivers are required because 356# they are used via a driver-specific API. 357if dpdk_conf.has('RTE_LIBRTE_BOND_PMD') 358 test_deps += 'pmd_bond' 359 test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] 360 driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] 361 if dpdk_conf.has('RTE_LIBRTE_RING_PMD') 362 test_sources += 'test_link_bonding_mode4.c' 363 driver_test_names += 'link_bonding_mode4_autotest' 364 endif 365endif 366if dpdk_conf.has('RTE_LIBRTE_RING_PMD') 367 test_deps += 'pmd_ring' 368 test_sources += 'test_pmd_ring_perf.c' 369 test_sources += 'test_pmd_ring.c' 370 test_sources += 'test_event_eth_tx_adapter.c' 371 test_sources += 'test_bitratestats.c' 372 test_sources += 'test_latencystats.c' 373 test_sources += 'sample_packet_forward.c' 374 test_sources += 'test_pdump.c' 375 fast_tests += [['ring_pmd_autotest', true]] 376 perf_test_names += 'ring_pmd_perf_autotest' 377 fast_tests += [['event_eth_tx_adapter_autotest', false]] 378 fast_tests += [['bitratestats_autotest', true]] 379 fast_tests += [['latencystats_autotest', true]] 380 fast_tests += [['pdump_autotest', true]] 381endif 382 383if dpdk_conf.has('RTE_LIBRTE_POWER') 384 test_deps += 'power' 385endif 386if dpdk_conf.has('RTE_LIBRTE_KNI') 387 test_deps += 'kni' 388endif 389if dpdk_conf.has('RTE_LIBRTE_PDUMP') 390 test_deps += 'pdump' 391endif 392 393if cc.has_argument('-Wno-format-truncation') 394 cflags += '-Wno-format-truncation' 395endif 396 397# specify -D_GNU_SOURCE unconditionally 398cflags += '-D_GNU_SOURCE' 399# Strict-aliasing rules are violated by uint8_t[] to context size casts. 400cflags += '-fno-strict-aliasing' 401 402# Enable using internal APIs in unit tests 403cflags += ['-DALLOW_INTERNAL_API'] 404 405test_dep_objs = [] 406if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV') 407 compress_test_dep = dependency('zlib', required: false) 408 if compress_test_dep.found() 409 test_dep_objs += compress_test_dep 410 test_sources += 'test_compressdev.c' 411 test_deps += 'compressdev' 412 fast_tests += [['compressdev_autotest', false]] 413 endif 414endif 415 416if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER') 417 driver_test_names += 'cryptodev_scheduler_autotest' 418 test_deps += 'pmd_crypto_scheduler' 419endif 420 421foreach d:test_deps 422 def_lib = get_option('default_library') 423 test_dep_objs += get_variable(def_lib + '_rte_' + d) 424endforeach 425test_dep_objs += cc.find_library('execinfo', required: false) 426 427link_libs = [] 428if get_option('default_library') == 'static' 429 link_libs = dpdk_static_libraries + dpdk_drivers 430endif 431 432dpdk_test = executable('dpdk-test', 433 test_sources, 434 link_whole: link_libs, 435 dependencies: test_dep_objs, 436 c_args: cflags, 437 install_rpath: join_paths(get_option('prefix'), 438 driver_install_path), 439 install: true) 440 441has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0' 442message('hugepage availability: @0@'.format(has_hugepage)) 443 444# some perf tests (eg: memcpy perf autotest)take very long 445# to complete, so timeout to 10 minutes 446timeout_seconds = 600 447timeout_seconds_fast = 10 448 449get_coremask = find_program('get-coremask.sh') 450num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip() 451 452default_test_args = [num_cores_arg] 453 454foreach arg : fast_tests 455 test_args = default_test_args 456 run_test = true 457 if not has_hugepage 458 if arg[1] 459 test_args += ['--no-huge', '-m', '2048'] 460 else 461 run_test = false 462 endif 463 endif 464 465 if (get_option('default_library') == 'shared' and 466 arg[0] == 'event_eth_tx_adapter_autotest') 467 foreach drv:dpdk_drivers 468 test_args += ['-d', drv.full_path().split('.a')[0] + '.so'] 469 endforeach 470 endif 471 if is_linux 472 test_args += ['--file-prefix=@0@'.format(arg[0])] 473 endif 474 475 if run_test 476 test(arg[0], dpdk_test, 477 env : ['DPDK_TEST=' + arg[0]], 478 args : test_args, 479 timeout : timeout_seconds_fast, 480 is_parallel : false, 481 suite : 'fast-tests') 482 endif 483endforeach 484 485foreach arg : perf_test_names 486 test(arg, dpdk_test, 487 env : ['DPDK_TEST=' + arg], 488 args : default_test_args, 489 timeout : timeout_seconds, 490 is_parallel : false, 491 suite : 'perf-tests') 492endforeach 493 494foreach arg : driver_test_names 495 test(arg, dpdk_test, 496 env : ['DPDK_TEST=' + arg], 497 args : default_test_args, 498 timeout : timeout_seconds, 499 is_parallel : false, 500 suite : 'driver-tests') 501endforeach 502 503foreach arg : dump_test_names 504 test(arg, dpdk_test, 505 env : ['DPDK_TEST=' + arg], 506 args : default_test_args, 507 timeout : timeout_seconds, 508 is_parallel : false, 509 suite : 'debug-tests') 510endforeach 511