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