* Makefile cleanup: - Intall the files into the expect points * run_ltp-can_tests.sh cleanup: - Use test.sh - Use TCID, TST_TOTAL and TST_COUNT - Use tst_require_root and tst_resm - Add setup and cleanup function
* tst-filter.c and tst-rcv-own-msgs.c some cleanup Signed-off-by: Zeng Linggang <zenglg...@cn.fujitsu.com> --- testcases/network/can/filter-tests/Makefile | 37 +++++---- .../network/can/filter-tests/run_ltp-can_tests.sh | 97 ++++++++++++++++------ testcases/network/can/filter-tests/tst-filter.c | 45 +++++----- .../network/can/filter-tests/tst-rcv-own-msgs.c | 24 +++--- 4 files changed, 122 insertions(+), 81 deletions(-) diff --git a/testcases/network/can/filter-tests/Makefile b/testcases/network/can/filter-tests/Makefile index c88f704..70e2a42 100644 --- a/testcases/network/can/filter-tests/Makefile +++ b/testcases/network/can/filter-tests/Makefile @@ -1,24 +1,29 @@ # -# $Id: Makefile,v 1.1 2009/03/02 15:33:55 subrata_modak Exp $ +# Copyright (c) 2014 Fujitsu Ltd. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # Send feedback to <socketcan-us...@lists.berlios.de> -CFLAGS = -O2 -Wall -Wno-parentheses \ - -fno-strict-aliasing \ - -DETH_P_CAN=0x000C \ - -DPF_CAN=29 \ - -DAF_CAN=PF_CAN - -PROGRAMS = tst-filter tst-rcv-own-msgs - -all: $(PROGRAMS) +top_srcdir ?= ../../../.. -install: - cp -f $(PROGRAMS) /usr/local/bin +include $(top_srcdir)/include/mk/testcases.mk -clean: - rm -f $(PROGRAMS) +CPPFLAGS += -Wno-parentheses -DETH_P_CAN=0x000C -DPF_CAN=29 \ + -DAF_CAN=PF_CAN -distclean: - rm -f $(PROGRAMS) *~ +INSTALL_TARGETS := *.sh +include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/network/can/filter-tests/run_ltp-can_tests.sh b/testcases/network/can/filter-tests/run_ltp-can_tests.sh index b955ec6..17d841d 100644 --- a/testcases/network/can/filter-tests/run_ltp-can_tests.sh +++ b/testcases/network/can/filter-tests/run_ltp-can_tests.sh @@ -14,44 +14,89 @@ ## for more details. ## ## ## ## You should have received a copy of the GNU General Public License ## -## along with this program; if not, write to the Free Software ## -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## +## along with this program; if not, write to the Free Software Foundation, ## +## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ## ## ## ################################################################################ -if [ $(id -ru) -ne 0 ]; then - echo You need to be root to execute these tests - exit 1 -fi +setup() +{ + tst_require_root + + # load needed CAN networklayer modules + modprobe can + ret=$? + if [ $ret -ne 0 ]; then + tst_resm TCONF "insmod can modules fail: errno - $ret" + exit 1 + fi + + modprobe can_raw + ret=$? + if [ $ret -ne 0 ]; then + tst_resm TCONF "insmod can_raw modules fail: errno - $ret" + exit 1 + fi + + # ensure the vcan driver to perform the ECHO on driver level + modprobe -r vcan + ret=$? + if [ $ret -ne 0 ]; then + tst_resm TCONF "rmsmod vcan modules fail: errno - $ret" + exit 1 + fi -# load needed CAN networklayer modules -modprobe -f can -modprobe -f can_raw + modprobe vcan echo=1 + ret=$? + if [ $ret -ne 0 ]; then + tst_resm TCONF "insmod vcan modules fail: errno - $ret" + exit 1 + fi -# ensure the vcan driver to perform the ECHO on driver level -modprobe -r vcan -modprobe -f vcan echo=1 + VCAN=vcan0 -VCAN=vcan0 + # create virtual CAN device + ip link add dev $VCAN type vcan || exit 1 + ifconfig $VCAN up -# create virtual CAN device -ip link add dev $VCAN type vcan || exit 1 -ifconfig $VCAN up + # check precondition for CAN frame flow test + HAS_ECHO=`ip link show $VCAN | grep -c ECHO` -# check precondition for CAN frame flow test -HAS_ECHO=`ip link show $VCAN | grep -c ECHO` + if [ $HAS_ECHO -ne 1 ]; then + exit 1 + fi +} -if [ $HAS_ECHO -ne 1 ] -then - exit 1 +cleanup() +{ + ifconfig $VCAN down + ip link del dev $VCAN + modprobe -r vcan + modprobe -r can_raw + modprobe -r can +} + +if [ $# -ne 1 ]; then + echo "Usage: $0 [can_filter | can_rcv_own_msgs]" + exit 1 fi -# test of CAN filters on af_can.c -./tst-filter $VCAN || exit 1 +TCID="$1" +TST_TOTAL=1 +TST_COUNT=1 + +. test.sh +TST_CLEANUP=cleanup -# test of CAN frame flow down to the netdevice and up again -./tst-rcv-own-msgs $VCAN || exit 1 +setup -exit 0 +"$1" "$VCAN" +ret=$? +if [ $ret -ne 0 ]; then + tst_resm TFAIL "Test $1 FAIL with exit num: $ret" +else + tst_resm TPASS "Test $1 PASS" +fi +tst_exit diff --git a/testcases/network/can/filter-tests/tst-filter.c b/testcases/network/can/filter-tests/tst-filter.c index 26eacf7..f248999 100644 --- a/testcases/network/can/filter-tests/tst-filter.c +++ b/testcases/network/can/filter-tests/tst-filter.c @@ -1,8 +1,4 @@ /* - * $Id: tst-filter.c 1263 2011-07-09 18:00:41Z hartkopp $ - */ - -/* * tst-filter.c * * Copyright (c) 2011 Volkswagen Group Electronic Research @@ -65,9 +61,8 @@ #define TC 18 /* # of testcases */ const int rx_res[TC] = { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1 }; -const int rxbits_res[TC] = - { 4369, 4369, 4369, 4369, 17, 4352, 17, 4352, 257, 257, 4112, 4112, 1, 256, -16, 4096, 1, 256 }; +const int rxbits_res[TC] = { 4369, 4369, 4369, 4369, 17, 4352, 17, 4352, 257, + 257, 4112, 4112, 1, 256, 16, 4096, 1, 256 }; canid_t calc_id(int testcase) { @@ -85,13 +80,12 @@ canid_t calc_mask(int testcase) { canid_t mask = CAN_SFF_MASK; - if (testcase > 15) - return (CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG); - if (testcase & 4) mask |= CAN_EFF_FLAG; if (testcase & 8) mask |= CAN_RTR_FLAG; + if (testcase > 15) + mask = (CAN_EFF_MASK | CAN_EFF_FLAG | CAN_RTR_FLAG); return mask; } @@ -118,7 +112,8 @@ int main(int argc, char **argv) return 1; } - if ((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { + s = socket(PF_CAN, SOCK_RAW, CAN_RAW); + if (s < 0) { perror("socket"); return 1; } @@ -148,9 +143,8 @@ int main(int argc, char **argv) setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter)); - printf - ("testcase %2d filters : can_id = 0x%08X can_mask = 0x%08X\n", - testcase, rfilter.can_id, rfilter.can_mask); + printf("testcase %2d filters : can_id = 0x%08X can_mask = " + "0x%08X\n", testcase, rfilter.can_id, rfilter.can_mask); printf("testcase %2d sending patterns ... ", testcase); @@ -217,11 +211,9 @@ int main(int argc, char **argv) } /* test & calc rxbits */ - rxbitval = - 1 << - ((frame. - can_id & (CAN_EFF_FLAG | CAN_RTR_FLAG | - CAN_ERR_FLAG)) >> 28); + rxbitval = 1 << ((frame.can_id & + (CAN_EFF_FLAG | CAN_RTR_FLAG | + CAN_ERR_FLAG)) >> 28); /* only receive a rxbitval once */ if ((rxbits & rxbitval) == rxbitval) { @@ -233,22 +225,23 @@ int main(int argc, char **argv) rxbits |= rxbitval; rx++; - printf - ("testcase %2d rx : can_id = 0x%08X rx = %d rxbits = %d\n", - testcase, frame.can_id, rx, rxbits); + printf("testcase %2d rx : can_id = 0x%08X rx = " + "%d rxbits = %d\n", testcase, + frame.can_id, rx, rxbits); } } /* rx timed out -> check the received results */ if (rx_res[testcase] != rx) { fprintf(stderr, - "wrong rx value in testcase %d : %d (expected %d)\n", - testcase, rx, rx_res[testcase]); + "wrong rx value in testcase %d : %d (expected " + "%d)\n", testcase, rx, rx_res[testcase]); exit(1); } if (rxbits_res[testcase] != rxbits) { fprintf(stderr, - "wrong rxbits value in testcase %d : %d (expected %d)\n", - testcase, rxbits, rxbits_res[testcase]); + "wrong rxbits value in testcase %d : %d " + "(expected %d)\n", testcase, rxbits, + rxbits_res[testcase]); exit(1); } printf("testcase %2d ok\n---\n", testcase); diff --git a/testcases/network/can/filter-tests/tst-rcv-own-msgs.c b/testcases/network/can/filter-tests/tst-rcv-own-msgs.c index a863e89..728501b 100644 --- a/testcases/network/can/filter-tests/tst-rcv-own-msgs.c +++ b/testcases/network/can/filter-tests/tst-rcv-own-msgs.c @@ -1,8 +1,4 @@ /* - * $Id: tst-rcv-own-msgs.c 1193 2010-08-09 14:00:21Z hartkopp $ - */ - -/* * tst-rcv-own-msgs.c * * Copyright (c) 2010 Volkswagen Group Electronic Research @@ -61,7 +57,7 @@ #include <linux/can.h> #include <linux/can/raw.h> -#define max(a,b) (a > b ? a : b) +#define max(a, b) ((a) > (b) ? (a) : (b)) struct rxs { int s; @@ -140,13 +136,13 @@ struct rxs test_sockets(int s, int t, canid_t can_id) void setopts(int s, int loopback, int recv_own_msgs) { - setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK, - &loopback, sizeof(loopback)); - setsockopt(s, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS, - &recv_own_msgs, sizeof(recv_own_msgs)); + setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK, &loopback, + sizeof(loopback)); + setsockopt(s, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS, &recv_own_msgs, + sizeof(recv_own_msgs)); - printf("check loopback %d recv_own_msgs %d ... ", - loopback, recv_own_msgs); + printf("check loopback %d recv_own_msgs %d ... ", loopback, + recv_own_msgs); } int main(int argc, char **argv) @@ -162,11 +158,13 @@ int main(int argc, char **argv) return 1; } - if ((s = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { + s = socket(PF_CAN, SOCK_RAW, CAN_RAW); + if (s < 0) { perror("socket"); return 1; } - if ((t = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) { + t = socket(PF_CAN, SOCK_RAW, CAN_RAW); + if (t < 0) { perror("socket"); return 1; } -- 1.9.3 ------------------------------------------------------------------------------ HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions Find What Matters Most in Your Big Data with HPCC Systems Open Source. Fast. Scalable. Simple. Ideal for Dirty Data. Leverages Graph Analysis for Fast Processing & Easy Data Exploration http://p.sf.net/sfu/hpccsystems _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list