xref: /dpdk/app/test/meson.build (revision ca39d3a8)
1# SPDX-License-Identifier: BSD-3-Clause
2# Copyright(c) 2017 Intel Corporation
3
4if not get_option('tests')
5	subdir_done()
6endif
7
8test_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
140test_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.
176fast_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
263perf_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
300driver_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
320dump_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.
335if dpdk_conf.has('RTE_LIBRTE_RING_MEMPOOL')
336	test_deps += 'mempool_ring'
337endif
338if dpdk_conf.has('RTE_LIBRTE_STACK_MEMPOOL')
339	test_deps += 'mempool_stack'
340endif
341if dpdk_conf.has('RTE_LIBRTE_SKELETON_EVENTDEV_PMD')
342	test_deps += 'pmd_skeleton_event'
343endif
344if dpdk_conf.has('RTE_LIBRTE_TELEMETRY')
345	test_sources += 'test_telemetry_json.c'
346	fast_tests += [['telemetry_json_autotest', true]]
347endif
348
349# The following linkages of drivers are required because
350# they are used via a driver-specific API.
351if 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
359endif
360if 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]]
375endif
376
377if dpdk_conf.has('RTE_LIBRTE_POWER')
378	test_deps += 'power'
379endif
380if dpdk_conf.has('RTE_LIBRTE_KNI')
381	test_deps += 'kni'
382endif
383if dpdk_conf.has('RTE_LIBRTE_PDUMP')
384	test_deps += 'pdump'
385endif
386
387if cc.has_argument('-Wno-format-truncation')
388    cflags += '-Wno-format-truncation'
389endif
390
391# specify -D_GNU_SOURCE unconditionally
392cflags += '-D_GNU_SOURCE'
393# Strict-aliasing rules are violated by uint8_t[] to context size casts.
394cflags += '-fno-strict-aliasing'
395
396test_dep_objs = []
397if 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
405endif
406
407if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
408	driver_test_names += 'cryptodev_scheduler_autotest'
409endif
410
411foreach d:test_deps
412	def_lib = get_option('default_library')
413	test_dep_objs += get_variable(def_lib + '_rte_' + d)
414endforeach
415test_dep_objs += cc.find_library('execinfo', required: false)
416
417link_libs = []
418link_nodes = []
419if get_option('default_library') == 'static'
420	link_libs = dpdk_static_libraries + dpdk_drivers
421	link_nodes = dpdk_graph_nodes
422endif
423
424dpdk_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
432has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
433message('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
437timeout_seconds = 600
438timeout_seconds_fast = 10
439
440get_coremask = find_program('get-coremask.sh')
441num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
442
443default_test_args = [num_cores_arg]
444
445foreach 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
474endforeach
475
476foreach 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')
483endforeach
484
485foreach 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')
492endforeach
493
494foreach 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')
501endforeach
502