test: allow no-huge mode for fast-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_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 cflags = machine_args
359 if cc.has_argument('-Wno-format-truncation')
360     cflags += '-Wno-format-truncation'
361 endif
362
363 # specify -D_GNU_SOURCE unconditionally
364 cflags += '-D_GNU_SOURCE'
365
366 test_dep_objs = []
367 if dpdk_conf.has('RTE_LIBRTE_COMPRESSDEV')
368         compress_test_dep = dependency('zlib', required: false)
369         if compress_test_dep.found()
370                 test_dep_objs += compress_test_dep
371                 test_sources += 'test_compressdev.c'
372                 test_deps += 'compressdev'
373                 fast_tests += [['compressdev_autotest', false]]
374         endif
375 endif
376
377 if dpdk_conf.has('RTE_LIBRTE_PMD_CRYPTO_SCHEDULER')
378         driver_test_names += 'cryptodev_scheduler_autotest'
379 endif
380
381 foreach d:test_deps
382         def_lib = get_option('default_library')
383         test_dep_objs += get_variable(def_lib + '_rte_' + d)
384 endforeach
385 test_dep_objs += cc.find_library('execinfo', required: false)
386
387 link_libs = []
388 if get_option('default_library') == 'static'
389         link_libs = dpdk_drivers
390 endif
391
392 dpdk_test = executable('dpdk-test',
393         test_sources,
394         link_whole: link_libs,
395         dependencies: test_dep_objs,
396         c_args: [cflags, '-DALLOW_EXPERIMENTAL_API'],
397         install_rpath: driver_install_path,
398         install: true)
399
400 has_hugepage = true
401 if is_linux
402         check_hugepage = run_command('cat',
403                                      '/proc/sys/vm/nr_hugepages')
404         if (check_hugepage.returncode() != 0 or
405             check_hugepage.stdout().strip() == '0')
406                 has_hugepage = false
407         endif
408 endif
409 message('hugepage availability: @0@'.format(has_hugepage))
410
411 # some perf tests (eg: memcpy perf autotest)take very long
412 # to complete, so timeout to 10 minutes
413 timeout_seconds = 600
414 timeout_seconds_fast = 10
415
416 get_coremask = find_program('get-coremask.sh')
417 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
418
419 default_test_args = [num_cores_arg]
420
421 foreach arg : fast_tests
422         test_args = default_test_args
423         run_test = true
424         if not has_hugepage
425                 if arg[1]
426                         test_args += ['--no-huge', '-m', '2048']
427                 else
428                         run_test = false
429                 endif
430         endif
431
432         if (get_option('default_library') == 'shared' and
433                 arg[0] == 'event_eth_tx_adapter_autotest')
434                 foreach drv:dpdk_drivers
435                         test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
436                 endforeach
437         endif
438         if is_linux
439                 test_args += ['--file-prefix=@0@'.format(arg[0])]
440         endif
441
442         if run_test
443                 test(arg[0], dpdk_test,
444                         env : ['DPDK_TEST=' + arg[0]],
445                         args : test_args,
446                         timeout : timeout_seconds_fast,
447                         is_parallel : false,
448                         suite : 'fast-tests')
449         endif
450 endforeach
451
452 foreach arg : perf_test_names
453         test(arg, dpdk_test,
454         env : ['DPDK_TEST=' + arg],
455         args : default_test_args,
456         timeout : timeout_seconds,
457         is_parallel : false,
458         suite : 'perf-tests')
459 endforeach
460
461 foreach arg : driver_test_names
462         test(arg, dpdk_test,
463                 env : ['DPDK_TEST=' + arg],
464                 args : default_test_args,
465                 timeout : timeout_seconds,
466                 is_parallel : false,
467                 suite : 'driver-tests')
468 endforeach
469
470 foreach arg : dump_test_names
471         test(arg, dpdk_test,
472                 env : ['DPDK_TEST=' + arg],
473                 args : default_test_args,
474                 timeout : timeout_seconds,
475                 is_parallel : false,
476                 suite : 'debug-tests')
477 endforeach