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