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_cn9k_autotest', 323 'cryptodev_cn10k_autotest', 324 'cryptodev_dpaa_sec_autotest', 325 'cryptodev_dpaa2_sec_autotest', 326 'cryptodev_null_autotest', 327 'cryptodev_octeontx2_autotest', 328 'cryptodev_openssl_autotest', 329 'cryptodev_openssl_asym_autotest', 330 'cryptodev_qat_autotest', 331 'cryptodev_sw_armv8_autotest', 332 'cryptodev_sw_kasumi_autotest', 333 'cryptodev_sw_mvsam_autotest', 334 'cryptodev_sw_snow3g_autotest', 335 'cryptodev_sw_zuc_autotest', 336 'eventdev_selftest_octeontx', 337 'eventdev_selftest_sw', 338 'rawdev_autotest', 339] 340 341dump_test_names = [ 342 'dump_struct_sizes', 343 'dump_mempool', 344 'dump_malloc_stats', 345 'dump_devargs', 346 'dump_log_types', 347 'dump_ring', 348 'dump_physmem', 349 'dump_memzone', 350] 351 352# The following linkages are an exception to allow running the 353# unit tests without requiring that the developer install the 354# DPDK libraries. Explicit linkage of drivers (plugin libraries) 355# in applications should not be used. 356if dpdk_conf.has('RTE_MEMPOOL_RING') 357 test_deps += 'mempool_ring' 358endif 359if dpdk_conf.has('RTE_MEMPOOL_STACK') 360 test_deps += 'mempool_stack' 361endif 362if dpdk_conf.has('RTE_EVENT_SKELETON') 363 test_deps += 'event_skeleton' 364endif 365if dpdk_conf.has('RTE_LIB_TELEMETRY') 366 test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c'] 367 fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]] 368endif 369 370# The following linkages of drivers are required because 371# they are used via a driver-specific API. 372if dpdk_conf.has('RTE_NET_BOND') 373 test_deps += 'net_bond' 374 test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c'] 375 driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest'] 376 if dpdk_conf.has('RTE_NET_RING') 377 test_sources += 'test_link_bonding_mode4.c' 378 driver_test_names += 'link_bonding_mode4_autotest' 379 endif 380endif 381if dpdk_conf.has('RTE_NET_RING') 382 test_deps += 'net_ring' 383 test_sources += 'test_pmd_ring_perf.c' 384 test_sources += 'test_pmd_ring.c' 385 test_sources += 'test_event_eth_tx_adapter.c' 386 test_sources += 'test_bitratestats.c' 387 test_sources += 'test_latencystats.c' 388 test_sources += 'sample_packet_forward.c' 389 test_sources += 'test_pdump.c' 390 fast_tests += [['ring_pmd_autotest', true]] 391 perf_test_names += 'ring_pmd_perf_autotest' 392 fast_tests += [['event_eth_tx_adapter_autotest', false]] 393 fast_tests += [['bitratestats_autotest', true]] 394 fast_tests += [['latencystats_autotest', true]] 395 fast_tests += [['pdump_autotest', true]] 396endif 397 398if dpdk_conf.has('RTE_LIB_POWER') 399 test_deps += 'power' 400endif 401if dpdk_conf.has('RTE_LIB_KNI') 402 test_deps += 'kni' 403endif 404if dpdk_conf.has('RTE_LIB_PDUMP') 405 test_deps += 'pdump' 406endif 407 408if cc.has_argument('-Wno-format-truncation') 409 cflags += '-Wno-format-truncation' 410endif 411 412# Strict-aliasing rules are violated by uint8_t[] to context size casts. 413cflags += '-fno-strict-aliasing' 414 415# Enable using internal APIs in unit tests 416cflags += ['-DALLOW_INTERNAL_API'] 417 418test_dep_objs = [] 419if dpdk_conf.has('RTE_LIB_COMPRESSDEV') 420 compress_test_dep = dependency('zlib', required: false, method: 'pkg-config') 421 if compress_test_dep.found() 422 test_dep_objs += compress_test_dep 423 test_sources += 'test_compressdev.c' 424 test_deps += 'compressdev' 425 fast_tests += [['compressdev_autotest', false]] 426 endif 427endif 428 429if dpdk_conf.has('RTE_CRYPTO_SCHEDULER') 430 driver_test_names += 'cryptodev_scheduler_autotest' 431 test_deps += 'crypto_scheduler' 432endif 433 434foreach d:test_deps 435 def_lib = get_option('default_library') 436 test_dep_objs += get_variable(def_lib + '_rte_' + d) 437endforeach 438 439link_libs = [] 440if get_option('default_library') == 'static' 441 link_libs = dpdk_static_libraries + dpdk_drivers 442endif 443 444dpdk_test = executable('dpdk-test', 445 test_sources, 446 link_whole: link_libs, 447 dependencies: test_dep_objs, 448 c_args: cflags, 449 install_rpath: join_paths(get_option('prefix'), 450 driver_install_path), 451 install: true) 452 453has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0' 454message('hugepage availability: @0@'.format(has_hugepage)) 455 456# some perf tests (eg: memcpy perf autotest)take very long 457# to complete, so timeout to 10 minutes 458timeout_seconds = 600 459timeout_seconds_fast = 10 460 461get_coremask = find_program('get-coremask.sh') 462num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip() 463 464default_test_args = [num_cores_arg] 465 466foreach arg : fast_tests 467 test_args = default_test_args 468 run_test = true 469 if not has_hugepage 470 if arg[1] 471 test_args += ['--no-huge', '-m', '2048'] 472 else 473 run_test = false 474 endif 475 endif 476 477 if (get_option('default_library') == 'shared' and 478 arg[0] == 'event_eth_tx_adapter_autotest') 479 foreach drv:dpdk_drivers 480 test_args += ['-d', drv.full_path().split('.a')[0] + '.so'] 481 endforeach 482 endif 483 if is_linux 484 test_args += ['--file-prefix=@0@'.format(arg[0])] 485 endif 486 487 if run_test 488 test(arg[0], dpdk_test, 489 env : ['DPDK_TEST=' + arg[0]], 490 args : test_args, 491 timeout : timeout_seconds_fast, 492 is_parallel : false, 493 suite : 'fast-tests') 494 endif 495endforeach 496 497foreach arg : perf_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 : 'perf-tests') 504endforeach 505 506foreach arg : driver_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 : 'driver-tests') 513endforeach 514 515foreach arg : dump_test_names 516 test(arg, dpdk_test, 517 env : ['DPDK_TEST=' + arg], 518 args : default_test_args, 519 timeout : timeout_seconds, 520 is_parallel : false, 521 suite : 'debug-tests') 522endforeach 523