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