test: create a list of extra tests
[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_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
161 test_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.
200 fast_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
294 # Tests known to have issues or which don't belong in other tests lists.
295 extra_test_names = [
296         'alarm_autotest', # ee00af60170b ("test: remove strict timing requirements some tests")
297         'cycles_autotest', # ee00af60170b ("test: remove strict timing requirements some tests")
298         'delay_us_sleep_autotest', # ee00af60170b ("test: remove strict timing requirements some tests")
299 ]
300
301 perf_test_names = [
302         'ring_perf_autotest',
303         'mempool_perf_autotest',
304         'memcpy_perf_autotest',
305         'hash_perf_autotest',
306         'timer_perf_autotest',
307         'reciprocal_division',
308         'reciprocal_division_perf',
309         'lpm_perf_autotest',
310         'rib_slow_autotest',
311         'fib_slow_autotest',
312         'fib_perf_autotest',
313         'red_all',
314         'pie_all',
315         'barrier_autotest',
316         'hash_multiwriter_autotest',
317         'timer_racecond_autotest',
318         'efd_autotest',
319         'hash_functions_autotest',
320         'member_perf_autotest',
321         'efd_perf_autotest',
322         'lpm6_perf_autotest',
323         'rib6_slow_autotest',
324         'fib6_slow_autotest',
325         'fib6_perf_autotest',
326         'rcu_qsbr_perf_autotest',
327         'red_perf',
328         'pie_perf',
329         'distributor_perf_autotest',
330         'pmd_perf_autotest',
331         'stack_perf_autotest',
332         'stack_lf_perf_autotest',
333         'rand_perf_autotest',
334         'hash_readwrite_perf_autotest',
335         'hash_readwrite_lf_perf_autotest',
336         'trace_perf_autotest',
337         'ipsec_perf_autotest',
338         'thash_perf_autotest',
339 ]
340
341 driver_test_names = [
342         'cryptodev_aesni_mb_autotest',
343         'cryptodev_aesni_gcm_autotest',
344         'cryptodev_cn9k_autotest',
345         'cryptodev_cn10k_autotest',
346         'cryptodev_dpaa_sec_autotest',
347         'cryptodev_dpaa2_sec_autotest',
348         'cryptodev_null_autotest',
349         'cryptodev_octeontx2_autotest',
350         'cryptodev_openssl_autotest',
351         'cryptodev_openssl_asym_autotest',
352         'cryptodev_qat_autotest',
353         'cryptodev_sw_armv8_autotest',
354         'cryptodev_sw_kasumi_autotest',
355         'cryptodev_sw_mvsam_autotest',
356         'cryptodev_sw_snow3g_autotest',
357         'cryptodev_sw_zuc_autotest',
358         'dmadev_autotest',
359         'eventdev_selftest_octeontx',
360         'eventdev_selftest_sw',
361         'rawdev_autotest',
362 ]
363
364 dump_test_names = [
365         'dump_struct_sizes',
366         'dump_mempool',
367         'dump_malloc_stats',
368         'dump_devargs',
369         'dump_log_types',
370         'dump_ring',
371         'dump_physmem',
372         'dump_memzone',
373 ]
374
375 # The following linkages are an exception to allow running the
376 # unit tests without requiring that the developer install the
377 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
378 # in applications should not be used.
379 if dpdk_conf.has('RTE_MEMPOOL_RING')
380     test_deps += 'mempool_ring'
381 endif
382 if dpdk_conf.has('RTE_MEMPOOL_STACK')
383     test_deps += 'mempool_stack'
384 endif
385 if dpdk_conf.has('RTE_EVENT_SKELETON')
386     test_deps += 'event_skeleton'
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 += 'test_bitratestats.c'
410     test_sources += 'test_latencystats.c'
411     test_sources += 'sample_packet_forward.c'
412     test_sources += 'test_pdump.c'
413     fast_tests += [['ring_pmd_autotest', true]]
414     perf_test_names += 'ring_pmd_perf_autotest'
415     fast_tests += [['event_eth_tx_adapter_autotest', false]]
416     fast_tests += [['bitratestats_autotest', true]]
417     fast_tests += [['latencystats_autotest', true]]
418     fast_tests += [['pdump_autotest', true]]
419 endif
420
421 if dpdk_conf.has('RTE_HAS_LIBPCAP')
422     ext_deps += pcap_dep
423     if dpdk_conf.has('RTE_LIB_PCAPNG')
424         test_deps += 'pcapng'
425         test_sources += 'test_pcapng.c'
426     endif
427 endif
428
429 if dpdk_conf.has('RTE_LIB_POWER')
430     test_deps += 'power'
431 endif
432 if dpdk_conf.has('RTE_LIB_KNI')
433     test_deps += 'kni'
434 endif
435 if dpdk_conf.has('RTE_LIB_PDUMP')
436     test_deps += 'pdump'
437 endif
438
439 if cc.has_argument('-Wno-format-truncation')
440     cflags += '-Wno-format-truncation'
441 endif
442
443 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
444 cflags += '-fno-strict-aliasing'
445
446 # Enable using internal APIs in unit tests
447 cflags += ['-DALLOW_INTERNAL_API']
448
449 test_dep_objs = []
450 if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
451     compress_test_dep = dependency('zlib', required: false, method: 'pkg-config')
452     if compress_test_dep.found()
453         test_dep_objs += compress_test_dep
454         test_sources += 'test_compressdev.c'
455         test_deps += 'compressdev'
456         fast_tests += [['compressdev_autotest', false]]
457     endif
458 endif
459
460 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
461     driver_test_names += 'cryptodev_scheduler_autotest'
462     test_deps += 'crypto_scheduler'
463 endif
464
465 foreach d:test_deps
466     def_lib = get_option('default_library')
467     test_dep_objs += get_variable(def_lib + '_rte_' + d)
468 endforeach
469
470 link_libs = []
471 if get_option('default_library') == 'static'
472     link_libs = dpdk_static_libraries + dpdk_drivers
473 endif
474
475 dpdk_test = executable('dpdk-test',
476         test_sources,
477         link_whole: link_libs,
478         dependencies: test_dep_objs + ext_deps,
479         c_args: cflags,
480         install_rpath: join_paths(get_option('prefix'),
481              driver_install_path),
482         install: true)
483
484 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
485 message('hugepage availability: @0@'.format(has_hugepage))
486
487 # some perf tests (eg: memcpy perf autotest)take very long
488 # to complete, so timeout to 10 minutes
489 timeout_seconds = 600
490 timeout_seconds_fast = 10
491
492 foreach arg : fast_tests
493     test_args = []
494     run_test = true
495     if not has_hugepage
496         if arg[1]
497             test_args += ['--no-huge', '-m', '2048']
498         else
499             run_test = false
500         endif
501     endif
502
503     if (get_option('default_library') == 'shared' and
504         arg[0] == 'event_eth_tx_adapter_autotest')
505         foreach drv:dpdk_drivers
506             test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
507         endforeach
508     endif
509     if is_linux
510         test_args += ['--file-prefix=@0@'.format(arg[0])]
511     endif
512
513     if run_test
514         test(arg[0], dpdk_test,
515                 env : ['DPDK_TEST=' + arg[0]],
516                 args : test_args,
517                 timeout : timeout_seconds_fast,
518                 is_parallel : false,
519                 suite : 'fast-tests')
520     endif
521 endforeach
522
523 foreach arg : perf_test_names
524     test(arg, dpdk_test,
525             env : ['DPDK_TEST=' + arg],
526             timeout : timeout_seconds,
527             is_parallel : false,
528             suite : 'perf-tests')
529 endforeach
530
531 foreach arg : driver_test_names
532     test(arg, dpdk_test,
533             env : ['DPDK_TEST=' + arg],
534             timeout : timeout_seconds,
535             is_parallel : false,
536             suite : 'driver-tests')
537 endforeach
538
539 foreach arg : dump_test_names
540     test(arg, dpdk_test,
541             env : ['DPDK_TEST=' + arg],
542             timeout : timeout_seconds,
543             is_parallel : false,
544             suite : 'debug-tests')
545 endforeach
546
547 foreach arg : extra_test_names
548     test(arg, dpdk_test,
549             env : ['DPDK_TEST=' + arg],
550             timeout : timeout_seconds,
551             is_parallel : false,
552             suite : 'extra-tests')
553 endforeach