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