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