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