#!/usr/bin/env bash # Making tests of BForce CURDIR="${CURDIR:-$(pwd)}" BFBIN=${BFBIN:-$(pwd)/../source/bin/bforce} SOCATCMD=${SOCATCMD:-$(which socat)} function prepconfig() { echo "Preparing configs with $1 as protocol..." if [[ ! -d "${CURDIR}/ftntest" ]] ; then echo -n "(o_O) " else echo "Dir exists!" rm -rf ${CURDIR}/ftntest/{etc,inboundA,inboundB,inbound-unsecureA,inbound-unsecureB,logsA,logsB,outboundA,outboundB} fi mkdir -p "${CURDIR}"/ftntest/{etc,inbound-unsecureA,inbound-unsecureB,inboundA,inboundB,logsA,logsB,outboundA,outboundB} cp -f ${CURDIR}/configs/bforceA.conf ${CURDIR}/ftntest/etc/bforceA.conf sed -i -e "s/%PROTO%/$1/" ${CURDIR}/ftntest/etc/bforceA.conf sed -i -e "s#%TESTZONE%#${CURDIR}/ftntest#" ${CURDIR}/ftntest/etc/bforceA.conf cp -f ${CURDIR}/configs/bforceB.conf ${CURDIR}/ftntest/etc/bforceB.conf sed -i -e "s/%PROTO%/$1/" ${CURDIR}/ftntest/etc/bforceB.conf sed -i -e "s#%TESTZONE%#${CURDIR}/ftntest#" ${CURDIR}/ftntest/etc/bforceB.conf cp -f ${CURDIR}/configs/00010002.cut ${CURDIR}/ftntest/outboundA/00010002.cut cp -f ${CURDIR}/configs/00010001.cut ${CURDIR}/ftntest/outboundB/00010001.cut } function testcomm() { rm -rf ${CURDIR}/ftntest/inboundA/* rm -rf ${CURDIR}/ftntest/inboundB/* echo " over ${1}" # for V1 and V2 #mkfifo ${CURDIR}/bforceAtoB #mkfifo ${CURDIR}/bforceBtoA BFCFGA=${CURDIR}/ftntest/etc/bforceA.conf BFCFGB=${CURDIR}/ftntest/etc/bforceB.conf # Works for Linux # Variant 1 #BFCONFIG=${BFCFGA} #BFCONFIG=${BFCFGA} ${BFBIN} -o 99:1/2 > ${CURDIR}/bforceAtoB < ${CURDIR}/bforceBtoA & # #BFCONFIG=${BFCFGB} #BFCONFIG=${BFCFGB} ${BFBIN} -S"CONNECT 9600" auto < ${CURDIR}/bforceAtoB > ${CURDIR}/bforceBtoA # Variant 2 #${CURDIR}/runbfA.sh ${BFBIN} ${BFCFGA} > ${CURDIR}/bforceAtoB < ${CURDIR}/bforceBtoA & #${CURDIR}/runbfB.sh ${BFBIN} ${BFCFGB} < ${CURDIR}/bforceAtoB > ${CURDIR}/bforceBtoA # Variant 3 works with sockets and pipes - not pty case ${1} in "PSTN") socat -ly -Wlock EXEC:"${CURDIR}/runbfB.sh ${BFBIN} ${BFCFGB}" EXEC:"${CURDIR}/runbfA.sh ${BFBIN} ${BFCFGA}" sleep 2 ;; "IFC") ${CURDIR}/runbfC.sh ${BFBIN} ${BFCFGA} & socat -ly -Wlock TCP4-LISTEN:59999 EXEC:"${CURDIR}/runbfD.sh ${BFBIN} ${BFCFGB}" sleep 2 ;; "BKP") ${CURDIR}/runbfE.sh ${BFBIN} ${BFCFGA} & socat -ly -Wlock TCP4-LISTEN:59999 EXEC:"${CURDIR}/runbfF.sh ${BFBIN} ${BFCFGB}" sleep 2 ;; esac # For [Free]BSD it need to be replaced - pipes are bidirectional: # ./ping <&1 | ./pong >&0 # for V1 and V2 #rm ${CURDIR}/{bforceAtoB,bforceBtoA} ## WE MUST CHECK THAT INBOUND ARE FULL!!! ## FCNTA=$( find ${CURDIR}/ftntest/inboundA -name *.pkt | wc -l ) FCNTB=$( find ${CURDIR}/ftntest/inboundB -name *.pkt | wc -l ) if [[ "${FCNTA}" -eq "1" ]] then DIFFA=$( diff ${CURDIR}/ftntest/inboundA/*.pkt ${CURDIR}/configs/00010001.cut && echo $? ) fi if [[ "${FCNTB}" -eq "1" ]] then DIFFB=$( diff ${CURDIR}/ftntest/inboundB/*.pkt ${CURDIR}/configs/00010002.cut && echo $? ) fi if [[ "${DIFFA}" -eq "0" ]] && [[ "${FCNTA}" -eq "1" ]] then if [[ "${DIFFB}" -eq "0" ]] && [[ "${FCNTB}" -eq "1" ]] then echo "....Result: OK" else echo "....Failed DiffB" RES=2 fi else echo "....Failed DiffA" RES=1 fi if [[ -f ${CURDIR}/ftntest/logsA/bf-debug ]] then cat ${CURDIR}/ftntest/logsA/bf-debug >> ${CURDIR}/debugA.log fi if [[ -f ${CURDIR}/ftntest/logsB/bf-debug ]] then cat ${CURDIR}/ftntest/logsB/bf-debug >> ${CURDIR}/debugB.log fi rm -rf ${CURDIR}/ftntest } if [[ ! -f "${BFBIN}" ]] then # No executable to test! echo "No executable to run! Aborting..." exit -1 else if [[ ! -f "${SOCATCMD}" ]] then # No socat echo "No socat cmd! Aborting..." exit -1 fi # All doing here echo "Bforce executable found: ${BFBIN}" RES=0 prepconfig "ZMO" echo -n "--> Running ZMO test..." testcomm "PSTN" prepconfig "ZAP" echo -n "--> Running ZAP test..." testcomm "PSTN" prepconfig "HYD" echo -n "--> Running Hydra test..." testcomm "PSTN" prepconfig "ZMO" echo -n "--> Running ZMO test..." testcomm "IFC" prepconfig "ZAP" echo -n "--> Running ZAP test..." testcomm "IFC" prepconfig "HYD" echo -n "--> Running HYD test..." testcomm "IFC" prepconfig "ZMO" echo -n "--> Running BINKP test..." testcomm "BKP" # TODO: make binkd test over netcat possibly fi # rm -rf ${CURDIR}/ftntest/{etc,inboundA,inboundB,inbound-unsecureA,inbound-unsecureB,logsA,logsB,outboundA,outboundB} rm -rf ${CURDIR}/ftntest # printf $RES exit ${RES}