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