33637f0ebaa55013e88fc24d8e8cfb117d5ab546
[dpdk.git] / app / test / meson.build
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2017 Intel Corporation
3
4 if is_windows
5         build = false
6         reason = 'not supported on Windows'
7         subdir_done()
8 endif
9
10 if not get_option('tests')
11     subdir_done()
12 endif
13
14 test_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_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_timer.c',
148         'test_timer_perf.c',
149         'test_timer_racecond.c',
150         'test_timer_secondary.c',
151         'test_ticketlock.c',
152         'test_trace.c',
153         'test_trace_register.c',
154         'test_trace_perf.c',
155         'test_version.c',
156         'virtual_pmd.c',
157 )
158
159 test_deps = [
160         'acl',
161         'bus_pci',
162         'bus_vdev',
163         'bitratestats',
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         'latencystats',
179         'lpm',
180         'member',
181         'metrics',
182         'node',
183         'pipeline',
184         'port',
185         'rawdev',
186         'rcu',
187         'reorder',
188         'rib',
189         'ring',
190         'security',
191         'stack',
192         'telemetry',
193         'timer',
194 ]
195
196 # Each test is marked with flag true/false
197 # to indicate whether it can run in no-huge mode.
198 fast_tests = [
199         ['acl_autotest', true],
200         ['atomic_autotest', false],
201         ['bpf_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         ['red_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         ['metrics_autotest', true],
280         ['power_cpufreq_autotest', false],
281         ['power_autotest', true],
282         ['power_kvm_vm_autotest', false],
283         ['reorder_autotest', true],
284         ['service_autotest', true],
285         ['thash_autotest', true],
286         ['trace_autotest', true],
287 ]
288
289 perf_test_names = [
290         'ring_perf_autotest',
291         'mempool_perf_autotest',
292         'memcpy_perf_autotest',
293         'hash_perf_autotest',
294         'timer_perf_autotest',
295         'reciprocal_division',
296         'reciprocal_division_perf',
297         'lpm_perf_autotest',
298         'rib_slow_autotest',
299         'fib_slow_autotest',
300         'fib_perf_autotest',
301         'red_all',
302         'barrier_autotest',
303         'hash_multiwriter_autotest',
304         'timer_racecond_autotest',
305         'efd_autotest',
306         'hash_functions_autotest',
307         'member_perf_autotest',
308         'efd_perf_autotest',
309         'lpm6_perf_autotest',
310         'rib6_slow_autotest',
311         'fib6_slow_autotest',
312         'fib6_perf_autotest',
313         'rcu_qsbr_perf_autotest',
314         'red_perf',
315         'distributor_perf_autotest',
316         'pmd_perf_autotest',
317         'stack_perf_autotest',
318         'stack_lf_perf_autotest',
319         'rand_perf_autotest',
320         'hash_readwrite_perf_autotest',
321         'hash_readwrite_lf_perf_autotest',
322         'trace_perf_autotest',
323         'ipsec_perf_autotest',
324 ]
325
326 driver_test_names = [
327         'cryptodev_aesni_mb_autotest',
328         'cryptodev_aesni_gcm_autotest',
329         'cryptodev_cn9k_autotest',
330         'cryptodev_cn10k_autotest',
331         'cryptodev_dpaa_sec_autotest',
332         'cryptodev_dpaa2_sec_autotest',
333         'cryptodev_null_autotest',
334         'cryptodev_octeontx2_autotest',
335         'cryptodev_openssl_autotest',
336         'cryptodev_openssl_asym_autotest',
337         'cryptodev_qat_autotest',
338         'cryptodev_sw_armv8_autotest',
339         'cryptodev_sw_kasumi_autotest',
340         'cryptodev_sw_mvsam_autotest',
341         'cryptodev_sw_snow3g_autotest',
342         'cryptodev_sw_zuc_autotest',
343         'dmadev_autotest',
344         'eventdev_selftest_octeontx',
345         'eventdev_selftest_sw',
346         'rawdev_autotest',
347 ]
348
349 dump_test_names = [
350         'dump_struct_sizes',
351         'dump_mempool',
352         'dump_malloc_stats',
353         'dump_devargs',
354         'dump_log_types',
355         'dump_ring',
356         'dump_physmem',
357         'dump_memzone',
358 ]
359
360 # The following linkages are an exception to allow running the
361 # unit tests without requiring that the developer install the
362 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
363 # in applications should not be used.
364 if dpdk_conf.has('RTE_MEMPOOL_RING')
365     test_deps += 'mempool_ring'
366 endif
367 if dpdk_conf.has('RTE_MEMPOOL_STACK')
368     test_deps += 'mempool_stack'
369 endif
370 if dpdk_conf.has('RTE_EVENT_SKELETON')
371     test_deps += 'event_skeleton'
372 endif
373 if dpdk_conf.has('RTE_LIB_TELEMETRY')
374     test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
375     fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
376 endif
377
378 # The following linkages of drivers are required because
379 # they are used via a driver-specific API.
380 if dpdk_conf.has('RTE_NET_BOND')
381     test_deps += 'net_bond'
382     test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
383     driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
384     if dpdk_conf.has('RTE_NET_RING')
385         test_sources += 'test_link_bonding_mode4.c'
386         driver_test_names += 'link_bonding_mode4_autotest'
387     endif
388 endif
389 if dpdk_conf.has('RTE_NET_RING')
390     test_deps += 'net_ring'
391     test_sources += 'test_pmd_ring_perf.c'
392     test_sources += 'test_pmd_ring.c'
393     test_sources += 'test_event_eth_tx_adapter.c'
394     test_sources += 'test_bitratestats.c'
395     test_sources += 'test_latencystats.c'
396     test_sources += 'sample_packet_forward.c'
397     test_sources += 'test_pdump.c'
398     fast_tests += [['ring_pmd_autotest', true]]
399     perf_test_names += 'ring_pmd_perf_autotest'
400     fast_tests += [['event_eth_tx_adapter_autotest', false]]
401     fast_tests += [['bitratestats_autotest', true]]
402     fast_tests += [['latencystats_autotest', true]]
403     fast_tests += [['pdump_autotest', true]]
404 endif
405
406 if dpdk_conf.has('RTE_PORT_PCAP')
407     test_sources += 'test_pcapng.c'
408 endif
409
410 if dpdk_conf.has('RTE_LIB_POWER')
411     test_deps += 'power'
412 endif
413 if dpdk_conf.has('RTE_LIB_KNI')
414     test_deps += 'kni'
415 endif
416 if dpdk_conf.has('RTE_LIB_PDUMP')
417     test_deps += 'pdump'
418 endif
419
420 if cc.has_argument('-Wno-format-truncation')
421     cflags += '-Wno-format-truncation'
422 endif
423
424 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
425 cflags += '-fno-strict-aliasing'
426
427 # Enable using internal APIs in unit tests
428 cflags += ['-DALLOW_INTERNAL_API']
429
430 test_dep_objs = []
431 if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
432     compress_test_dep = dependency('zlib', required: false, method: 'pkg-config')
433     if compress_test_dep.found()
434         test_dep_objs += compress_test_dep
435         test_sources += 'test_compressdev.c'
436         test_deps += 'compressdev'
437         fast_tests += [['compressdev_autotest', false]]
438     endif
439 endif
440
441 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
442     driver_test_names += 'cryptodev_scheduler_autotest'
443     test_deps += 'crypto_scheduler'
444 endif
445
446 foreach d:test_deps
447     def_lib = get_option('default_library')
448     test_dep_objs += get_variable(def_lib + '_rte_' + d)
449 endforeach
450
451 link_libs = []
452 if get_option('default_library') == 'static'
453     link_libs = dpdk_static_libraries + dpdk_drivers
454 endif
455
456 dpdk_test = executable('dpdk-test',
457         test_sources,
458         link_whole: link_libs,
459         dependencies: test_dep_objs,
460         c_args: cflags,
461         install_rpath: join_paths(get_option('prefix'),
462              driver_install_path),
463         install: true)
464
465 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
466 message('hugepage availability: @0@'.format(has_hugepage))
467
468 # some perf tests (eg: memcpy perf autotest)take very long
469 # to complete, so timeout to 10 minutes
470 timeout_seconds = 600
471 timeout_seconds_fast = 10
472
473 foreach arg : fast_tests
474     test_args = []
475     run_test = true
476     if not has_hugepage
477         if arg[1]
478             test_args += ['--no-huge', '-m', '2048']
479         else
480             run_test = false
481         endif
482     endif
483
484     if (get_option('default_library') == 'shared' and
485         arg[0] == 'event_eth_tx_adapter_autotest')
486         foreach drv:dpdk_drivers
487             test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
488         endforeach
489     endif
490     if is_linux
491         test_args += ['--file-prefix=@0@'.format(arg[0])]
492     endif
493
494     if run_test
495         test(arg[0], dpdk_test,
496                 env : ['DPDK_TEST=' + arg[0]],
497                 args : test_args,
498                 timeout : timeout_seconds_fast,
499                 is_parallel : false,
500                 suite : 'fast-tests')
501     endif
502 endforeach
503
504 foreach arg : perf_test_names
505     test(arg, dpdk_test,
506             env : ['DPDK_TEST=' + arg],
507             timeout : timeout_seconds,
508             is_parallel : false,
509             suite : 'perf-tests')
510 endforeach
511
512 foreach arg : driver_test_names
513     test(arg, dpdk_test,
514             env : ['DPDK_TEST=' + arg],
515             timeout : timeout_seconds,
516             is_parallel : false,
517             suite : 'driver-tests')
518 endforeach
519
520 foreach arg : dump_test_names
521     test(arg, dpdk_test,
522             env : ['DPDK_TEST=' + arg],
523             timeout : timeout_seconds,
524             is_parallel : false,
525             suite : 'debug-tests')
526 endforeach