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