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