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