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