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