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_pflock.c', 94 'test_pmd_perf.c', 95 'test_power.c', 96 'test_power_cpufreq.c', 97 'test_power_kvm_vm.c', 98 'test_prefetch.c', 99 'test_rand_perf.c', 100 'test_rawdev.c', 101 'test_rcu_qsbr.c', 102 'test_rcu_qsbr_perf.c', 103 'test_reciprocal_division.c', 104 'test_reciprocal_division_perf.c', 105 'test_red.c', 106 'test_reorder.c', 107 'test_rib.c', 108 'test_rib6.c', 109 'test_ring.c', 110 'test_ring_mpmc_stress.c', 111 'test_ring_hts_stress.c', 112 'test_ring_mt_peek_stress.c', 113 'test_ring_mt_peek_stress_zc.c', 114 'test_ring_perf.c', 115 'test_ring_rts_stress.c', 116 'test_ring_st_peek_stress.c', 117 'test_ring_st_peek_stress_zc.c', 118 'test_ring_stress.c', 119 'test_rwlock.c', 120 'test_sched.c', 121 'test_security.c', 122 'test_service_cores.c', 123 'test_spinlock.c', 124 'test_stack.c', 125 'test_stack_perf.c', 126 'test_string_fns.c', 127 'test_table.c', 128 'test_table_acl.c', 129 'test_table_combined.c', 130 'test_table_pipeline.c', 131 'test_table_ports.c', 132 'test_table_tables.c', 133 'test_tailq.c', 134 'test_thash.c', 135 'test_timer.c', 136 'test_timer_perf.c', 137 'test_timer_racecond.c', 138 'test_timer_secondary.c', 139 'test_ticketlock.c', 140 'test_trace.c', 141 'test_trace_register.c', 142 'test_trace_perf.c', 143 'test_version.c', 144 'virtual_pmd.c' 145) 146 147test_deps = ['acl', 148 'bus_pci', 149 'bus_vdev', 150 'bitratestats', 151 'bpf', 152 'cfgfile', 153 'cmdline', 154 'cryptodev', 155 'distributor', 156 'efd', 157 'ethdev', 158 'eventdev', 159 'fib', 160 'flow_classify', 161 'graph', 162 'hash', 163 'ipsec', 164 'latencystats', 165 'lpm', 166 'member', 167 'metrics', 168 'node', 169 'pipeline', 170 'port', 171 'rawdev', 172 'rcu', 173 'reorder', 174 'rib', 175 'ring', 176 'security', 177 'stack', 178 'telemetry', 179 'timer' 180] 181 182# Each test is marked with flag true/false 183# to indicate whether it can run in no-huge mode. 184fast_tests = [ 185 ['acl_autotest', true], 186 ['alarm_autotest', false], 187 ['atomic_autotest', false], 188 ['bitops_autotest', true], 189 ['byteorder_autotest', true], 190 ['cmdline_autotest', true], 191 ['common_autotest', true], 192 ['cpuflags_autotest', true], 193 ['cycles_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 ['delay_us_sleep_autotest', true], 257 ['distributor_autotest', false], 258 ['eventdev_common_autotest', true], 259 ['fbarray_autotest', true], 260 ['hash_readwrite_func_autotest', false], 261 ['ipsec_autotest', true], 262 ['kni_autotest', false], 263 ['kvargs_autotest', true], 264 ['member_autotest', true], 265 ['metrics_autotest', true], 266 ['power_cpufreq_autotest', false], 267 ['power_autotest', true], 268 ['power_kvm_vm_autotest', false], 269 ['reorder_autotest', true], 270 ['service_autotest', true], 271 ['thash_autotest', true], 272 ['trace_autotest', true], 273] 274 275perf_test_names = [ 276 'ring_perf_autotest', 277 'mempool_perf_autotest', 278 'memcpy_perf_autotest', 279 'hash_perf_autotest', 280 'timer_perf_autotest', 281 'reciprocal_division', 282 'reciprocal_division_perf', 283 'lpm_perf_autotest', 284 'rib_slow_autotest', 285 'fib_slow_autotest', 286 'fib_perf_autotest', 287 'red_all', 288 'barrier_autotest', 289 'hash_multiwriter_autotest', 290 'timer_racecond_autotest', 291 'efd_autotest', 292 'hash_functions_autotest', 293 'member_perf_autotest', 294 'efd_perf_autotest', 295 'lpm6_perf_autotest', 296 'rib6_slow_autotest', 297 'fib6_slow_autotest', 298 'fib6_perf_autotest', 299 'rcu_qsbr_perf_autotest', 300 'red_perf', 301 'distributor_perf_autotest', 302 'pmd_perf_autotest', 303 'stack_perf_autotest', 304 'stack_lf_perf_autotest', 305 'rand_perf_autotest', 306 'hash_readwrite_perf_autotest', 307 'hash_readwrite_lf_perf_autotest', 308 'trace_perf_autotest', 309 'ipsec_perf_autotest', 310] 311 312driver_test_names = [ 313 'cryptodev_aesni_mb_autotest', 314 'cryptodev_aesni_gcm_autotest', 315 'cryptodev_dpaa_sec_autotest', 316 'cryptodev_dpaa2_sec_autotest', 317 'cryptodev_null_autotest', 318 'cryptodev_octeontx2_autotest', 319 'cryptodev_openssl_autotest', 320 'cryptodev_openssl_asym_autotest', 321 'cryptodev_qat_autotest', 322 'cryptodev_sw_armv8_autotest', 323 'cryptodev_sw_kasumi_autotest', 324 'cryptodev_sw_mvsam_autotest', 325 'cryptodev_sw_snow3g_autotest', 326 'cryptodev_sw_zuc_autotest', 327 'eventdev_selftest_octeontx', 328 'eventdev_selftest_sw', 329 'rawdev_autotest', 330] 331 332dump_test_names = [ 333 'dump_struct_sizes', 334 'dump_mempool', 335 'dump_malloc_stats', 336 'dump_devargs', 337 'dump_log_types', 338 'dump_ring', 339 'dump_physmem', 340 'dump_memzone', 341] 342 343# The following linkages are an exception to allow running the 344# unit tests without requiring that the developer install the 345# DPDK libraries. Explicit linkage of drivers (plugin libraries) 346# in applications should not be used. 347if dpdk_conf.has('RTE_MEMPOOL_RING') 348 test_deps += 'mempool_ring' 349endif 350if dpdk_conf.has('RTE_MEMPOOL_STACK') 351 test_deps += 'mempool_stack' 352endif 353if dpdk_conf.has('RTE_EVENT_SKELETON') 354 test_deps += 'event_skeleton' 355endif 356if dpdk_conf.has('RTE_LIB_TELEMETRY') 357 test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] 358 fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]] 359endif 360 361# The following linkages of drivers are required because 362# they are used via a driver-specific API. 363if dpdk_conf.has('RTE_NET_BOND') 364 test_deps += 'net_bond' 365 test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] 366 driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] 367 if dpdk_conf.has('RTE_NET_RING') 368 test_sources += 'test_link_bonding_mode4.c' 369 driver_test_names += 'link_bonding_mode4_autotest' 370 endif 371endif 372if dpdk_conf.has('RTE_NET_RING') 373 test_deps += 'net_ring' 374 test_sources += 'test_pmd_ring_perf.c' 375 test_sources += 'test_pmd_ring.c' 376 test_sources += 'test_event_eth_tx_adapter.c' 377 test_sources += 'test_bitratestats.c' 378 test_sources += 'test_latencystats.c' 379 test_sources += 'sample_packet_forward.c' 380 test_sources += 'test_pdump.c' 381 fast_tests += [['ring_pmd_autotest', true]] 382 perf_test_names += 'ring_pmd_perf_autotest' 383 fast_tests += [['event_eth_tx_adapter_autotest', false]] 384 fast_tests += [['bitratestats_autotest', true]] 385 fast_tests += [['latencystats_autotest', true]] 386 fast_tests += [['pdump_autotest', true]] 387endif 388 389if dpdk_conf.has('RTE_LIB_POWER') 390 test_deps += 'power' 391endif 392if dpdk_conf.has('RTE_LIB_KNI') 393 test_deps += 'kni' 394endif 395if dpdk_conf.has('RTE_LIB_PDUMP') 396 test_deps += 'pdump' 397endif 398 399if cc.has_argument('-Wno-format-truncation') 400 cflags += '-Wno-format-truncation' 401endif 402 403# Strict-aliasing rules are violated by uint8_t[] to context size casts. 404cflags += '-fno-strict-aliasing' 405 406# Enable using internal APIs in unit tests 407cflags += ['-DALLOW_INTERNAL_API'] 408 409test_dep_objs = [] 410if dpdk_conf.has('RTE_LIB_COMPRESSDEV') 411 compress_test_dep = dependency('zlib', required: false, method: 'pkg-config') 412 if compress_test_dep.found() 413 test_dep_objs += compress_test_dep 414 test_sources += 'test_compressdev.c' 415 test_deps += 'compressdev' 416 fast_tests += [['compressdev_autotest', false]] 417 endif 418endif 419 420if dpdk_conf.has('RTE_CRYPTO_SCHEDULER') 421 driver_test_names += 'cryptodev_scheduler_autotest' 422 test_deps += 'crypto_scheduler' 423endif 424 425foreach d:test_deps 426 def_lib = get_option('default_library') 427 test_dep_objs += get_variable(def_lib + '_rte_' + d) 428endforeach 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