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