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