xref: /dpdk/app/test/meson.build (revision 41f2f055)
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        ['bpf_autotest', true],
204        ['bpf_convert_autotest', true],
205        ['bitops_autotest', true],
206        ['byteorder_autotest', true],
207        ['cksum_autotest', true],
208        ['cmdline_autotest', true],
209        ['common_autotest', true],
210        ['cpuflags_autotest', true],
211        ['debug_autotest', true],
212        ['devargs_autotest', true],
213        ['eal_flags_c_opt_autotest', false],
214        ['eal_flags_main_opt_autotest', false],
215        ['eal_flags_n_opt_autotest', false],
216        ['eal_flags_hpet_autotest', false],
217        ['eal_flags_no_huge_autotest', false],
218        ['eal_flags_a_opt_autotest', false],
219        ['eal_flags_b_opt_autotest', false],
220        ['eal_flags_vdev_opt_autotest', false],
221        ['eal_flags_r_opt_autotest', false],
222        ['eal_flags_mem_autotest', false],
223        ['eal_flags_file_prefix_autotest', false],
224        ['eal_flags_misc_autotest', false],
225        ['eal_fs_autotest', true],
226        ['errno_autotest', true],
227        ['ethdev_link_status', true],
228        ['event_ring_autotest', true],
229        ['fib_autotest', true],
230        ['fib6_autotest', true],
231        ['func_reentrancy_autotest', false],
232        ['flow_classify_autotest', false],
233        ['hash_autotest', true],
234        ['interrupt_autotest', true],
235        ['ipfrag_autotest', false],
236        ['lcores_autotest', true],
237        ['logs_autotest', true],
238        ['lpm_autotest', true],
239        ['lpm6_autotest', true],
240        ['malloc_autotest', false],
241        ['mbuf_autotest', false],
242        ['mcslock_autotest', false],
243        ['memcpy_autotest', true],
244        ['memory_autotest', false],
245        ['mempool_autotest', false],
246        ['memzone_autotest', false],
247        ['meter_autotest', true],
248        ['multiprocess_autotest', false],
249        ['per_lcore_autotest', true],
250        ['pflock_autotest', true],
251        ['prefetch_autotest', true],
252        ['rcu_qsbr_autotest', true],
253        ['red_autotest', true],
254        ['pie_autotest', true],
255        ['rib_autotest', true],
256        ['rib6_autotest', true],
257        ['ring_autotest', true],
258        ['rwlock_test1_autotest', true],
259        ['rwlock_rda_autotest', true],
260        ['rwlock_rds_wrm_autotest', true],
261        ['rwlock_rde_wro_autotest', true],
262        ['sched_autotest', true],
263        ['security_autotest', false],
264        ['spinlock_autotest', true],
265        ['stack_autotest', false],
266        ['stack_lf_autotest', false],
267        ['string_autotest', true],
268        ['table_autotest', true],
269        ['tailq_autotest', true],
270        ['ticketlock_autotest', true],
271        ['timer_autotest', false],
272        ['user_delay_us', true],
273        ['version_autotest', true],
274        ['crc_autotest', true],
275        ['distributor_autotest', false],
276        ['eventdev_common_autotest', true],
277        ['fbarray_autotest', true],
278        ['hash_readwrite_func_autotest', false],
279        ['ipsec_autotest', true],
280        ['kni_autotest', false],
281        ['kvargs_autotest', true],
282        ['member_autotest', true],
283        ['metrics_autotest', true],
284        ['power_cpufreq_autotest', false],
285        ['power_autotest', true],
286        ['power_kvm_vm_autotest', false],
287        ['reorder_autotest', true],
288        ['service_autotest', true],
289        ['thash_autotest', true],
290        ['trace_autotest', true],
291]
292
293perf_test_names = [
294        'ring_perf_autotest',
295        'mempool_perf_autotest',
296        'memcpy_perf_autotest',
297        'hash_perf_autotest',
298        'timer_perf_autotest',
299        'reciprocal_division',
300        'reciprocal_division_perf',
301        'lpm_perf_autotest',
302        'rib_slow_autotest',
303        'fib_slow_autotest',
304        'fib_perf_autotest',
305        'red_all',
306        'pie_all',
307        'barrier_autotest',
308        'hash_multiwriter_autotest',
309        'timer_racecond_autotest',
310        'efd_autotest',
311        'hash_functions_autotest',
312        'member_perf_autotest',
313        'efd_perf_autotest',
314        'lpm6_perf_autotest',
315        'rib6_slow_autotest',
316        'fib6_slow_autotest',
317        'fib6_perf_autotest',
318        'rcu_qsbr_perf_autotest',
319        'red_perf',
320        'pie_perf',
321        'distributor_perf_autotest',
322        'pmd_perf_autotest',
323        'stack_perf_autotest',
324        'stack_lf_perf_autotest',
325        'rand_perf_autotest',
326        'hash_readwrite_perf_autotest',
327        'hash_readwrite_lf_perf_autotest',
328        'trace_perf_autotest',
329        'ipsec_perf_autotest',
330        'thash_perf_autotest',
331]
332
333driver_test_names = [
334        'cryptodev_aesni_mb_autotest',
335        'cryptodev_aesni_gcm_autotest',
336        'cryptodev_cn9k_autotest',
337        'cryptodev_cn10k_autotest',
338        'cryptodev_dpaa_sec_autotest',
339        'cryptodev_dpaa2_sec_autotest',
340        'cryptodev_null_autotest',
341        'cryptodev_octeontx2_autotest',
342        'cryptodev_openssl_autotest',
343        'cryptodev_openssl_asym_autotest',
344        'cryptodev_qat_autotest',
345        'cryptodev_sw_armv8_autotest',
346        'cryptodev_sw_kasumi_autotest',
347        'cryptodev_sw_mvsam_autotest',
348        'cryptodev_sw_snow3g_autotest',
349        'cryptodev_sw_zuc_autotest',
350        'dmadev_autotest',
351        'eventdev_selftest_octeontx',
352        'eventdev_selftest_sw',
353        'rawdev_autotest',
354]
355
356dump_test_names = [
357        'dump_struct_sizes',
358        'dump_mempool',
359        'dump_malloc_stats',
360        'dump_devargs',
361        'dump_log_types',
362        'dump_ring',
363        'dump_physmem',
364        'dump_memzone',
365]
366
367# The following linkages are an exception to allow running the
368# unit tests without requiring that the developer install the
369# DPDK libraries.  Explicit linkage of drivers (plugin libraries)
370# in applications should not be used.
371if dpdk_conf.has('RTE_MEMPOOL_RING')
372    test_deps += 'mempool_ring'
373endif
374if dpdk_conf.has('RTE_MEMPOOL_STACK')
375    test_deps += 'mempool_stack'
376endif
377if dpdk_conf.has('RTE_EVENT_SKELETON')
378    test_deps += 'event_skeleton'
379endif
380if dpdk_conf.has('RTE_LIB_TELEMETRY')
381    test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
382    fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
383endif
384
385# The following linkages of drivers are required because
386# they are used via a driver-specific API.
387if dpdk_conf.has('RTE_NET_BOND')
388    test_deps += 'net_bond'
389    test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
390    driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
391    if dpdk_conf.has('RTE_NET_RING')
392        test_sources += 'test_link_bonding_mode4.c'
393        driver_test_names += 'link_bonding_mode4_autotest'
394    endif
395endif
396if dpdk_conf.has('RTE_NET_RING')
397    test_deps += 'net_ring'
398    test_sources += 'test_pmd_ring_perf.c'
399    test_sources += 'test_pmd_ring.c'
400    test_sources += 'test_event_eth_tx_adapter.c'
401    test_sources += 'test_bitratestats.c'
402    test_sources += 'test_latencystats.c'
403    test_sources += 'sample_packet_forward.c'
404    test_sources += 'test_pdump.c'
405    fast_tests += [['ring_pmd_autotest', true]]
406    perf_test_names += 'ring_pmd_perf_autotest'
407    fast_tests += [['event_eth_tx_adapter_autotest', false]]
408    fast_tests += [['bitratestats_autotest', true]]
409    fast_tests += [['latencystats_autotest', true]]
410    fast_tests += [['pdump_autotest', true]]
411endif
412
413if dpdk_conf.has('RTE_PORT_PCAP')
414    test_sources += 'test_pcapng.c'
415endif
416
417if dpdk_conf.has('RTE_LIB_POWER')
418    test_deps += 'power'
419endif
420if dpdk_conf.has('RTE_LIB_KNI')
421    test_deps += 'kni'
422endif
423if dpdk_conf.has('RTE_LIB_PDUMP')
424    test_deps += 'pdump'
425endif
426
427if cc.has_argument('-Wno-format-truncation')
428    cflags += '-Wno-format-truncation'
429endif
430
431# Strict-aliasing rules are violated by uint8_t[] to context size casts.
432cflags += '-fno-strict-aliasing'
433
434# Enable using internal APIs in unit tests
435cflags += ['-DALLOW_INTERNAL_API']
436
437test_dep_objs = []
438if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
439    compress_test_dep = dependency('zlib', required: false, method: 'pkg-config')
440    if compress_test_dep.found()
441        test_dep_objs += compress_test_dep
442        test_sources += 'test_compressdev.c'
443        test_deps += 'compressdev'
444        fast_tests += [['compressdev_autotest', false]]
445    endif
446endif
447
448if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
449    driver_test_names += 'cryptodev_scheduler_autotest'
450    test_deps += 'crypto_scheduler'
451endif
452
453foreach d:test_deps
454    def_lib = get_option('default_library')
455    test_dep_objs += get_variable(def_lib + '_rte_' + d)
456endforeach
457
458link_libs = []
459if get_option('default_library') == 'static'
460    link_libs = dpdk_static_libraries + dpdk_drivers
461endif
462
463dpdk_test = executable('dpdk-test',
464        test_sources,
465        link_whole: link_libs,
466        dependencies: test_dep_objs,
467        c_args: cflags,
468        install_rpath: join_paths(get_option('prefix'),
469             driver_install_path),
470        install: true)
471
472has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
473message('hugepage availability: @0@'.format(has_hugepage))
474
475# some perf tests (eg: memcpy perf autotest)take very long
476# to complete, so timeout to 10 minutes
477timeout_seconds = 600
478timeout_seconds_fast = 10
479
480foreach arg : fast_tests
481    test_args = []
482    run_test = true
483    if not has_hugepage
484        if arg[1]
485            test_args += ['--no-huge', '-m', '2048']
486        else
487            run_test = false
488        endif
489    endif
490
491    if (get_option('default_library') == 'shared' and
492        arg[0] == 'event_eth_tx_adapter_autotest')
493        foreach drv:dpdk_drivers
494            test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
495        endforeach
496    endif
497    if is_linux
498        test_args += ['--file-prefix=@0@'.format(arg[0])]
499    endif
500
501    if run_test
502        test(arg[0], dpdk_test,
503                env : ['DPDK_TEST=' + arg[0]],
504                args : test_args,
505                timeout : timeout_seconds_fast,
506                is_parallel : false,
507                suite : 'fast-tests')
508    endif
509endforeach
510
511foreach arg : perf_test_names
512    test(arg, dpdk_test,
513            env : ['DPDK_TEST=' + arg],
514            timeout : timeout_seconds,
515            is_parallel : false,
516            suite : 'perf-tests')
517endforeach
518
519foreach arg : driver_test_names
520    test(arg, dpdk_test,
521            env : ['DPDK_TEST=' + arg],
522            timeout : timeout_seconds,
523            is_parallel : false,
524            suite : 'driver-tests')
525endforeach
526
527foreach arg : dump_test_names
528    test(arg, dpdk_test,
529            env : ['DPDK_TEST=' + arg],
530            timeout : timeout_seconds,
531            is_parallel : false,
532            suite : 'debug-tests')
533endforeach
534