On 25 March 2015 at 12:32, Maxim Uvarov <[email protected]> wrote:

> Different platforms need different steps to set up pktio for testing. That
> might be veth devices for linux-generic, kernel modules and extended set up
> for dpdk and simple set pktio testing names for other platforms. This patch
> implements platform/test/pktio_env file which sets up global envs for
> pktio.
> As prof of validation that it works l2fwd is added to make check.
>
> Signed-off-by: Maxim Uvarov <[email protected]>
> ---
>  platform/linux-generic/Makefile.am      |   2 +
>  platform/linux-generic/m4/configure.m4  |   2 +
>  platform/linux-generic/test/Makefile.am |   1 +
>  platform/linux-generic/test/pktio_env   | 113
> +++++++++++++++++++++++++++++
>  test/performance/Makefile.am            |   4 +-
>  test/performance/odp_example_l2fwd_run  |  42 +++++++++++
>  test/performance/odp_scheduling_run     |   5 ++
>  test/validation/odp_pktio_run           | 125
> +++++---------------------------
>  8 files changed, 186 insertions(+), 108 deletions(-)
>  create mode 100644 platform/linux-generic/test/Makefile.am
>  create mode 100755 platform/linux-generic/test/pktio_env
>  create mode 100755 test/performance/odp_example_l2fwd_run
>
> diff --git a/platform/linux-generic/Makefile.am
> b/platform/linux-generic/Makefile.am
> index e5558ac..033be51 100644
> --- a/platform/linux-generic/Makefile.am
> +++ b/platform/linux-generic/Makefile.am
> @@ -5,6 +5,8 @@ AM_CFLAGS +=  -I$(srcdir)/include
>  AM_CFLAGS +=  -I$(top_srcdir)/include
>  AM_CFLAGS +=  -I$(top_srcdir)/helper/include
>
> +SUBDIRS = test
> +
>  include_HEADERS = \
>                   $(top_srcdir)/include/odp.h
>
> diff --git a/platform/linux-generic/m4/configure.m4
> b/platform/linux-generic/m4/configure.m4
> index 00f2f89..55124f1 100644
> --- a/platform/linux-generic/m4/configure.m4
> +++ b/platform/linux-generic/m4/configure.m4
> @@ -15,3 +15,5 @@ AC_LINK_IFELSE(
>      echo "GCC-style __atomic builtins not supported by the compiler."
>      echo "Use newer version. For gcc > 4.7.0"
>      exit -1)
> +
> +AC_CONFIG_FILES([platform/linux-generic/test/Makefile])
> diff --git a/platform/linux-generic/test/Makefile.am
> b/platform/linux-generic/test/Makefile.am
> new file mode 100644
> index 0000000..91e361c
> --- /dev/null
> +++ b/platform/linux-generic/test/Makefile.am
> @@ -0,0 +1 @@
> +dist_bin_SCRIPTS = $(srcdir)/pktio_env
> diff --git a/platform/linux-generic/test/pktio_env
> b/platform/linux-generic/test/pktio_env
> new file mode 100755
> index 0000000..02b64fb
> --- /dev/null
> +++ b/platform/linux-generic/test/pktio_env
> @@ -0,0 +1,113 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2015, Linaro Limited
> +# All rights reserved.
> +#
> +# SPDX-License-Identifier:     BSD-3-Clause
> +#
> +# Test script wrapper for running ODP pktio apps on linux-generic.
> +#
> +# For linux-generic the default behavior is to create two pairs of
> +# virtual Ethernet interfaces and provide the names of these via
> +# environment variables to pktio apps, the interfaces will be removed
> +# before the script exits.
> +#
> +# Note that the creation of virtual Ethernet devices depends on having
> +# CONFIG_VETH enabled in the kernel, if not enabled the env setup will be
> skipped.
> +#
> +TEST_DIR=$(dirname $0)
> +# Network set up
> +# IF0 <---> IF1
> +# IF2 <---> IF3
> +IF0=pktio-p0-p1
> +IF1=pktio-p1-p0
> +IF2=pktio-p2-p3
> +IF3=pktio-p3-p2
> +
> +# exit codes expected by automake for skipped tests
> +TEST_SKIPPED=77
> +
> +check_for_root()
> +{
> +       if [ "$(id -u)" != "0" ]; then
> +               echo "check_for_root(): need to be root to setup VETH"
> +               exit $TEST_SKIPPED
>

Exiting with a skip at this point does not exercise the executable as much
as letting the test itself decide if there is valuable work still to be done
I think it is a valid test case that the executable exit cleanly because it
can't run rather than the script deciding for it at this level since this
is shared by many tests.


> +       fi
> +}
> +
> +# wait for a network interface's operational state to be "up"
> +wait_for_iface_up()
> +{
> +       iface=$1
> +       cnt=0
> +
> +       while [ $cnt -lt 50 ]; do
> +               read operstate < /sys/class/net/$iface/operstate
> +
> +               if [ $? -ne 0 ]; then
> +                       break
> +               elif [ "$operstate" = "up" ]; then
> +                       return 0
> +               fi
> +
> +               sleep 0.1
> +               cnt=`expr $cnt + 1`
> +       done
> +
> +       return 1
> +}
> +
> +setup_pktio_env()
> +{
> +       echo "pktio: setting up test interfaces $IF0, $IF1, $IF2, $IF3."
> +
> +       check_for_root
> +
> +       for iface in $IF0 $IF1 $IF2 $IF3; do
> +               ip link show $iface 2> /dev/null
> +               if [ $? -eq 0 ]; then
> +                       echo "pktio: interface $iface already exist $?"
> +                       return
> +               fi
> +       done
> +
> +       if [ "$1" = "clean" ]; then
> +               trap cleanup_pktio_env EXIT
> +       fi
> +
> +       ip link add $IF0 type veth peer name $IF1
> +       if [ $? -ne 0 ]; then
> +               echo "pktio: error: unable to create veth pair"
> +               exit $TEST_SKIPPED
> +       fi
> +       ip link add $IF2 type veth peer name $IF3
> +       if [ $? -ne 0 ]; then
> +               echo "pktio: error: unable to create veth pair"
> +               exit $TEST_SKIPPED
> +       fi
> +
> +       for iface in $IF0 $IF1 $IF2 $IF3; do
> +               ip link set $iface mtu 9216 up
> +               ifconfig $iface -arp
> +       done
> +
> +       # check that the interface has come up before starting the test
> +       for iface in $IF0 $IF1 $IF2 $IF3; do
> +               wait_for_iface_up $iface
> +               if [ $? -ne 0 ]; then
> +                       echo "pktio: interface $iface failed to come up"
> +                       exit 1
> +               fi
> +       done
> +}
> +
> +cleanup_pktio_env()
> +{
> +       echo "pktio: removing test interfaces $IF0, $IF1, $IF2, $IF3"
> +       check_for_root
> +
> +       for iface in $IF0 $IF1 $IF2 $IF3; do
> +               ip link del $iface 2> /dev/null
> +       done
> +       return 0
> +}
> diff --git a/test/performance/Makefile.am b/test/performance/Makefile.am
> index b0f7457..665c499 100644
> --- a/test/performance/Makefile.am
> +++ b/test/performance/Makefile.am
> @@ -1,12 +1,12 @@
>  include $(top_srcdir)/test/Makefile.inc
>
> -TESTS_ENVIRONMENT = TEST_DIR=${builddir}
> +TESTS_ENVIRONMENT = TEST_DIR=${builddir} ODP_PLATFORM=${with_platform}
>
>  EXECUTABLES = odp_atomic
>
>  COMPILE_ONLY = odp_scheduling
>
> -TESTSCRIPTS = odp_scheduling_run
> +TESTSCRIPTS = odp_scheduling_run odp_example_l2fwd_run
>
>  if test_perf
>  TESTS = $(EXECUTABLES) $(TESTSCRIPTS)
> diff --git a/test/performance/odp_example_l2fwd_run
> b/test/performance/odp_example_l2fwd_run
> new file mode 100755
> index 0000000..27aa20c
> --- /dev/null
> +++ b/test/performance/odp_example_l2fwd_run
> @@ -0,0 +1,42 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2015, Linaro Limited
> +# All rights reserved.
> +#
> +# SPDX-License-Identifier:     BSD-3-Clause
> +#
> +
> +TEST_DIR=$(dirname $0)
> +
> +# Use installed pktio env or for make check take it from platform
> directory
> +if [ -f "./pktio_env" ]; then
> +       . ./pktio_env
> +else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ];
> then
> +       . ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env
> +else
> +       echo "unable to find pktio_env"
>

This message is not very helpful, the update to the pktio_env script
informs the user and makes it clear how to fix the issue, this message
still leves the user wondering what
 pktio_env is and where to start looking for it. As a diagnostic to a human
I think it should be clearer what was expected.


+       exit 1
> +       fi
> +fi
> +
> +run_l2fwd_example()
> +{
> +       setup_pktio_env
> +       #@todo: limit odp_generator to cores
> +       #https://bugs.linaro.org/show_bug.cgi?id=1398
> +       ($TEST_DIR/../../example/generator/odp_generator -I $IF0 \
> +                       --srcmac fe:0f:97:c9:e0:44  --dstmac
> 32:cb:9b:27:2f:1a \
> +                       --srcip 192.168.0.1 --dstip 192.168.0.2 -m u 2>&1
> > /dev/null) \
> +                       2>&1 > /dev/null &
> +
> +       echo "Run $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m
> 0 -t 30 -c 2"
> +       $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m 0 -t 30 -c
> 2
> +       cleanup_pktio_env
> +       exit 0
> +}
> +
> +case "$1" in
> +       setup)   setup_pktio_env   ;;
> +       cleanup) cleanup_pktio_env ;;
> +       *)       run_l2fwd_example ;;
> +esac
> diff --git a/test/performance/odp_scheduling_run
> b/test/performance/odp_scheduling_run
> index b64a79d..e957a98 100755
> --- a/test/performance/odp_scheduling_run
> +++ b/test/performance/odp_scheduling_run
> @@ -1,5 +1,10 @@
>  #!/bin/sh
>  #
> +# Copyright (c) 2015, Linaro Limited
> +# All rights reserved.
> +#
> +# SPDX-License-Identifier:     BSD-3-Clause
> +#
>  # Script that passes command line arguments to odp_scheduling test when
>  # launched by 'make check'
>
> diff --git a/test/validation/odp_pktio_run b/test/validation/odp_pktio_run
> index b725a5f..2b72ce8 100755
> --- a/test/validation/odp_pktio_run
> +++ b/test/validation/odp_pktio_run
> @@ -1,104 +1,23 @@
>  #!/bin/sh
>  #
> -# Test script wrapper for running ODP pktio tests on linux-generic.
> +# Copyright (c) 2015, Linaro Limited
> +# All rights reserved.
>  #
> -# For platforms other than linux-generic this script does nothing other
> -# than running the odp_pktio binary, odp_pktio will then attempt to
> -# open and use the special device named "loop" for testing.
> +# SPDX-License-Identifier:     BSD-3-Clause
>  #
> -# For linux-generic the default behaviour is to create a pair of
> -# virtual Ethernet interfaces and provide the names of these via
> -# environment variables to odp_pktio, the interfaces will be removed
> -# before the script exits. Note that the creation of virtual Ethernet
> -# devices depends on having CONFIG_VETH enabled in the kernel, if not
> -# enabled the test will be skipped.
> -#
> -# The evironment variable ODP_PLATFORM is used to determine the
> -# platform under test, when this script is invoked via 'make check'
> -# this variable is set automatically.
> -#
> -# It's also possible to split up the steps, which makes it easier when
> -# debugging, for example;
> -#
> -# export ODP_PLATFORM=linux-generic
> -# odp_pktio_run setup
> -# wireshark -i pktio-p0 -k &
> -# odp_pktio_run
> -# (repeat running test multiple times..)
> -# odp_pktio_run cleanup
> -#
> -TEST_DIR="${TEST_DIR:-$(dirname $0)}"
> -IF0=pktio-p0
> -IF1=pktio-p1
> -
> -# exit codes expected by automake for skipped tests
> -TEST_SKIPPED=77
> -
> -# wait for a network interface's operational state to be "up"
> -wait_for_iface_up()
> -{
> -       iface=$1
> -       cnt=0
> -
> -       while [ $cnt -lt 50 ]; do
> -               read operstate < /sys/class/net/$iface/operstate
> -
> -               if [ $? != 0 ]; then
> -                       break
> -               elif [ "$operstate" = "up" ]; then
> -                       return 0
> -               fi
>
> -               sleep 0.1
> -               cnt=`expr $cnt + 1`
> -       done
> +TEST_DIR=$(dirname $0)
>
> -       return 1
> -}
> -
> -setup_env1()
> -{
> -       ip link show $IF0 2> /dev/null
> -       if [ $? = 0 ]; then
> -               ip link show $IF1 2> /dev/null
> -               if [ $? = 0 ]; then
> -                       echo "pktio: interfaces $IF0 and $IF1 already
> exist"
> -                       return
> -               fi
> -       fi
> -
> -       echo "pktio: setting up test interfaces $IF0 and $IF1"
> -
> -       if [ "$1" = "clean" ]; then
> -               trap cleanup_env1 EXIT
> +# Use installed pktio env or for make check take it from platform
> directory
> +if [ -f "./pktio_env" ]; then
> +       . ./pktio_env
> +else if [ -f ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env ];
> then
> +       . ${TEST_DIR}/../../platform/$ODP_PLATFORM/test/pktio_env
> +else
> +       echo "unable to find pktio_env"
> +       exit 1
>         fi
> -
> -       ip link add $IF0 type veth peer name $IF1
> -       if [ $? != 0 ]; then
> -               echo "pktio: error: unable to create veth pair"
> -               exit $TEST_SKIPPED
> -       fi
> -       ip link set $IF0 mtu 9216 up
> -       ip link set $IF1 mtu 9216 up
> -       ifconfig $IF0 -arp
> -       ifconfig $IF1 -arp
> -
> -       # check that the interface has come up before starting the test
> -       for iface in $IF0 $IF1; do
> -               wait_for_iface_up $iface
> -               if [ $? != 0 ]; then
> -                       echo "pktio: interface $iface failed to come up"
> -                       exit 1
> -               fi
> -       done
> -}
> -
> -cleanup_env1()
> -{
> -       echo "pktio: removing test interfaces $IF0 and $IF1"
> -       ip link del $IF0 2> /dev/null
> -       ip link del $IF1 2> /dev/null
> -}
> +fi
>
>  run_test()
>  {
> @@ -116,12 +35,12 @@ run_test()
>                         export ODP_PKTIO_DISABLE_SOCKET_${distype}=y
>                 fi
>                 $TEST_DIR/odp_pktio
> -               if [ $? != 0 ]; then
> +               if [ $? -ne 0 ]; then
>                         ret=1
>                 fi
>         done
>
> -       if [ $ret != 0 ]; then
> +       if [ $ret -ne 0 ]; then
>                 echo "!!! FAILED !!!"
>         fi
>
> @@ -138,7 +57,7 @@ run()
>
>         if [ "$ODP_PKTIO_IF0" = "" ]; then
>                 # no interfaces specified on linux-generic, use defaults
> -               setup_env1 clean
> +               setup_pktio_env clean
>                 export ODP_PKTIO_IF0=$IF0
>                 export ODP_PKTIO_IF1=$IF1
>         fi
> @@ -146,14 +65,8 @@ run()
>         run_test
>  }
>
> -if [ "$ODP_PLATFORM" = "" ]; then
> -       echo "pktio: error: ODP_PLATFORM must be defined"
> -       # not skipped as this should never happen via "make check"
> -       exit 1
> -fi
> -
>  case "$1" in
> -       setup)   setup_env1   ;;
> -       cleanup) cleanup_env1 ;;
> -       *)       run          ;;
> +       setup)   setup_pktio_env   ;;
> +       cleanup) cleanup_pktio_env ;;
> +       *)       run ;;
>  esac
> --
> 1.9.1
>
>
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp
>



-- 
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/> *│ *Open source software for ARM SoCs
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to