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