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