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