--- /dev/null
+#!/bin/bash
+
+#############
+# VARIABLES #
+#############
+SCR_DIR=`dirname $0`
+tmpdir=$(mktemp -d)
+SCR_BN=`basename $0`
+OPER_SCR=../../operation.sh
+RESULT_LOG=result.log
+RECV_LOG=../../launcher.log.recvfe
+
+#############
+# FUNCTIONS #
+#############
+
+sigint_handler () {
+ _exit "Script interrupted. Cleanup and exit ..."
+}
+
+# $1: message; $2: optional rc (1 by default)
+_exit () {
+ rc=1
+ [ -n "$2" ] && rc=$2
+ echo
+ echo -e $1
+ echo
+ rm -rf $tmpdir
+ exit $rc
+}
+
+# $1: hex formatted file to send to the server
+operation_sendxml2e () {
+ sleep 0.5
+ $OPER_SCR "sendxml2e|$1"
+ return $?
+}
+
+# $1: hex formatted file to send to the server
+operation_sendhex2e () {
+ sleep 0.5
+ $OPER_SCR "sendhex2e|$1"
+ return $?
+}
+
+# $1: file to monitor
+# $2: timeout (request expiration) in seconds
+# Result: cats the message when completed
+wait4message () {
+ 0>$1
+ rm -f .msg_received
+
+ [ -z "$2" ] && _exit "ERROR: must provide '$FUNCNAME' timeout (second argument)"
+ sleep $2 &
+ local timerPid=$!
+
+ # Monitor for incoming message:
+ tail -n0 -F --pid=$timerPid $1 | while read line
+ do
+ if echo $line | grep "^</message>" >/dev/null; then
+ echo "Message received:"
+ echo
+ cat $1
+ # stop the timer
+ kill -13 $timerPid
+ touch .msg_received
+ fi
+ done
+
+ if [ ! -f .msg_received ]; then
+ echo "Timeout expired"
+ return 1
+ fi
+
+ return 0
+}
+
+# xml content is serialized (removing CR's) to ease the pattern matching:
+# $1: pattern; $2: file
+check_pattern () {
+ echo -n "Matching pattern '$1' in file '$2' ... "
+ cat $2 | tr '\n' ' ' | egrep "$1" >/dev/null
+ [ $? -ne 0 ] && { echo "ERROR" ; test_failed ; return 1 ; }
+ echo "OK"
+ return 0
+}
+
+# $1: pattern file; $2: file
+check_pattern_file () {
+ echo -n "Matching whole file '$1' in file '$2' ... "
+ grep -f $1 $2 >/dev/null
+ [ $? -ne 0 ] && { echo "ERROR" ; test_failed ; return 1 ; }
+ echo "OK"
+ return 0
+}
+
+# Tests result:
+test_ok () {
+ echo "Verdict: $TC Ok" | tee -a $RESULT_LOG
+}
+
+test_failed () {
+ echo "Verdict: $TC Failed" | tee -a $RESULT_LOG
+}
+
+process_tc () {
+ local tc_dn=`dirname $TC`
+
+ echo
+ echo "***** Executing '$TC' ..."
+
+ grep -v ^# $TC > $tmpdir/tc
+ while read -r line
+ do
+ oper=$(echo $line | awk '{ print $1 }')
+ param1="$(echo $line | cut -d' ' -f2-)"
+
+ case $oper in
+ SENDXML2E)
+ operation_sendxml2e $tc_dn/$param1 &
+ [ $? -ne 0 ] && return 1
+ ;;
+
+ SENDHEX2E)
+ operation_sendhex2e $tc_dn/$param1 &
+ [ $? -ne 0 ] && return 1
+ ;;
+
+ WAIT4MESSAGE)
+ wait4message $RECV_LOG 5
+ [ $? -ne 0 ] && return 1
+ ;;
+
+ CHECKPATTERN)
+ check_pattern "$param1" $RECV_LOG
+ [ $? -ne 0 ] && return 1
+ ;;
+
+ CHECKPATTERNFILE)
+ check_pattern_file "$param1" $RECV_LOG
+ [ $? -ne 0 ] && return 1
+ ;;
+
+ esac
+
+ done < $tmpdir/tc
+
+ return 0
+}
+
+
+#############
+# EXECUTION #
+#############
+
+# Trap sigint:
+trap sigint_handler SIGINT
+
+# Working directory is script dirname:
+cd $SCR_DIR
+
+# Intro:
+echo
+echo "------------------"
+echo "Test cases manager"
+echo "------------------"
+# Mandatory parameter:
+[ -z "$1" ] && _exit "Usage: $SCR_BN <test cases parent directory (or .tc file)>"
+[ ! -f "$1" -a ! -d "$1" ] && _exit "Invalid file or directory '$1' !!"
+
+# Gather .tc files to be processed:
+[ ! -f $1 ] && echo -e "\nGathering list of test cases from '`readlink -f $1`' ..."
+echo
+find $1 -name *.tc | xargs -L1 readlink -f | tee -a $tmpdir/tc_list
+echo
+echo
+
+echo "Start processing test cases:"
+echo "----------------------------"
+# Process test cases:
+0> $RESULT_LOG
+for TC in `cat $tmpdir/tc_list`
+do
+ process_tc
+ if [ $? -eq 0 ]; then
+ test_ok
+ else
+ test_failed
+ cat $RECV_LOG
+ fi
+done
+
+_exit "Done !" 0
+