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