test: invoke all telemetry commands

Try and call all possible telemetry commands.
Each commands is tested with no argument, 0 (for command that accepts
a single integer like for a port identifier) and z (to catch commands
not properly validating input).
Fake cryptodev, dmadev, ethdev, eventdev and rawdev devices are created
using dummy drivers.

Output of the commands is not checked, the point of this test is mainly
to catch simple issues and leaks (when coupled with ASan in the CI).

Signed-off-by: David Marchand <david.marchand@redhat.com>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
Acked-by: Aaron Conole <aconole@redhat.com>
Acked-by: Ciara Power <ciara.power@intel.com>
This commit is contained in:
David Marchand 2022-07-29 14:42:56 +02:00
parent 3e88909dfe
commit 09521b1cbe
3 changed files with 61 additions and 2 deletions

View File

@ -140,7 +140,7 @@ jobs:
run: sudo apt install -y crossbuild-essential-riscv64 run: sudo apt install -y crossbuild-essential-riscv64
- name: Install test tools packages - name: Install test tools packages
if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RISCV64 != 'true' || env.RUN_TESTS == 'true' if: env.AARCH64 != 'true' || env.PPC64LE != 'true' || env.RISCV64 != 'true' || env.RUN_TESTS == 'true'
run: sudo apt install -y gdb run: sudo apt install -y gdb jq
- name: Install doc generation packages - name: Install doc generation packages
if: env.BUILD_DOCS == 'true' if: env.BUILD_DOCS == 'true'
run: sudo apt install -y doxygen graphviz python3-sphinx run: sudo apt install -y doxygen graphviz python3-sphinx

View File

@ -473,12 +473,14 @@ message('hugepage availability: @0@'.format(has_hugepage))
timeout_seconds = 600 timeout_seconds = 600
timeout_seconds_fast = 10 timeout_seconds_fast = 10
test_no_huge_args = ['--no-huge', '-m', '2048']
foreach arg : fast_tests foreach arg : fast_tests
test_args = [] test_args = []
run_test = true run_test = true
if not has_hugepage if not has_hugepage
if arg[1] if arg[1]
test_args += ['--no-huge', '-m', '2048'] test_args += test_no_huge_args
else else
run_test = false run_test = false
endif endif
@ -518,6 +520,35 @@ foreach arg : fast_tests
endif endif
endforeach endforeach
if not is_windows and dpdk_conf.has('RTE_LIB_TELEMETRY')
test_args = [dpdk_test]
test_args += test_no_huge_args
if get_option('default_library') == 'shared'
test_args += ['-d', dpdk_drivers_build_dir]
endif
if dpdk_conf.has('RTE_CRYPTO_NULL')
test_args += ['--vdev=crypto_null0']
endif
if dpdk_conf.has('RTE_DMA_SKELETON')
test_args += ['--vdev=dma_skeleton0']
endif
if dpdk_conf.has('RTE_EVENT_SKELETON')
test_args += ['--vdev=event_skeleton0']
endif
if dpdk_conf.has('RTE_NET_NULL')
test_args += ['--vdev=net_null0']
endif
if dpdk_conf.has('RTE_RAW_SKELETON')
test_args += ['--vdev=rawdev_skeleton0']
endif
test_args += ['-a', '0000:00:00.0']
test('telemetry_all', find_program('test_telemetry.sh'),
args: test_args,
timeout : timeout_seconds_fast,
is_parallel : false,
suite : 'fast-tests')
endif
foreach arg : perf_test_names foreach arg : perf_test_names
test(arg, dpdk_test, test(arg, dpdk_test,
env : ['DPDK_TEST=' + arg], env : ['DPDK_TEST=' + arg],

28
app/test/test_telemetry.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/sh -e
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2022 Red Hat, Inc.
which jq || {
echo "No jq available, skipping test."
exit 77
}
rootdir=$(readlink -f $(dirname $(readlink -f $0))/../..)
tmpoutput=$(mktemp -t dpdk.test_telemetry.XXXXXX)
trap "cat $tmpoutput; rm -f $tmpoutput" EXIT
call_all_telemetry() {
telemetry_script=$rootdir/usertools/dpdk-telemetry.py
echo >$tmpoutput
echo "Telemetry commands log:" >>$tmpoutput
for cmd in $(echo / | $telemetry_script | jq -r '.["/"][]')
do
for input in $cmd $cmd,0 $cmd,z
do
echo Calling $input >> $tmpoutput
echo $input | $telemetry_script >> $tmpoutput 2>&1
done
done
}
(sleep 1 && call_all_telemetry && echo quit) | $@