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