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