summaryrefslogtreecommitdiff
path: root/tests/test_nmea2000
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_nmea2000')
-rwxr-xr-xtests/test_nmea2000117
1 files changed, 117 insertions, 0 deletions
diff --git a/tests/test_nmea2000 b/tests/test_nmea2000
new file mode 100755
index 00000000..d154ef22
--- /dev/null
+++ b/tests/test_nmea2000
@@ -0,0 +1,117 @@
+#!/bin/sh
+#
+# The regression-test driver script for the nmea2000 driver.
+# CAN is a bit different from normal serial interfaces.
+#
+
+GPSD_PORT=2948
+CAN_PLAYER=canplayer
+CAN_UNIT="vcan0"
+BUILD=0
+
+# Requires GNU date extensions
+# Should return an empty blank string if those are not present.
+STARTTIME=`date +"%s" 2>/dev/null`
+
+# We need to have the build directory in $GPSD_HOME to find the new gpsd
+if [ "`dirname $0`" = "." ]; then
+ GPSD_HOME=`pwd`
+else
+ GPSD_HOME=`dirname $0`
+fi
+
+version()
+{
+ echo
+ echo `basename $0`" : Version v0.20";
+ echo
+}
+
+usage()
+{
+ version;
+ echo "usage :" `basename $0` " [-S <portnumber>] [-u <can_device>] [-p <canplayer>] [-b] <testfile>";
+ echo " :" `basename $0` " -v";
+ echo " :" `basename $0` " -h";
+ echo " Options include:";
+ echo " -S <portnumber> = Port for gpsd communication. Default is 2948.";
+ echo " -u <can_device> = Used CAN device. Default is \"vcan0\"";
+ echo " -p <canplayer> = Programm to replay logfile. Default is \"canplayer\"";
+ echo " -b = Create testfile.chk instead of checking it.";
+ echo " -v = Print version and exit.";
+ echo " -h = Print this helptext and exit.";
+ echo " <testfile> = A file created by \"candump -l <can_device> ><testfile>\".";
+ echo
+}
+
+device()
+{
+ echo
+ echo "CAN device \"${CAN_UNIT}\" do not exit."
+ echo "Try: sudo ./gpsinit vcan "
+ echo
+}
+
+can_utils()
+(
+ echo
+ echo "Command to play CAN logfile \"${CAN_PLAYER}\" do not exist."
+ echo "Try to install \"can-utils\" from your distribution."
+ echo "I your distibution do not provide \"can-utils\", then"
+ echo "git clone https://gitorious.org/linux-can/can-utils.git"
+ echo "in a directory outside of gpsd, build and install it."
+ echo "On most linux systems, \"make\", and then \"sudo make install\" works."
+ echo
+)
+
+while getopts :S:u:p:vhb opt
+do
+ case ${opt} in
+ S) GPSD_PORT=${OPTARG};;
+ u) CAN_UNIT=${OPTARG};;
+ p) CAN_PLAYER=${OPTARG};;
+ b) BUILD=1;;
+ v) version; exit 0;;
+ h) usage; exit 0;;
+ \?) usage; exit 1;;
+ esac
+done
+
+shift $((${OPTIND} - 1))
+
+if [ -z $1 ]; then usage; exit 1; fi
+
+TEST_FILE=$1
+
+if [ `ifconfig -a | grep ${CAN_UNIT} | wc -c` -eq 0 ]; then device; exit 1; fi
+
+if [ `command -v ${CAN_PLAYER} | wc -c` -eq 0 ]; then can_utils; exit 1; fi
+
+TMP_PID_FILE=`mktemp`
+TMP_OUT_FILE=`mktemp`
+
+${GPSD_HOME}/gpsd -n -G -D0 -S ${GPSD_PORT} -P ${TMP_PID_FILE} nmea2000://${CAN_UNIT}
+
+sleep 1
+
+${GPSD_HOME}/gpspipe -d -r -w -S -o ${TMP_OUT_FILE} :${GPSD_PORT}
+
+sleep 1
+
+${CAN_PLAYER} -I${TEST_FILE} ${CAN_UNIT}=can0
+
+sleep 1
+
+kill `cat ${TMP_PID_FILE}`
+
+sleep 1
+
+if [ ${BUILD} -ne 0 ]
+then
+ cp ${TMP_OUT_FILE} ${TEST_FILE}.chk
+else
+ diff ${TEST_FILE}.chk ${TMP_OUT_FILE}
+fi
+
+rm -f ${TMP_PID_FILE}
+rm -f ${TMP_OUT_FILE}