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