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 399test_dep_objs = [] 400if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV') 401 compress_test_dep = dependency('zlib', required: false) 402 if compress_test_dep.found() 403 test_dep_objs += compress_test_dep 404 test_sources += 'test_compressdev.c' 405 test_deps += 'compressdev' 406 fast_tests += [['compressdev_autotest', false]] 407 endif 408endif 409 410if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER') 411 driver_test_names += 'cryptodev_scheduler_autotest' 412endif 413 414foreach d:test_deps 415 def_lib = get_option('default_library') 416 test_dep_objs += get_variable(def_lib + '_rte_' + d) 417endforeach 418test_dep_objs += cc.find_library('execinfo', required: false) 419 420link_libs = [] 421if get_option('default_library') == 'static' 422 link_libs = dpdk_static_libraries + dpdk_drivers 423endif 424 425dpdk_test = executable('dpdk-test', 426 test_sources, 427 link_whole: link_libs, 428 dependencies: test_dep_objs, 429 c_args: cflags, 430 install_rpath: join_paths(get_option('prefix'), 431 driver_install_path), 432 install: true) 433 434has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0' 435message('hugepage availability: @0@'.format(has_hugepage)) 436 437# some perf tests (eg: memcpy perf autotest)take very long 438# to complete, so timeout to 10 minutes 439timeout_seconds = 600 440timeout_seconds_fast = 10 441 442get_coremask = find_program('get-coremask.sh') 443num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip() 444 445default_test_args = [num_cores_arg] 446 447foreach arg : fast_tests 448 test_args = default_test_args 449 run_test = true 450 if not has_hugepage 451 if arg[1] 452 test_args += ['--no-huge', '-m', '2048'] 453 else 454 run_test = false 455 endif 456 endif 457 458 if (get_option('default_library') == 'shared' and 459 arg[0] == 'event_eth_tx_adapter_autotest') 460 foreach drv:dpdk_drivers 461 test_args += ['-d', drv.full_path().split('.a')[0] + '.so'] 462 endforeach 463 endif 464 if is_linux 465 test_args += ['--file-prefix=@0@'.format(arg[0])] 466 endif 467 468 if run_test 469 test(arg[0], dpdk_test, 470 env : ['DPDK_TEST=' + arg[0]], 471 args : test_args, 472 timeout : timeout_seconds_fast, 473 is_parallel : false, 474 suite : 'fast-tests') 475 endif 476endforeach 477 478foreach arg : perf_test_names 479 test(arg, dpdk_test, 480 env : ['DPDK_TEST=' + arg], 481 args : default_test_args, 482 timeout : timeout_seconds, 483 is_parallel : false, 484 suite : 'perf-tests') 485endforeach 486 487foreach arg : driver_test_names 488 test(arg, dpdk_test, 489 env : ['DPDK_TEST=' + arg], 490 args : default_test_args, 491 timeout : timeout_seconds, 492 is_parallel : false, 493 suite : 'driver-tests') 494endforeach 495 496foreach arg : dump_test_names 497 test(arg, dpdk_test, 498 env : ['DPDK_TEST=' + arg], 499 args : default_test_args, 500 timeout : timeout_seconds, 501 is_parallel : false, 502 suite : 'debug-tests') 503endforeach 504