Message ID | 1467705714-9511-1-git-send-email-maxim.uvarov@linaro.org |
---|---|
State | New |
Headers | show |
ping, there was question about autotools inside the patch. Can somebody replay please? Thank you, Maxim. On 07/05/16 11:01, Maxim Uvarov wrote: > Use vlan tagged traffic for example validation test > to add code coverage for pkt_mmap_vlan_insert() internal > function. > > Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> > --- > In general this patch work and tests internal function. But there > is one small issue related to autotools which I don't know how to > fix better: > make; make check works, but make check after clean fails example/packet/odp_pktio > binary is not yet build while tests going to be executed. The only thing which > cames to my mind is to reorder root directory Makefile.am and add "-" between tests > and examples. In that case examples should be compiled before any test compilation/execution. > Is that a right way to do? > > Thanks, > Maxim. > > test/platform/linux-generic/Makefile.am | 6 ++- > test/platform/linux-generic/pktio/.gitignore | 1 + > test/platform/linux-generic/pktio/Makefile.am | 1 + > .../platform/linux-generic/pktio/pktio_run_vlan.sh | 46 +++++++++++++++++++++ > test/platform/linux-generic/pktio/vlan.pcap | Bin 0 -> 9728 bytes > 5 files changed, 53 insertions(+), 1 deletion(-) > create mode 100755 test/platform/linux-generic/pktio/pktio_run_vlan.sh > create mode 100644 test/platform/linux-generic/pktio/vlan.pcap > > diff --git a/test/platform/linux-generic/Makefile.am b/test/platform/linux-generic/Makefile.am > index 2d58c57..597a1c1 100644 > --- a/test/platform/linux-generic/Makefile.am > +++ b/test/platform/linux-generic/Makefile.am > @@ -39,6 +39,9 @@ SUBDIRS = $(ODP_MODULES) > > if HAVE_PCAP > TESTS += pktio/pktio_run_pcap.sh > +if test_example > +TESTS += pktio/pktio_run_vlan.sh > +endif > endif > if PKTIO_IPC > TESTS += pktio_ipc/pktio_ipc_run.sh > @@ -54,7 +57,8 @@ endif > > TEST_EXTENSIONS = .sh > > -dist_check_SCRIPTS = run-test tests-validation.env $(LOG_COMPILER) > +dist_check_SCRIPTS = run-test tests-validation.env $(LOG_COMPILER) \ > + pktio/vlan.pcap > > test_SCRIPTS = $(dist_check_SCRIPTS) > > diff --git a/test/platform/linux-generic/pktio/.gitignore b/test/platform/linux-generic/pktio/.gitignore > index 7e563b8..5f75e14 100644 > --- a/test/platform/linux-generic/pktio/.gitignore > +++ b/test/platform/linux-generic/pktio/.gitignore > @@ -1,2 +1,3 @@ > *.log > *.trs > +*.pcap > diff --git a/test/platform/linux-generic/pktio/Makefile.am b/test/platform/linux-generic/pktio/Makefile.am > index 4a14343..094a222 100644 > --- a/test/platform/linux-generic/pktio/Makefile.am > +++ b/test/platform/linux-generic/pktio/Makefile.am > @@ -4,6 +4,7 @@ dist_check_SCRIPTS = pktio_env \ > > if HAVE_PCAP > dist_check_SCRIPTS += pktio_run_pcap.sh > +dist_check_SCRIPTS += pktio_run_vlan.sh > endif > if netmap_support > dist_check_SCRIPTS += pktio_run_netmap.sh > diff --git a/test/platform/linux-generic/pktio/pktio_run_vlan.sh b/test/platform/linux-generic/pktio/pktio_run_vlan.sh > new file mode 100755 > index 0000000..b58aacb > --- /dev/null > +++ b/test/platform/linux-generic/pktio/pktio_run_vlan.sh > @@ -0,0 +1,46 @@ > +#!/bin/sh > +# > +# Copyright (c) 2016, Linaro Limited > +# All rights reserved. > +# > +# SPDX-License-Identifier: BSD-3-Clause > +# > + > +# > +# This test is intend to test pkt_mmap_vlan_insert() feature for > +# linux-generic packet mmap pktio. > +# > +# > + > +# any parameter passed as arguments to this script is passed unchanged to > +# the test itself (pktio_main) > + > +# directories where pktio_main binary can be found: > +# -in the validation dir when running make check (intree or out of tree) > +# -in the script directory, when running after 'make install', or > +# -in the validation when running standalone intree. > +# -in the current directory. > +# running stand alone out of tree requires setting PATH > +PATH=${TEST_DIR}/pktio:$PATH > +PATH=$(dirname $0):$PATH > +PATH=../../../example/packet:$PATH > +PATH=../../../../_inst/bin:$PATH > +PATH=.:$PATH > + > +odp_pktio_path=$(which odp_pktio${EXEEXT}) > +if [ -x "$odp_pktio_path" ] ; then > + echo "running with $odp_pktio_path" > +else > + pwd > + echo $PATH > + echo "cannot find odp_pktio${EXEEXT}: please set you PATH for it." > + exit 1 > +fi > + > +PCAP_IN=`find . ${TEST_DIR} $(dirname $0) -name vlan.pcap -print -quit` > +echo "using PCAP_IN = ${PCAP_IN}" > +PCAP_OUT=vlan_out.pcap > +odp_pktio${EXEEXT} -ipcap:in=${PCAP_IN}:out=${PCAP_OUT} -t 1 -m 0 > +ret=$? > +rm -f ${PCAP_OUT} > +exit $ret > diff --git a/test/platform/linux-generic/pktio/vlan.pcap b/test/platform/linux-generic/pktio/vlan.pcap > new file mode 100644 > index 0000000000000000000000000000000000000000..106ccb682e51495b4025337518a0bce63c2c7681 > GIT binary patch > literal 9728 > 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 > H$A|v_$relS > > literal 0 > HcmV?d00001 >
diff --git a/test/platform/linux-generic/Makefile.am b/test/platform/linux-generic/Makefile.am index 2d58c57..597a1c1 100644 --- a/test/platform/linux-generic/Makefile.am +++ b/test/platform/linux-generic/Makefile.am @@ -39,6 +39,9 @@ SUBDIRS = $(ODP_MODULES) if HAVE_PCAP TESTS += pktio/pktio_run_pcap.sh +if test_example +TESTS += pktio/pktio_run_vlan.sh +endif endif if PKTIO_IPC TESTS += pktio_ipc/pktio_ipc_run.sh @@ -54,7 +57,8 @@ endif TEST_EXTENSIONS = .sh -dist_check_SCRIPTS = run-test tests-validation.env $(LOG_COMPILER) +dist_check_SCRIPTS = run-test tests-validation.env $(LOG_COMPILER) \ + pktio/vlan.pcap test_SCRIPTS = $(dist_check_SCRIPTS) diff --git a/test/platform/linux-generic/pktio/.gitignore b/test/platform/linux-generic/pktio/.gitignore index 7e563b8..5f75e14 100644 --- a/test/platform/linux-generic/pktio/.gitignore +++ b/test/platform/linux-generic/pktio/.gitignore @@ -1,2 +1,3 @@ *.log *.trs +*.pcap diff --git a/test/platform/linux-generic/pktio/Makefile.am b/test/platform/linux-generic/pktio/Makefile.am index 4a14343..094a222 100644 --- a/test/platform/linux-generic/pktio/Makefile.am +++ b/test/platform/linux-generic/pktio/Makefile.am @@ -4,6 +4,7 @@ dist_check_SCRIPTS = pktio_env \ if HAVE_PCAP dist_check_SCRIPTS += pktio_run_pcap.sh +dist_check_SCRIPTS += pktio_run_vlan.sh endif if netmap_support dist_check_SCRIPTS += pktio_run_netmap.sh diff --git a/test/platform/linux-generic/pktio/pktio_run_vlan.sh b/test/platform/linux-generic/pktio/pktio_run_vlan.sh new file mode 100755 index 0000000..b58aacb --- /dev/null +++ b/test/platform/linux-generic/pktio/pktio_run_vlan.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# +# Copyright (c) 2016, Linaro Limited +# All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +# +# This test is intend to test pkt_mmap_vlan_insert() feature for +# linux-generic packet mmap pktio. +# +# + +# any parameter passed as arguments to this script is passed unchanged to +# the test itself (pktio_main) + +# directories where pktio_main binary can be found: +# -in the validation dir when running make check (intree or out of tree) +# -in the script directory, when running after 'make install', or +# -in the validation when running standalone intree. +# -in the current directory. +# running stand alone out of tree requires setting PATH +PATH=${TEST_DIR}/pktio:$PATH +PATH=$(dirname $0):$PATH +PATH=../../../example/packet:$PATH +PATH=../../../../_inst/bin:$PATH +PATH=.:$PATH + +odp_pktio_path=$(which odp_pktio${EXEEXT}) +if [ -x "$odp_pktio_path" ] ; then + echo "running with $odp_pktio_path" +else + pwd + echo $PATH + echo "cannot find odp_pktio${EXEEXT}: please set you PATH for it." + exit 1 +fi + +PCAP_IN=`find . ${TEST_DIR} $(dirname $0) -name vlan.pcap -print -quit` +echo "using PCAP_IN = ${PCAP_IN}" +PCAP_OUT=vlan_out.pcap +odp_pktio${EXEEXT} -ipcap:in=${PCAP_IN}:out=${PCAP_OUT} -t 1 -m 0 +ret=$? +rm -f ${PCAP_OUT} +exit $ret
Use vlan tagged traffic for example validation test to add code coverage for pkt_mmap_vlan_insert() internal function. Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- In general this patch work and tests internal function. But there is one small issue related to autotools which I don't know how to fix better: make; make check works, but make check after clean fails example/packet/odp_pktio binary is not yet build while tests going to be executed. The only thing which cames to my mind is to reorder root directory Makefile.am and add "-" between tests and examples. In that case examples should be compiled before any test compilation/execution. Is that a right way to do? Thanks, Maxim. test/platform/linux-generic/Makefile.am | 6 ++- test/platform/linux-generic/pktio/.gitignore | 1 + test/platform/linux-generic/pktio/Makefile.am | 1 + .../platform/linux-generic/pktio/pktio_run_vlan.sh | 46 +++++++++++++++++++++ test/platform/linux-generic/pktio/vlan.pcap | Bin 0 -> 9728 bytes 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100755 test/platform/linux-generic/pktio/pktio_run_vlan.sh create mode 100644 test/platform/linux-generic/pktio/vlan.pcap diff --git a/test/platform/linux-generic/pktio/vlan.pcap b/test/platform/linux-generic/pktio/vlan.pcap new file mode 100644 index 0000000000000000000000000000000000000000..106ccb682e51495b4025337518a0bce63c2c7681 GIT binary patch literal 9728 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 H$A|v_$relS literal 0 HcmV?d00001