10f23d53b8a2934e06637cc55958cfbbe00d2057
[dpdk.git] / app / test / meson.build
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2017 Intel Corporation
3
4 if not get_option('tests')
5         subdir_done()
6 endif
7
8 test_sources = files('commands.c',
9         'packet_burst_generator.c',
10         'test.c',
11         'test_acl.c',
12         'test_alarm.c',
13         'test_atomic.c',
14         'test_barrier.c',
15         'test_bitops.c',
16         'test_bpf.c',
17         'test_byteorder.c',
18         'test_cmdline.c',
19         'test_cmdline_cirbuf.c',
20         'test_cmdline_etheraddr.c',
21         'test_cmdline_ipaddr.c',
22         'test_cmdline_lib.c',
23         'test_cmdline_num.c',
24         'test_cmdline_portlist.c',
25         'test_cmdline_string.c',
26         'test_common.c',
27         'test_cpuflags.c',
28         'test_crc.c',
29         'test_cryptodev.c',
30         'test_cryptodev_asym.c',
31         'test_cryptodev_blockcipher.c',
32         'test_cryptodev_security_pdcp.c',
33         'test_cycles.c',
34         'test_debug.c',
35         'test_distributor.c',
36         'test_distributor_perf.c',
37         'test_eal_flags.c',
38         'test_eal_fs.c',
39         'test_efd.c',
40         'test_efd_perf.c',
41         'test_errno.c',
42         'test_event_crypto_adapter.c',
43         'test_event_eth_rx_adapter.c',
44         'test_event_ring.c',
45         'test_event_timer_adapter.c',
46         'test_eventdev.c',
47         'test_external_mem.c',
48         'test_fbarray.c',
49         'test_fib.c',
50         'test_fib_perf.c',
51         'test_fib6.c',
52         'test_fib6_perf.c',
53         'test_func_reentrancy.c',
54         'test_flow_classify.c',
55         'test_graph.c',
56         'test_graph_perf.c',
57         'test_hash.c',
58         'test_hash_functions.c',
59         'test_hash_multiwriter.c',
60         'test_hash_readwrite.c',
61         'test_hash_perf.c',
62         'test_hash_readwrite_lf_perf.c',
63         'test_interrupts.c',
64         'test_ipfrag.c',
65         'test_ipsec.c',
66         'test_ipsec_sad.c',
67         'test_ipsec_perf.c',
68         'test_kni.c',
69         'test_kvargs.c',
70         'test_logs.c',
71         'test_lpm.c',
72         'test_lpm6.c',
73         'test_lpm6_perf.c',
74         'test_lpm_perf.c',
75         'test_malloc.c',
76         'test_mbuf.c',
77         'test_member.c',
78         'test_member_perf.c',
79         'test_memcpy.c',
80         'test_memcpy_perf.c',
81         'test_memory.c',
82         'test_mempool.c',
83         'test_mempool_perf.c',
84         'test_memzone.c',
85         'test_meter.c',
86         'test_metrics.c',
87         'test_mcslock.c',
88         'test_mp_secondary.c',
89         'test_per_lcore.c',
90         'test_pmd_perf.c',
91         'test_power.c',
92         'test_power_cpufreq.c',
93         'test_power_kvm_vm.c',
94         'test_prefetch.c',
95         'test_rand_perf.c',
96         'test_rawdev.c',
97         'test_rcu_qsbr.c',
98         'test_rcu_qsbr_perf.c',
99         'test_reciprocal_division.c',
100         'test_reciprocal_division_perf.c',
101         'test_red.c',
102         'test_reorder.c',
103         'test_rib.c',
104         'test_rib6.c',
105         'test_ring.c',
106         'test_ring_mpmc_stress.c',
107         'test_ring_hts_stress.c',
108         'test_ring_peek_stress.c',
109         'test_ring_perf.c',
110         'test_ring_rts_stress.c',
111         'test_ring_stress.c',
112         'test_rwlock.c',
113         'test_sched.c',
114         'test_security.c',
115         'test_service_cores.c',
116         'test_spinlock.c',
117         'test_stack.c',
118         'test_stack_perf.c',
119         'test_string_fns.c',
120         'test_table.c',
121         'test_table_acl.c',
122         'test_table_combined.c',
123         'test_table_pipeline.c',
124         'test_table_ports.c',
125         'test_table_tables.c',
126         'test_tailq.c',
127         'test_thash.c',
128         'test_timer.c',
129         'test_timer_perf.c',
130         'test_timer_racecond.c',
131         'test_timer_secondary.c',
132         'test_ticketlock.c',
133         'test_trace.c',
134         'test_trace_register.c',
135         'test_trace_perf.c',
136         'test_version.c',
137         'virtual_pmd.c'
138 )
139
140 test_deps = ['acl',
141         'bus_pci',
142         'bus_vdev',
143         'bitratestats',
144         'bpf',
145         'cfgfile',
146         'cmdline',
147         'cryptodev',
148         'distributor',
149         'efd',
150         'ethdev',
151         'eventdev',
152         'fib',
153         'flow_classify',
154         'graph',
155         'hash',
156         'ipsec',
157         'latencystats',
158         'lpm',
159         'member',
160         'metrics',
161         'node',
162         'pipeline',
163         'port',
164         'rawdev',
165         'rcu',
166         'reorder',
167         'rib',
168         'ring',
169         'security',
170         'stack',
171         'timer'
172 ]
173
174 # Each test is marked with flag true/false
175 # to indicate whether it can run in no-huge mode.
176 fast_tests = [
177         ['acl_autotest', true],
178         ['alarm_autotest', false],
179         ['atomic_autotest', false],
180         ['bitops_autotest', true],
181         ['byteorder_autotest', true],
182         ['cmdline_autotest', true],
183         ['common_autotest', true],
184         ['cpuflags_autotest', true],
185         ['cycles_autotest', true],
186         ['debug_autotest', true],
187         ['eal_flags_c_opt_autotest', false],
188         ['eal_flags_master_opt_autotest', false],
189         ['eal_flags_n_opt_autotest', false],
190         ['eal_flags_hpet_autotest', false],
191         ['eal_flags_no_huge_autotest', false],
192         ['eal_flags_w_opt_autotest', false],
193         ['eal_flags_b_opt_autotest', false],
194         ['eal_flags_vdev_opt_autotest', false],
195         ['eal_flags_r_opt_autotest', false],
196         ['eal_flags_mem_autotest', false],
197         ['eal_flags_file_prefix_autotest', false],
198         ['eal_flags_misc_autotest', false],
199         ['eal_fs_autotest', true],
200         ['errno_autotest', true],
201         ['event_ring_autotest', true],
202         ['fib_autotest', true],
203         ['fib6_autotest', true],
204         ['func_reentrancy_autotest', false],
205         ['flow_classify_autotest', false],
206         ['hash_autotest', true],
207         ['interrupt_autotest', true],
208         ['ipfrag_autotest', false],
209         ['logs_autotest', true],
210         ['lpm_autotest', true],
211         ['lpm6_autotest', true],
212         ['malloc_autotest', false],
213         ['mbuf_autotest', false],
214         ['mcslock_autotest', false],
215         ['memcpy_autotest', true],
216         ['memory_autotest', false],
217         ['mempool_autotest', false],
218         ['memzone_autotest', false],
219         ['meter_autotest', true],
220         ['multiprocess_autotest', false],
221         ['per_lcore_autotest', true],
222         ['prefetch_autotest', true],
223         ['rcu_qsbr_autotest', true],
224         ['red_autotest', true],
225         ['rib_autotest', true],
226         ['rib6_autotest', true],
227         ['ring_autotest', true],
228         ['rwlock_test1_autotest', true],
229         ['rwlock_rda_autotest', true],
230         ['rwlock_rds_wrm_autotest', true],
231         ['rwlock_rde_wro_autotest', true],
232         ['sched_autotest', true],
233                 ['security_autotest', false],
234         ['spinlock_autotest', true],
235         ['stack_autotest', false],
236         ['stack_lf_autotest', false],
237         ['string_autotest', true],
238         ['table_autotest', true],
239         ['tailq_autotest', true],
240         ['timer_autotest', false],
241         ['user_delay_us', true],
242         ['version_autotest', true],
243         ['crc_autotest', true],
244         ['delay_us_sleep_autotest', true],
245         ['distributor_autotest', false],
246         ['eventdev_common_autotest', true],
247         ['fbarray_autotest', true],
248         ['hash_readwrite_func_autotest', false],
249         ['ipsec_autotest', true],
250         ['kni_autotest', false],
251         ['kvargs_autotest', true],
252         ['member_autotest', true],
253         ['metrics_autotest', true],
254         ['power_cpufreq_autotest', false],
255         ['power_autotest', true],
256         ['power_kvm_vm_autotest', false],
257         ['reorder_autotest', true],
258         ['service_autotest', true],
259         ['thash_autotest', true],
260         ['trace_autotest', true],
261 ]
262
263 perf_test_names = [
264         'ring_perf_autotest',
265         'mempool_perf_autotest',
266         'memcpy_perf_autotest',
267         'hash_perf_autotest',
268         'timer_perf_autotest',
269         'reciprocal_division',
270         'reciprocal_division_perf',
271         'lpm_perf_autotest',
272         'rib_slow_autotest',
273         'fib_slow_autotest',
274         'fib_perf_autotest',
275         'red_all',
276         'barrier_autotest',
277         'hash_multiwriter_autotest',
278         'timer_racecond_autotest',
279         'efd_autotest',
280         'hash_functions_autotest',
281         'member_perf_autotest',
282         'efd_perf_autotest',
283         'lpm6_perf_autotest',
284         'rib6_slow_autotest',
285         'fib6_slow_autotest',
286         'fib6_perf_autotest',
287         'rcu_qsbr_perf_autotest',
288         'red_perf',
289         'distributor_perf_autotest',
290         'pmd_perf_autotest',
291         'stack_perf_autotest',
292         'stack_lf_perf_autotest',
293         'rand_perf_autotest',
294         'hash_readwrite_perf_autotest',
295         'hash_readwrite_lf_perf_autotest',
296         'trace_perf_autotest',
297         'ipsec_perf_autotest',
298 ]
299
300 driver_test_names = [
301         'cryptodev_aesni_mb_autotest',
302         'cryptodev_aesni_gcm_autotest',
303         'cryptodev_dpaa_sec_autotest',
304         'cryptodev_dpaa2_sec_autotest',
305         'cryptodev_null_autotest',
306         'cryptodev_octeontx2_autotest',
307         'cryptodev_openssl_autotest',
308         'cryptodev_openssl_asym_autotest',
309         'cryptodev_qat_autotest',
310         'cryptodev_sw_armv8_autotest',
311         'cryptodev_sw_kasumi_autotest',
312         'cryptodev_sw_mvsam_autotest',
313         'cryptodev_sw_snow3g_autotest',
314         'cryptodev_sw_zuc_autotest',
315         'eventdev_selftest_octeontx',
316         'eventdev_selftest_sw',
317         'rawdev_autotest',
318 ]
319
320 dump_test_names = [
321         'dump_struct_sizes',
322         'dump_mempool',
323         'dump_malloc_stats',
324         'dump_devargs',
325         'dump_log_types',
326         'dump_ring',
327         'dump_physmem',
328         'dump_memzone',
329 ]
330
331 # The following linkages are an exception to allow running the
332 # unit tests without requiring that the developer install the
333 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
334 # in applications should not be used.
335 if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL')
336         test_deps += 'mempool_ring'
337 endif
338 if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL')
339         test_deps += 'mempool_stack'
340 endif
341 if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD')
342         test_deps += 'pmd_skeleton_event'
343 endif
344 if dpdk_conf.has('RTE_LIBRTE_TELEMETRY')
345         test_sources += 'test_telemetry_json.c'
346         fast_tests += [['telemetry_json_autotest', true]]
347 endif
348
349 # The following linkages of drivers are required because
350 # they are used via a driver-specific API.
351 if dpdk_conf.has('RTE_LIBRTE_BOND_PMD')
352         test_deps += 'pmd_bond'
353         test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
354         driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
355         if dpdk_conf.has('RTE_LIBRTE_RING_PMD')
356                 test_sources += 'test_link_bonding_mode4.c'
357                 driver_test_names += 'link_bonding_mode4_autotest'
358         endif
359 endif
360 if dpdk_conf.has('RTE_LIBRTE_RING_PMD')
361         test_deps += 'pmd_ring'
362         test_sources += 'test_pmd_ring_perf.c'
363         test_sources += 'test_pmd_ring.c'
364         test_sources += 'test_event_eth_tx_adapter.c'
365         test_sources += 'test_bitratestats.c'
366         test_sources += 'test_latencystats.c'
367         test_sources += 'sample_packet_forward.c'
368         test_sources += 'test_pdump.c'
369         fast_tests += [['ring_pmd_autotest', true]]
370         perf_test_names += 'ring_pmd_perf_autotest'
371         fast_tests += [['event_eth_tx_adapter_autotest', false]]
372         fast_tests += [['bitratestats_autotest', true]]
373         fast_tests += [['latencystats_autotest', true]]
374         fast_tests += [['pdump_autotest', true]]
375 endif
376
377 if dpdk_conf.has('RTE_LIBRTE_POWER')
378         test_deps += 'power'
379 endif
380 if dpdk_conf.has('RTE_LIBRTE_KNI')
381         test_deps += 'kni'
382 endif
383 if dpdk_conf.has('RTE_LIBRTE_PDUMP')
384         test_deps += 'pdump'
385 endif
386
387 if cc.has_argument('-Wno-format-truncation')
388     cflags += '-Wno-format-truncation'
389 endif
390
391 # specify -D_GNU_SOURCE unconditionally
392 cflags += '-D_GNU_SOURCE'
393 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
394 cflags += '-fno-strict-aliasing'
395
396 test_dep_objs = []
397 if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV')
398         compress_test_dep = dependency('zlib', required: false)
399         if compress_test_dep.found()
400                 test_dep_objs += compress_test_dep
401                 test_sources += 'test_compressdev.c'
402                 test_deps += 'compressdev'
403                 fast_tests += [['compressdev_autotest', false]]
404         endif
405 endif
406
407 if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
408         driver_test_names += 'cryptodev_scheduler_autotest'
409 endif
410
411 foreach d:test_deps
412         def_lib = get_option('default_library')
413         test_dep_objs += get_variable(def_lib + '_rte_' + d)
414 endforeach
415 test_dep_objs += cc.find_library('execinfo', required: false)
416
417 link_libs = []
418 link_nodes = []
419 if get_option('default_library') == 'static'
420         link_libs = dpdk_drivers
421         link_nodes = dpdk_graph_nodes
422 endif
423
424 dpdk_test = executable('dpdk-test',
425         test_sources,
426         link_whole: link_libs + link_nodes,
427         dependencies: test_dep_objs,
428         c_args: cflags,
429         install_rpath: driver_install_path,
430         install: true)
431
432 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
433 message('hugepage availability: @0@'.format(has_hugepage))
434
435 # some perf tests (eg: memcpy perf autotest)take very long
436 # to complete, so timeout to 10 minutes
437 timeout_seconds = 600
438 timeout_seconds_fast = 10
439
440 get_coremask = find_program('get-coremask.sh')
441 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
442
443 default_test_args = [num_cores_arg]
444
445 foreach arg : fast_tests
446         test_args = default_test_args
447         run_test = true
448         if not has_hugepage
449                 if arg[1]
450                         test_args += ['--no-huge', '-m', '2048']
451                 else
452                         run_test = false
453                 endif
454         endif
455
456         if (get_option('default_library') == 'shared' and
457                 arg[0] == 'event_eth_tx_adapter_autotest')
458                 foreach drv:dpdk_drivers
459                         test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
460                 endforeach
461         endif
462         if is_linux
463                 test_args += ['--file-prefix=@0@'.format(arg[0])]
464         endif
465
466         if run_test
467                 test(arg[0], dpdk_test,
468                         env : ['DPDK_TEST=' + arg[0]],
469                         args : test_args,
470                         timeout : timeout_seconds_fast,
471                         is_parallel : false,
472                         suite : 'fast-tests')
473         endif
474 endforeach
475
476 foreach arg : perf_test_names
477         test(arg, dpdk_test,
478         env : ['DPDK_TEST=' + arg],
479         args : default_test_args,
480         timeout : timeout_seconds,
481         is_parallel : false,
482         suite : 'perf-tests')
483 endforeach
484
485 foreach arg : driver_test_names
486         test(arg, dpdk_test,
487                 env : ['DPDK_TEST=' + arg],
488                 args : default_test_args,
489                 timeout : timeout_seconds,
490                 is_parallel : false,
491                 suite : 'driver-tests')
492 endforeach
493
494 foreach arg : dump_test_names
495         test(arg, dpdk_test,
496                 env : ['DPDK_TEST=' + arg],
497                 args : default_test_args,
498                 timeout : timeout_seconds,
499                 is_parallel : false,
500                 suite : 'debug-tests')
501 endforeach