On 03/24/15 19:00, Mike Holmes wrote:
Should this be structure for per platform test and example specifics
be structure 1 or 2 ?
1. platform/linux-generic/test
2. test/platform/linux-generic/test
I had imagined that we dont complicate the ODP API implementation with
the test and example support and work with structure 2.
Mike
We spoke about that with Anders and finally decided go with 1. Our
arguments are: platform implementations
should not touch test/ directory. But each platform can provide it's own
set ups and env for running examples and tests. When you build .deb (or
.ipk) platfrom specific env will be packaged to directory with example
binaries. Because one .deb has only one odp platfrom, there will be only
one env specific for that platform.
Best regards,
Maxim.
On 23 March 2015 at 05:46, Maxim Uvarov <[email protected]
<mailto:[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]
<mailto:[email protected]>>
---
This patch depends on: [PATCHv4] example: l2fwd print packets per
second
I named it as v3, previous patch version was: "tests: performance
add l2fwd to run script"
Best regards,
Maxim.
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 | 98
+++++++++++++++++++++++++
test/performance/Makefile.am | 4 +-
test/performance/odp_example_l2fwd_run | 35 +++++++++
test/validation/odp_pktio_run | 122
++++----------------------------
7 files changed, 155 insertions(+), 109 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 9aed113..08349cd 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..97a2230
--- /dev/null
+++ b/platform/linux-generic/test/pktio_env
@@ -0,0 +1,98 @@
+#!/bin/sh
+#
+# Test script wrapper for running ODP pktio tests on linux-generic.
+#
+# For linux-generic the default behaviour is to create two pairs of
+# virtual Ethernet interfaces and provide the names of these via
+# environment variables to pktio test, 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.
+#
+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
+
+# 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."
+
+ for iface in $IF0 $IF1 $IF2 $IF3; do
+ echo "ip link show $iface"
+ #ip link show $iface 2> /dev/null
+ ip link show $iface
+ 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 - $IF3"
+
+ for iface in $IF0 $IF1 $IF2 $IF3; do
+ ip link del $iface 2> /dev/null
+ done
+}
diff --git a/test/performance/Makefile.am
b/test/performance/Makefile.am
index 3be3721..4f480c3 100644
--- a/test/performance/Makefile.am
+++ b/test/performance/Makefile.am
@@ -1,10 +1,12 @@
include $(top_srcdir)/test/Makefile.inc
+TESTS_ENVIRONMENT = ODP_PLATFORM=${with_platform}
+
EXECUTABLES =
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..c300055
--- /dev/null
+++ b/test/performance/odp_example_l2fwd_run
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+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"
+ exit 1
+ fi
+fi
+
+run_l2fwd_example()
+{
+ setup_pktio_env
+ #@todo: limit odp_generator to cores
+ ($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 60 -c 2"
+ $TEST_DIR/../../example/l2fwd/odp_l2fwd -i $IF1,$IF2 -m 0
-t 60 -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/validation/odp_pktio_run
b/test/validation/odp_pktio_run
index 204b440..74cec27 100755
--- a/test/validation/odp_pktio_run
+++ b/test/validation/odp_pktio_run
@@ -1,104 +1,16 @@
#!/bin/sh
-#
-# Test script wrapper for running ODP pktio tests on linux-generic.
-#
-# 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.
-#
-# 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=$(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
-
- 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
- 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"
+# 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
- 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 +28,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 +50,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 +58,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] <mailto:[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