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 ['bpf_autotest', true], 204 ['bpf_convert_autotest', true], 205 ['bitops_autotest', true], 206 ['byteorder_autotest', true], 207 ['cksum_autotest', true], 208 ['cmdline_autotest', true], 209 ['common_autotest', true], 210 ['cpuflags_autotest', true], 211 ['debug_autotest', true], 212 ['devargs_autotest', true], 213 ['eal_flags_c_opt_autotest', false], 214 ['eal_flags_main_opt_autotest', false], 215 ['eal_flags_n_opt_autotest', false], 216 ['eal_flags_hpet_autotest', false], 217 ['eal_flags_no_huge_autotest', false], 218 ['eal_flags_a_opt_autotest', false], 219 ['eal_flags_b_opt_autotest', false], 220 ['eal_flags_vdev_opt_autotest', false], 221 ['eal_flags_r_opt_autotest', false], 222 ['eal_flags_mem_autotest', false], 223 ['eal_flags_file_prefix_autotest', false], 224 ['eal_flags_misc_autotest', false], 225 ['eal_fs_autotest', true], 226 ['errno_autotest', true], 227 ['ethdev_link_status', true], 228 ['event_ring_autotest', true], 229 ['fib_autotest', true], 230 ['fib6_autotest', true], 231 ['func_reentrancy_autotest', false], 232 ['flow_classify_autotest', false], 233 ['hash_autotest', true], 234 ['interrupt_autotest', true], 235 ['ipfrag_autotest', false], 236 ['lcores_autotest', true], 237 ['logs_autotest', true], 238 ['lpm_autotest', true], 239 ['lpm6_autotest', true], 240 ['malloc_autotest', false], 241 ['mbuf_autotest', false], 242 ['mcslock_autotest', false], 243 ['memcpy_autotest', true], 244 ['memory_autotest', false], 245 ['mempool_autotest', false], 246 ['memzone_autotest', false], 247 ['meter_autotest', true], 248 ['multiprocess_autotest', false], 249 ['per_lcore_autotest', true], 250 ['pflock_autotest', true], 251 ['prefetch_autotest', true], 252 ['rcu_qsbr_autotest', true], 253 ['red_autotest', true], 254 ['pie_autotest', true], 255 ['rib_autotest', true], 256 ['rib6_autotest', true], 257 ['ring_autotest', true], 258 ['rwlock_test1_autotest', true], 259 ['rwlock_rda_autotest', true], 260 ['rwlock_rds_wrm_autotest', true], 261 ['rwlock_rde_wro_autotest', true], 262 ['sched_autotest', true], 263 ['security_autotest', false], 264 ['spinlock_autotest', true], 265 ['stack_autotest', false], 266 ['stack_lf_autotest', false], 267 ['string_autotest', true], 268 ['table_autotest', true], 269 ['tailq_autotest', true], 270 ['ticketlock_autotest', true], 271 ['timer_autotest', false], 272 ['user_delay_us', true], 273 ['version_autotest', true], 274 ['crc_autotest', true], 275 ['distributor_autotest', false], 276 ['eventdev_common_autotest', true], 277 ['fbarray_autotest', true], 278 ['hash_readwrite_func_autotest', false], 279 ['ipsec_autotest', true], 280 ['kni_autotest', false], 281 ['kvargs_autotest', true], 282 ['member_autotest', true], 283 ['metrics_autotest', true], 284 ['power_cpufreq_autotest', false], 285 ['power_autotest', true], 286 ['power_kvm_vm_autotest', false], 287 ['reorder_autotest', true], 288 ['service_autotest', true], 289 ['thash_autotest', true], 290 ['trace_autotest', true], 291] 292 293perf_test_names = [ 294 'ring_perf_autotest', 295 'mempool_perf_autotest', 296 'memcpy_perf_autotest', 297 'hash_perf_autotest', 298 'timer_perf_autotest', 299 'reciprocal_division', 300 'reciprocal_division_perf', 301 'lpm_perf_autotest', 302 'rib_slow_autotest', 303 'fib_slow_autotest', 304 'fib_perf_autotest', 305 'red_all', 306 'pie_all', 307 'barrier_autotest', 308 'hash_multiwriter_autotest', 309 'timer_racecond_autotest', 310 'efd_autotest', 311 'hash_functions_autotest', 312 'member_perf_autotest', 313 'efd_perf_autotest', 314 'lpm6_perf_autotest', 315 'rib6_slow_autotest', 316 'fib6_slow_autotest', 317 'fib6_perf_autotest', 318 'rcu_qsbr_perf_autotest', 319 'red_perf', 320 'pie_perf', 321 'distributor_perf_autotest', 322 'pmd_perf_autotest', 323 'stack_perf_autotest', 324 'stack_lf_perf_autotest', 325 'rand_perf_autotest', 326 'hash_readwrite_perf_autotest', 327 'hash_readwrite_lf_perf_autotest', 328 'trace_perf_autotest', 329 'ipsec_perf_autotest', 330 'thash_perf_autotest', 331] 332 333driver_test_names = [ 334 'cryptodev_aesni_mb_autotest', 335 'cryptodev_aesni_gcm_autotest', 336 'cryptodev_cn9k_autotest', 337 'cryptodev_cn10k_autotest', 338 'cryptodev_dpaa_sec_autotest', 339 'cryptodev_dpaa2_sec_autotest', 340 'cryptodev_null_autotest', 341 'cryptodev_octeontx2_autotest', 342 'cryptodev_openssl_autotest', 343 'cryptodev_openssl_asym_autotest', 344 'cryptodev_qat_autotest', 345 'cryptodev_sw_armv8_autotest', 346 'cryptodev_sw_kasumi_autotest', 347 'cryptodev_sw_mvsam_autotest', 348 'cryptodev_sw_snow3g_autotest', 349 'cryptodev_sw_zuc_autotest', 350 'dmadev_autotest', 351 'eventdev_selftest_octeontx', 352 'eventdev_selftest_sw', 353 'rawdev_autotest', 354] 355 356dump_test_names = [ 357 'dump_struct_sizes', 358 'dump_mempool', 359 'dump_malloc_stats', 360 'dump_devargs', 361 'dump_log_types', 362 'dump_ring', 363 'dump_physmem', 364 'dump_memzone', 365] 366 367# The following linkages are an exception to allow running the 368# unit tests without requiring that the developer install the 369# DPDK libraries. Explicit linkage of drivers (plugin libraries) 370# in applications should not be used. 371if dpdk_conf.has('RTE_MEMPOOL_RING') 372 test_deps += 'mempool_ring' 373endif 374if dpdk_conf.has('RTE_MEMPOOL_STACK') 375 test_deps += 'mempool_stack' 376endif 377if dpdk_conf.has('RTE_EVENT_SKELETON') 378 test_deps += 'event_skeleton' 379endif 380if dpdk_conf.has('RTE_LIB_TELEMETRY') 381 test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] 382 fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]] 383endif 384 385# The following linkages of drivers are required because 386# they are used via a driver-specific API. 387if dpdk_conf.has('RTE_NET_BOND') 388 test_deps += 'net_bond' 389 test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] 390 driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] 391 if dpdk_conf.has('RTE_NET_RING') 392 test_sources += 'test_link_bonding_mode4.c' 393 driver_test_names += 'link_bonding_mode4_autotest' 394 endif 395endif 396if dpdk_conf.has('RTE_NET_RING') 397 test_deps += 'net_ring' 398 test_sources += 'test_pmd_ring_perf.c' 399 test_sources += 'test_pmd_ring.c' 400 test_sources += 'test_event_eth_tx_adapter.c' 401 test_sources += 'test_bitratestats.c' 402 test_sources += 'test_latencystats.c' 403 test_sources += 'sample_packet_forward.c' 404 test_sources += 'test_pdump.c' 405 fast_tests += [['ring_pmd_autotest', true]] 406 perf_test_names += 'ring_pmd_perf_autotest' 407 fast_tests += [['event_eth_tx_adapter_autotest', false]] 408 fast_tests += [['bitratestats_autotest', true]] 409 fast_tests += [['latencystats_autotest', true]] 410 fast_tests += [['pdump_autotest', true]] 411endif 412 413if dpdk_conf.has('RTE_PORT_PCAP') 414 test_sources += 'test_pcapng.c' 415endif 416 417if dpdk_conf.has('RTE_LIB_POWER') 418 test_deps += 'power' 419endif 420if dpdk_conf.has('RTE_LIB_KNI') 421 test_deps += 'kni' 422endif 423if dpdk_conf.has('RTE_LIB_PDUMP') 424 test_deps += 'pdump' 425endif 426 427if cc.has_argument('-Wno-format-truncation') 428 cflags += '-Wno-format-truncation' 429endif 430 431# Strict-aliasing rules are violated by uint8_t[] to context size casts. 432cflags += '-fno-strict-aliasing' 433 434# Enable using internal APIs in unit tests 435cflags += ['-DALLOW_INTERNAL_API'] 436 437test_dep_objs = [] 438if dpdk_conf.has('RTE_LIB_COMPRESSDEV') 439 compress_test_dep = dependency('zlib', required: false, method: 'pkg-config') 440 if compress_test_dep.found() 441 test_dep_objs += compress_test_dep 442 test_sources += 'test_compressdev.c' 443 test_deps += 'compressdev' 444 fast_tests += [['compressdev_autotest', false]] 445 endif 446endif 447 448if dpdk_conf.has('RTE_CRYPTO_SCHEDULER') 449 driver_test_names += 'cryptodev_scheduler_autotest' 450 test_deps += 'crypto_scheduler' 451endif 452 453foreach d:test_deps 454 def_lib = get_option('default_library') 455 test_dep_objs += get_variable(def_lib + '_rte_' + d) 456endforeach 457 458link_libs = [] 459if get_option('default_library') == 'static' 460 link_libs = dpdk_static_libraries + dpdk_drivers 461endif 462 463dpdk_test = executable('dpdk-test', 464 test_sources, 465 link_whole: link_libs, 466 dependencies: test_dep_objs, 467 c_args: cflags, 468 install_rpath: join_paths(get_option('prefix'), 469 driver_install_path), 470 install: true) 471 472has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0' 473message('hugepage availability: @0@'.format(has_hugepage)) 474 475# some perf tests (eg: memcpy perf autotest)take very long 476# to complete, so timeout to 10 minutes 477timeout_seconds = 600 478timeout_seconds_fast = 10 479 480foreach arg : fast_tests 481 test_args = [] 482 run_test = true 483 if not has_hugepage 484 if arg[1] 485 test_args += ['--no-huge', '-m', '2048'] 486 else 487 run_test = false 488 endif 489 endif 490 491 if (get_option('default_library') == 'shared' and 492 arg[0] == 'event_eth_tx_adapter_autotest') 493 foreach drv:dpdk_drivers 494 test_args += ['-d', drv.full_path().split('.a')[0] + '.so'] 495 endforeach 496 endif 497 if is_linux 498 test_args += ['--file-prefix=@0@'.format(arg[0])] 499 endif 500 501 if run_test 502 test(arg[0], dpdk_test, 503 env : ['DPDK_TEST=' + arg[0]], 504 args : test_args, 505 timeout : timeout_seconds_fast, 506 is_parallel : false, 507 suite : 'fast-tests') 508 endif 509endforeach 510 511foreach arg : perf_test_names 512 test(arg, dpdk_test, 513 env : ['DPDK_TEST=' + arg], 514 timeout : timeout_seconds, 515 is_parallel : false, 516 suite : 'perf-tests') 517endforeach 518 519foreach arg : driver_test_names 520 test(arg, dpdk_test, 521 env : ['DPDK_TEST=' + arg], 522 timeout : timeout_seconds, 523 is_parallel : false, 524 suite : 'driver-tests') 525endforeach 526 527foreach arg : dump_test_names 528 test(arg, dpdk_test, 529 env : ['DPDK_TEST=' + arg], 530 timeout : timeout_seconds, 531 is_parallel : false, 532 suite : 'debug-tests') 533endforeach 534