344a609a4d275a850fd36e655fdd76e16c7a0103
[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_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
160 test_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.
196 fast_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.
289 extra_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
296 perf_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
336 driver_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_openssl_autotest',
345         'cryptodev_openssl_asym_autotest',
346         'cryptodev_qat_autotest',
347         'cryptodev_sw_armv8_autotest',
348         'cryptodev_sw_kasumi_autotest',
349         'cryptodev_sw_mvsam_autotest',
350         'cryptodev_sw_snow3g_autotest',
351         'cryptodev_sw_zuc_autotest',
352         'dmadev_autotest',
353         'eventdev_selftest_octeontx',
354         'eventdev_selftest_sw',
355         'rawdev_autotest',
356 ]
357
358 dump_test_names = [
359         'dump_struct_sizes',
360         'dump_mempool',
361         'dump_malloc_stats',
362         'dump_devargs',
363         'dump_log_types',
364         'dump_ring',
365         'dump_physmem',
366         'dump_memzone',
367 ]
368
369 # The following linkages are an exception to allow running the
370 # unit tests without requiring that the developer install the
371 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
372 # in applications should not be used.
373 if dpdk_conf.has('RTE_MEMPOOL_RING')
374     test_deps += 'mempool_ring'
375 endif
376 if dpdk_conf.has('RTE_MEMPOOL_STACK')
377     test_deps += 'mempool_stack'
378 endif
379 if dpdk_conf.has('RTE_EVENT_SKELETON')
380     test_deps += 'event_skeleton'
381 endif
382 if dpdk_conf.has('RTE_LIB_METRICS')
383     test_deps += 'metrics'
384     test_sources += ['test_metrics.c']
385     fast_tests += [['metrics_autotest', true]]
386 endif
387 if dpdk_conf.has('RTE_LIB_TELEMETRY')
388     test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
389     fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
390 endif
391
392 # The following linkages of drivers are required because
393 # they are used via a driver-specific API.
394 if dpdk_conf.has('RTE_NET_BOND')
395     test_deps += 'net_bond'
396     test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
397     driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
398     if dpdk_conf.has('RTE_NET_RING')
399         test_sources += 'test_link_bonding_mode4.c'
400         driver_test_names += 'link_bonding_mode4_autotest'
401     endif
402 endif
403 if dpdk_conf.has('RTE_NET_RING')
404     test_deps += 'net_ring'
405     test_sources += 'test_pmd_ring_perf.c'
406     test_sources += 'test_pmd_ring.c'
407     test_sources += 'test_event_eth_tx_adapter.c'
408     test_sources += 'sample_packet_forward.c'
409     fast_tests += [['ring_pmd_autotest', true]]
410     perf_test_names += 'ring_pmd_perf_autotest'
411     fast_tests += [['event_eth_tx_adapter_autotest', false]]
412     if dpdk_conf.has('RTE_LIB_BITRATESTATS')
413         test_deps += 'bitratestats'
414         test_sources += 'test_bitratestats.c'
415         fast_tests += [['bitratestats_autotest', true]]
416     endif
417     if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
418         test_deps += 'latencystats'
419         test_sources += 'test_latencystats.c'
420         fast_tests += [['latencystats_autotest', true]]
421     endif
422     if dpdk_conf.has('RTE_LIB_PDUMP')
423         test_deps += 'pdump'
424         test_sources += 'test_pdump.c'
425         fast_tests += [['pdump_autotest', true]]
426     endif
427 endif
428 if dpdk_conf.has('RTE_NET_NULL')
429     test_deps += 'net_null'
430     test_sources += 'test_vdev.c'
431     fast_tests += [['vdev_autotest', true]]
432 endif
433
434 if dpdk_conf.has('RTE_HAS_LIBPCAP')
435     ext_deps += pcap_dep
436     if dpdk_conf.has('RTE_LIB_PCAPNG')
437         test_deps += 'pcapng'
438         test_sources += 'test_pcapng.c'
439     endif
440 endif
441
442 if dpdk_conf.has('RTE_LIB_POWER')
443     test_deps += 'power'
444 endif
445 if dpdk_conf.has('RTE_LIB_KNI')
446     test_deps += 'kni'
447 endif
448
449 if cc.has_argument('-Wno-format-truncation')
450     cflags += '-Wno-format-truncation'
451 endif
452
453 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
454 cflags += '-fno-strict-aliasing'
455
456 # Enable using internal APIs in unit tests
457 cflags += ['-DALLOW_INTERNAL_API']
458
459 test_dep_objs = []
460 if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
461     compress_test_dep = dependency('zlib', required: false, method: 'pkg-config')
462     if compress_test_dep.found()
463         test_dep_objs += compress_test_dep
464         test_sources += 'test_compressdev.c'
465         test_deps += 'compressdev'
466         fast_tests += [['compressdev_autotest', false]]
467     endif
468 endif
469
470 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
471     driver_test_names += 'cryptodev_scheduler_autotest'
472     test_deps += 'crypto_scheduler'
473 endif
474
475 foreach d:test_deps
476     def_lib = get_option('default_library')
477     test_dep_objs += get_variable(def_lib + '_rte_' + d)
478 endforeach
479
480 link_libs = []
481 if get_option('default_library') == 'static'
482     link_libs = dpdk_static_libraries + dpdk_drivers
483 endif
484
485 dpdk_test = executable('dpdk-test',
486         test_sources,
487         link_whole: link_libs,
488         dependencies: test_dep_objs + ext_deps,
489         c_args: cflags,
490         install_rpath: join_paths(get_option('prefix'),
491              driver_install_path),
492         install: true)
493
494 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
495 message('hugepage availability: @0@'.format(has_hugepage))
496
497 # some perf tests (eg: memcpy perf autotest)take very long
498 # to complete, so timeout to 10 minutes
499 timeout_seconds = 600
500 timeout_seconds_fast = 10
501
502 foreach arg : fast_tests
503     test_args = []
504     run_test = true
505     if not has_hugepage
506         if arg[1]
507             test_args += ['--no-huge', '-m', '2048']
508         else
509             run_test = false
510         endif
511     endif
512
513     if (get_option('default_library') == 'shared' and
514         arg[0] == 'event_eth_tx_adapter_autotest')
515         foreach drv:dpdk_drivers
516             test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
517         endforeach
518     endif
519     if is_linux
520         test_args += ['--file-prefix=@0@'.format(arg[0])]
521     endif
522
523     if run_test
524         test(arg[0], dpdk_test,
525                 env : ['DPDK_TEST=' + arg[0]],
526                 args : test_args,
527                 timeout : timeout_seconds_fast,
528                 is_parallel : false,
529                 suite : 'fast-tests')
530     endif
531 endforeach
532
533 foreach arg : perf_test_names
534     test(arg, dpdk_test,
535             env : ['DPDK_TEST=' + arg],
536             timeout : timeout_seconds,
537             is_parallel : false,
538             suite : 'perf-tests')
539 endforeach
540
541 foreach arg : driver_test_names
542     test(arg, dpdk_test,
543             env : ['DPDK_TEST=' + arg],
544             timeout : timeout_seconds,
545             is_parallel : false,
546             suite : 'driver-tests')
547 endforeach
548
549 foreach arg : dump_test_names
550     test(arg, dpdk_test,
551             env : ['DPDK_TEST=' + arg],
552             timeout : timeout_seconds,
553             is_parallel : false,
554             suite : 'debug-tests')
555 endforeach
556
557 foreach arg : extra_test_names
558     test(arg, dpdk_test,
559             env : ['DPDK_TEST=' + arg],
560             timeout : timeout_seconds,
561             is_parallel : false,
562             suite : 'extra-tests')
563 endforeach