0d261b113833d7b56b20586ca43337d6c623122f
[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_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
359 dump_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.
374 if dpdk_conf.has('RTE_MEMPOOL_RING')
375     test_deps += 'mempool_ring'
376 endif
377 if dpdk_conf.has('RTE_MEMPOOL_STACK')
378     test_deps += 'mempool_stack'
379 endif
380 if dpdk_conf.has('RTE_EVENT_SKELETON')
381     test_deps += 'event_skeleton'
382 endif
383 if dpdk_conf.has('RTE_LIB_METRICS')
384     test_deps += 'metrics'
385     test_sources += ['test_metrics.c']
386     fast_tests += [['metrics_autotest', true]]
387 endif
388 if 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]]
391 endif
392
393 # The following linkages of drivers are required because
394 # they are used via a driver-specific API.
395 if 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
403 endif
404 if 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     test_sources += 'test_pdump.c'
411     fast_tests += [['ring_pmd_autotest', true]]
412     perf_test_names += 'ring_pmd_perf_autotest'
413     fast_tests += [['event_eth_tx_adapter_autotest', false]]
414     fast_tests += [['pdump_autotest', true]]
415     if dpdk_conf.has('RTE_LIB_BITRATESTATS')
416         test_deps += 'bitratestats'
417         test_sources += 'test_bitratestats.c'
418         fast_tests += [['bitratestats_autotest', true]]
419     endif
420     if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
421         test_deps += 'latencystats'
422         test_sources += 'test_latencystats.c'
423         fast_tests += [['latencystats_autotest', true]]
424     endif
425 endif
426
427 if dpdk_conf.has('RTE_HAS_LIBPCAP')
428     ext_deps += pcap_dep
429     if dpdk_conf.has('RTE_LIB_PCAPNG')
430         test_deps += 'pcapng'
431         test_sources += 'test_pcapng.c'
432     endif
433 endif
434
435 if dpdk_conf.has('RTE_LIB_POWER')
436     test_deps += 'power'
437 endif
438 if dpdk_conf.has('RTE_LIB_KNI')
439     test_deps += 'kni'
440 endif
441 if dpdk_conf.has('RTE_LIB_PDUMP')
442     test_deps += 'pdump'
443 endif
444
445 if cc.has_argument('-Wno-format-truncation')
446     cflags += '-Wno-format-truncation'
447 endif
448
449 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
450 cflags += '-fno-strict-aliasing'
451
452 # Enable using internal APIs in unit tests
453 cflags += ['-DALLOW_INTERNAL_API']
454
455 test_dep_objs = []
456 if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
457     compress_test_dep = dependency('zlib', required: false, method: 'pkg-config')
458     if compress_test_dep.found()
459         test_dep_objs += compress_test_dep
460         test_sources += 'test_compressdev.c'
461         test_deps += 'compressdev'
462         fast_tests += [['compressdev_autotest', false]]
463     endif
464 endif
465
466 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
467     driver_test_names += 'cryptodev_scheduler_autotest'
468     test_deps += 'crypto_scheduler'
469 endif
470
471 foreach d:test_deps
472     def_lib = get_option('default_library')
473     test_dep_objs += get_variable(def_lib + '_rte_' + d)
474 endforeach
475
476 link_libs = []
477 if get_option('default_library') == 'static'
478     link_libs = dpdk_static_libraries + dpdk_drivers
479 endif
480
481 dpdk_test = executable('dpdk-test',
482         test_sources,
483         link_whole: link_libs,
484         dependencies: test_dep_objs + ext_deps,
485         c_args: cflags,
486         install_rpath: join_paths(get_option('prefix'),
487              driver_install_path),
488         install: true)
489
490 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
491 message('hugepage availability: @0@'.format(has_hugepage))
492
493 # some perf tests (eg: memcpy perf autotest)take very long
494 # to complete, so timeout to 10 minutes
495 timeout_seconds = 600
496 timeout_seconds_fast = 10
497
498 foreach arg : fast_tests
499     test_args = []
500     run_test = true
501     if not has_hugepage
502         if arg[1]
503             test_args += ['--no-huge', '-m', '2048']
504         else
505             run_test = false
506         endif
507     endif
508
509     if (get_option('default_library') == 'shared' and
510         arg[0] == 'event_eth_tx_adapter_autotest')
511         foreach drv:dpdk_drivers
512             test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
513         endforeach
514     endif
515     if is_linux
516         test_args += ['--file-prefix=@0@'.format(arg[0])]
517     endif
518
519     if run_test
520         test(arg[0], dpdk_test,
521                 env : ['DPDK_TEST=' + arg[0]],
522                 args : test_args,
523                 timeout : timeout_seconds_fast,
524                 is_parallel : false,
525                 suite : 'fast-tests')
526     endif
527 endforeach
528
529 foreach arg : perf_test_names
530     test(arg, dpdk_test,
531             env : ['DPDK_TEST=' + arg],
532             timeout : timeout_seconds,
533             is_parallel : false,
534             suite : 'perf-tests')
535 endforeach
536
537 foreach arg : driver_test_names
538     test(arg, dpdk_test,
539             env : ['DPDK_TEST=' + arg],
540             timeout : timeout_seconds,
541             is_parallel : false,
542             suite : 'driver-tests')
543 endforeach
544
545 foreach arg : dump_test_names
546     test(arg, dpdk_test,
547             env : ['DPDK_TEST=' + arg],
548             timeout : timeout_seconds,
549             is_parallel : false,
550             suite : 'debug-tests')
551 endforeach
552
553 foreach arg : extra_test_names
554     test(arg, dpdk_test,
555             env : ['DPDK_TEST=' + arg],
556             timeout : timeout_seconds,
557             is_parallel : false,
558             suite : 'extra-tests')
559 endforeach