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