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 ['ticketlock_autotest', true], 250 ['timer_autotest', false], 251 ['user_delay_us', true], 252 ['version_autotest', true], 253 ['crc_autotest', true], 254 ['delay_us_sleep_autotest', true], 255 ['distributor_autotest', false], 256 ['eventdev_common_autotest', true], 257 ['fbarray_autotest', true], 258 ['hash_readwrite_func_autotest', false], 259 ['ipsec_autotest', true], 260 ['kni_autotest', false], 261 ['kvargs_autotest', true], 262 ['member_autotest', true], 263 ['metrics_autotest', true], 264 ['power_cpufreq_autotest', false], 265 ['power_autotest', true], 266 ['power_kvm_vm_autotest', false], 267 ['reorder_autotest', true], 268 ['service_autotest', true], 269 ['thash_autotest', true], 270 ['trace_autotest', true], 271] 272 273perf_test_names = [ 274 'ring_perf_autotest', 275 'mempool_perf_autotest', 276 'memcpy_perf_autotest', 277 'hash_perf_autotest', 278 'timer_perf_autotest', 279 'reciprocal_division', 280 'reciprocal_division_perf', 281 'lpm_perf_autotest', 282 'rib_slow_autotest', 283 'fib_slow_autotest', 284 'fib_perf_autotest', 285 'red_all', 286 'barrier_autotest', 287 'hash_multiwriter_autotest', 288 'timer_racecond_autotest', 289 'efd_autotest', 290 'hash_functions_autotest', 291 'member_perf_autotest', 292 'efd_perf_autotest', 293 'lpm6_perf_autotest', 294 'rib6_slow_autotest', 295 'fib6_slow_autotest', 296 'fib6_perf_autotest', 297 'rcu_qsbr_perf_autotest', 298 'red_perf', 299 'distributor_perf_autotest', 300 'pmd_perf_autotest', 301 'stack_perf_autotest', 302 'stack_lf_perf_autotest', 303 'rand_perf_autotest', 304 'hash_readwrite_perf_autotest', 305 'hash_readwrite_lf_perf_autotest', 306 'trace_perf_autotest', 307 'ipsec_perf_autotest', 308] 309 310driver_test_names = [ 311 'cryptodev_aesni_mb_autotest', 312 'cryptodev_aesni_gcm_autotest', 313 'cryptodev_dpaa_sec_autotest', 314 'cryptodev_dpaa2_sec_autotest', 315 'cryptodev_null_autotest', 316 'cryptodev_octeontx2_autotest', 317 'cryptodev_openssl_autotest', 318 'cryptodev_openssl_asym_autotest', 319 'cryptodev_qat_autotest', 320 'cryptodev_sw_armv8_autotest', 321 'cryptodev_sw_kasumi_autotest', 322 'cryptodev_sw_mvsam_autotest', 323 'cryptodev_sw_snow3g_autotest', 324 'cryptodev_sw_zuc_autotest', 325 'eventdev_selftest_octeontx', 326 'eventdev_selftest_sw', 327 'rawdev_autotest', 328] 329 330dump_test_names = [ 331 'dump_struct_sizes', 332 'dump_mempool', 333 'dump_malloc_stats', 334 'dump_devargs', 335 'dump_log_types', 336 'dump_ring', 337 'dump_physmem', 338 'dump_memzone', 339] 340 341# The following linkages are an exception to allow running the 342# unit tests without requiring that the developer install the 343# DPDK libraries. Explicit linkage of drivers (plugin libraries) 344# in applications should not be used. 345if dpdk_conf.has('RTE_MEMPOOL_RING') 346 test_deps += 'mempool_ring' 347endif 348if dpdk_conf.has('RTE_MEMPOOL_STACK') 349 test_deps += 'mempool_stack' 350endif 351if dpdk_conf.has('RTE_EVENT_SKELETON') 352 test_deps += 'event_skeleton' 353endif 354if dpdk_conf.has('RTE_LIB_TELEMETRY') 355 test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] 356 fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]] 357endif 358 359# The following linkages of drivers are required because 360# they are used via a driver-specific API. 361if dpdk_conf.has('RTE_NET_BOND') 362 test_deps += 'net_bond' 363 test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] 364 driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] 365 if dpdk_conf.has('RTE_NET_RING') 366 test_sources += 'test_link_bonding_mode4.c' 367 driver_test_names += 'link_bonding_mode4_autotest' 368 endif 369endif 370if dpdk_conf.has('RTE_NET_RING') 371 test_deps += 'net_ring' 372 test_sources += 'test_pmd_ring_perf.c' 373 test_sources += 'test_pmd_ring.c' 374 test_sources += 'test_event_eth_tx_adapter.c' 375 test_sources += 'test_bitratestats.c' 376 test_sources += 'test_latencystats.c' 377 test_sources += 'sample_packet_forward.c' 378 test_sources += 'test_pdump.c' 379 fast_tests += [['ring_pmd_autotest', true]] 380 perf_test_names += 'ring_pmd_perf_autotest' 381 fast_tests += [['event_eth_tx_adapter_autotest', false]] 382 fast_tests += [['bitratestats_autotest', true]] 383 fast_tests += [['latencystats_autotest', true]] 384 fast_tests += [['pdump_autotest', true]] 385endif 386 387if dpdk_conf.has('RTE_LIB_POWER') 388 test_deps += 'power' 389endif 390if dpdk_conf.has('RTE_LIB_KNI') 391 test_deps += 'kni' 392endif 393if dpdk_conf.has('RTE_LIB_PDUMP') 394 test_deps += 'pdump' 395endif 396 397if cc.has_argument('-Wno-format-truncation') 398 cflags += '-Wno-format-truncation' 399endif 400 401# specify -D_GNU_SOURCE unconditionally 402cflags += '-D_GNU_SOURCE' 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) 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 429test_dep_objs += cc.find_library('execinfo', required: false) 430 431link_libs = [] 432if get_option('default_library') == 'static' 433 link_libs = dpdk_static_libraries + dpdk_drivers 434endif 435 436dpdk_test = executable('dpdk-test', 437 test_sources, 438 link_whole: link_libs, 439 dependencies: test_dep_objs, 440 c_args: cflags, 441 install_rpath: join_paths(get_option('prefix'), 442 driver_install_path), 443 install: true) 444 445has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0' 446message('hugepage availability: @0@'.format(has_hugepage)) 447 448# some perf tests (eg: memcpy perf autotest)take very long 449# to complete, so timeout to 10 minutes 450timeout_seconds = 600 451timeout_seconds_fast = 10 452 453get_coremask = find_program('get-coremask.sh') 454num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip() 455 456default_test_args = [num_cores_arg] 457 458foreach arg : fast_tests 459 test_args = default_test_args 460 run_test = true 461 if not has_hugepage 462 if arg[1] 463 test_args += ['--no-huge', '-m', '2048'] 464 else 465 run_test = false 466 endif 467 endif 468 469 if (get_option('default_library') == 'shared' and 470 arg[0] == 'event_eth_tx_adapter_autotest') 471 foreach drv:dpdk_drivers 472 test_args += ['-d', drv.full_path().split('.a')[0] + '.so'] 473 endforeach 474 endif 475 if is_linux 476 test_args += ['--file-prefix=@0@'.format(arg[0])] 477 endif 478 479 if run_test 480 test(arg[0], dpdk_test, 481 env : ['DPDK_TEST=' + arg[0]], 482 args : test_args, 483 timeout : timeout_seconds_fast, 484 is_parallel : false, 485 suite : 'fast-tests') 486 endif 487endforeach 488 489foreach arg : perf_test_names 490 test(arg, dpdk_test, 491 env : ['DPDK_TEST=' + arg], 492 args : default_test_args, 493 timeout : timeout_seconds, 494 is_parallel : false, 495 suite : 'perf-tests') 496endforeach 497 498foreach arg : driver_test_names 499 test(arg, dpdk_test, 500 env : ['DPDK_TEST=' + arg], 501 args : default_test_args, 502 timeout : timeout_seconds, 503 is_parallel : false, 504 suite : 'driver-tests') 505endforeach 506 507foreach arg : dump_test_names 508 test(arg, dpdk_test, 509 env : ['DPDK_TEST=' + arg], 510 args : default_test_args, 511 timeout : timeout_seconds, 512 is_parallel : false, 513 suite : 'debug-tests') 514endforeach 515