777c536ae0d0a7ba97febbf263d2289929142348
[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_perf.c',
104         'test_rwlock.c',
105         'test_sched.c',
106         'test_service_cores.c',
107         'test_spinlock.c',
108         'test_stack.c',
109         'test_stack_perf.c',
110         'test_string_fns.c',
111         'test_table.c',
112         'test_table_acl.c',
113         'test_table_combined.c',
114         'test_table_pipeline.c',
115         'test_table_ports.c',
116         'test_table_tables.c',
117         'test_tailq.c',
118         'test_thash.c',
119         'test_timer.c',
120         'test_timer_perf.c',
121         'test_timer_racecond.c',
122         'test_timer_secondary.c',
123         'test_ticketlock.c',
124         'test_version.c',
125         'virtual_pmd.c'
126 )
127
128 test_deps = ['acl',
129         'bitratestats',
130         'bpf',
131         'cfgfile',
132         'cmdline',
133         'cryptodev',
134         'distributor',
135         'efd',
136         'ethdev',
137         'eventdev',
138         'fib',
139         'flow_classify',
140         'hash',
141         'ipsec',
142         'latencystats',
143         'lpm',
144         'member',
145         'metrics',
146         'pipeline',
147         'port',
148         'rawdev',
149         'rcu',
150         'reorder',
151         'rib',
152         'ring',
153         'stack',
154         'timer'
155 ]
156
157 # Each test is marked with flag true/false
158 # to indicate whether it can run in no-huge mode.
159 fast_tests = [
160         ['acl_autotest', true],
161         ['alarm_autotest', false],
162         ['atomic_autotest', false],
163         ['byteorder_autotest', true],
164         ['cmdline_autotest', true],
165         ['common_autotest', true],
166         ['cpuflags_autotest', true],
167         ['cycles_autotest', true],
168         ['debug_autotest', true],
169         ['eal_flags_c_opt_autotest', false],
170         ['eal_flags_master_opt_autotest', false],
171         ['eal_flags_n_opt_autotest', false],
172         ['eal_flags_hpet_autotest', false],
173         ['eal_flags_no_huge_autotest', false],
174         ['eal_flags_w_opt_autotest', false],
175         ['eal_flags_b_opt_autotest', false],
176         ['eal_flags_vdev_opt_autotest', false],
177         ['eal_flags_r_opt_autotest', false],
178         ['eal_flags_mem_autotest', false],
179         ['eal_flags_file_prefix_autotest', false],
180         ['eal_flags_misc_autotest', false],
181         ['eal_fs_autotest', true],
182         ['errno_autotest', true],
183         ['event_ring_autotest', true],
184         ['fib_autotest', true],
185         ['fib6_autotest', true],
186         ['func_reentrancy_autotest', false],
187         ['flow_classify_autotest', false],
188         ['hash_autotest', true],
189         ['interrupt_autotest', true],
190         ['logs_autotest', true],
191         ['lpm_autotest', true],
192         ['lpm6_autotest', true],
193         ['malloc_autotest', false],
194         ['mbuf_autotest', false],
195         ['mcslock_autotest', false],
196         ['memcpy_autotest', true],
197         ['memory_autotest', false],
198         ['mempool_autotest', false],
199         ['memzone_autotest', false],
200         ['meter_autotest', true],
201         ['multiprocess_autotest', false],
202         ['per_lcore_autotest', true],
203         ['prefetch_autotest', true],
204         ['rcu_qsbr_autotest', true],
205         ['red_autotest', true],
206         ['rib_autotest', true],
207         ['rib6_autotest', true],
208         ['ring_autotest', true],
209         ['rwlock_test1_autotest', true],
210         ['rwlock_rda_autotest', true],
211         ['rwlock_rds_wrm_autotest', true],
212         ['rwlock_rde_wro_autotest', true],
213         ['sched_autotest', true],
214         ['spinlock_autotest', true],
215         ['stack_autotest', false],
216         ['stack_lf_autotest', false],
217         ['string_autotest', true],
218         ['table_autotest', true],
219         ['tailq_autotest', true],
220         ['timer_autotest', false],
221         ['user_delay_us', true],
222         ['version_autotest', true],
223         ['crc_autotest', true],
224         ['delay_us_sleep_autotest', true],
225         ['distributor_autotest', false],
226         ['eventdev_common_autotest', true],
227         ['fbarray_autotest', true],
228         ['hash_readwrite_func_autotest', false],
229         ['ipsec_autotest', true],
230         ['kni_autotest', false],
231         ['kvargs_autotest', true],
232         ['member_autotest', true],
233         ['metrics_autotest', true],
234         ['power_cpufreq_autotest', false],
235         ['power_autotest', true],
236         ['power_kvm_vm_autotest', false],
237         ['reorder_autotest', true],
238         ['service_autotest', true],
239         ['thash_autotest', true],
240 ]
241
242 perf_test_names = [
243         'ring_perf_autotest',
244         'mempool_perf_autotest',
245         'memcpy_perf_autotest',
246         'hash_perf_autotest',
247         'timer_perf_autotest',
248         'reciprocal_division',
249         'reciprocal_division_perf',
250         'lpm_perf_autotest',
251         'rib_slow_autotest',
252         'fib_slow_autotest',
253         'fib_perf_autotest',
254         'red_all',
255         'barrier_autotest',
256         'hash_multiwriter_autotest',
257         'timer_racecond_autotest',
258         'efd_autotest',
259         'hash_functions_autotest',
260         'member_perf_autotest',
261         'efd_perf_autotest',
262         'lpm6_perf_autotest',
263         'rib6_slow_autotest',
264         'fib6_slow_autotest',
265         'fib6_perf_autotest',
266         'rcu_qsbr_perf_autotest',
267         'red_perf',
268         'distributor_perf_autotest',
269         'pmd_perf_autotest',
270         'stack_perf_autotest',
271         'stack_lf_perf_autotest',
272         'rand_perf_autotest',
273         'hash_readwrite_perf_autotest',
274         'hash_readwrite_lf_perf_autotest',
275 ]
276
277 driver_test_names = [
278         'cryptodev_aesni_mb_autotest',
279         'cryptodev_aesni_gcm_autotest',
280         'cryptodev_dpaa_sec_autotest',
281         'cryptodev_dpaa2_sec_autotest',
282         'cryptodev_null_autotest',
283         'cryptodev_octeontx2_autotest',
284         'cryptodev_openssl_autotest',
285         'cryptodev_openssl_asym_autotest',
286         'cryptodev_qat_autotest',
287         'cryptodev_sw_armv8_autotest',
288         'cryptodev_sw_kasumi_autotest',
289         'cryptodev_sw_mvsam_autotest',
290         'cryptodev_sw_snow3g_autotest',
291         'cryptodev_sw_zuc_autotest',
292         'eventdev_selftest_octeontx',
293         'eventdev_selftest_sw',
294         'link_bonding_autotest',
295         'link_bonding_rssconf_autotest',
296         'rawdev_autotest',
297 ]
298
299 dump_test_names = [
300         'dump_struct_sizes',
301         'dump_mempool',
302         'dump_malloc_stats',
303         'dump_devargs',
304         'dump_log_types',
305         'dump_ring',
306         'dump_physmem',
307         'dump_memzone',
308 ]
309
310 # The following linkages are an exception to allow running the
311 # unit tests without requiring that the developer install the
312 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
313 # in applications should not be used.
314 if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL')
315         test_deps += 'mempool_ring'
316 endif
317 if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL')
318         test_deps += 'mempool_stack'
319 endif
320 if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD')
321         test_deps += 'pmd_skeleton_event'
322 endif
323
324 # The following linkages of drivers are required because
325 # they are used via a driver-specific API.
326 if dpdk_conf.has('RTE_LIBRTE_BOND_PMD')
327         test_deps += 'pmd_bond'
328 endif
329 if dpdk_conf.has('RTE_LIBRTE_RING_PMD')
330         test_deps += 'pmd_ring'
331         test_sources += 'test_pmd_ring_perf.c'
332         test_sources += 'test_pmd_ring.c'
333         test_sources += 'test_event_eth_tx_adapter.c'
334         test_sources += 'test_bitratestats.c'
335         test_sources += 'test_latencystats.c'
336         test_sources += 'test_link_bonding_mode4.c'
337         test_sources += 'sample_packet_forward.c'
338         test_sources += 'test_pdump.c'
339         fast_tests += [['ring_pmd_autotest', true]]
340         perf_test_names += 'ring_pmd_perf_autotest'
341         fast_tests += [['event_eth_tx_adapter_autotest', false]]
342         fast_tests += [['bitratestats_autotest', true]]
343         fast_tests += [['latencystats_autotest', true]]
344         driver_test_names += 'link_bonding_mode4_autotest'
345         fast_tests += [['pdump_autotest', true]]
346 endif
347
348 if dpdk_conf.has('RTE_LIBRTE_POWER')
349         test_deps += 'power'
350 endif
351 if dpdk_conf.has('RTE_LIBRTE_KNI')
352         test_deps += 'kni'
353 endif
354 if dpdk_conf.has('RTE_LIBRTE_PDUMP')
355         test_deps += 'pdump'
356 endif
357
358 if cc.has_argument('-Wno-format-truncation')
359     cflags += '-Wno-format-truncation'
360 endif
361
362 # specify -D_GNU_SOURCE unconditionally
363 cflags += '-D_GNU_SOURCE'
364
365 test_dep_objs = []
366 if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV')
367         compress_test_dep = dependency('zlib', required: false)
368         if compress_test_dep.found()
369                 test_dep_objs += compress_test_dep
370                 test_sources += 'test_compressdev.c'
371                 test_deps += 'compressdev'
372                 fast_tests += [['compressdev_autotest', false]]
373         endif
374 endif
375
376 if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
377         driver_test_names += 'cryptodev_scheduler_autotest'
378 endif
379
380 foreach d:test_deps
381         def_lib = get_option('default_library')
382         test_dep_objs += get_variable(def_lib + '_rte_' + d)
383 endforeach
384 test_dep_objs += cc.find_library('execinfo', required: false)
385
386 link_libs = []
387 if get_option('default_library') == 'static'
388         link_libs = dpdk_drivers
389 endif
390
391 dpdk_test = executable('dpdk-test',
392         test_sources,
393         link_whole: link_libs,
394         dependencies: test_dep_objs,
395         c_args: cflags,
396         install_rpath: driver_install_path,
397         install: true)
398
399 has_hugepage = true
400 if is_linux
401         check_hugepage = run_command('cat',
402                                      '/proc/sys/vm/nr_hugepages')
403         if (check_hugepage.returncode() != 0 or
404             check_hugepage.stdout().strip() == '0')
405                 has_hugepage = false
406         endif
407 endif
408 message('hugepage availability: @0@'.format(has_hugepage))
409
410 # some perf tests (eg: memcpy perf autotest)take very long
411 # to complete, so timeout to 10 minutes
412 timeout_seconds = 600
413 timeout_seconds_fast = 10
414
415 get_coremask = find_program('get-coremask.sh')
416 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
417
418 default_test_args = [num_cores_arg]
419
420 foreach arg : fast_tests
421         test_args = default_test_args
422         run_test = true
423         if not has_hugepage
424                 if arg[1]
425                         test_args += ['--no-huge', '-m', '2048']
426                 else
427                         run_test = false
428                 endif
429         endif
430
431         if (get_option('default_library') == 'shared' and
432                 arg[0] == 'event_eth_tx_adapter_autotest')
433                 foreach drv:dpdk_drivers
434                         test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
435                 endforeach
436         endif
437         if is_linux
438                 test_args += ['--file-prefix=@0@'.format(arg[0])]
439         endif
440
441         if run_test
442                 test(arg[0], dpdk_test,
443                         env : ['DPDK_TEST=' + arg[0]],
444                         args : test_args,
445                         timeout : timeout_seconds_fast,
446                         is_parallel : false,
447                         suite : 'fast-tests')
448         endif
449 endforeach
450
451 foreach arg : perf_test_names
452         test(arg, dpdk_test,
453         env : ['DPDK_TEST=' + arg],
454         args : default_test_args,
455         timeout : timeout_seconds,
456         is_parallel : false,
457         suite : 'perf-tests')
458 endforeach
459
460 foreach arg : driver_test_names
461         test(arg, dpdk_test,
462                 env : ['DPDK_TEST=' + arg],
463                 args : default_test_args,
464                 timeout : timeout_seconds,
465                 is_parallel : false,
466                 suite : 'driver-tests')
467 endforeach
468
469 foreach arg : dump_test_names
470         test(arg, dpdk_test,
471                 env : ['DPDK_TEST=' + arg],
472                 args : default_test_args,
473                 timeout : timeout_seconds,
474                 is_parallel : false,
475                 suite : 'debug-tests')
476 endforeach