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