Newer
Older
#!/bin/bash
if [ -z "$1" ]; then
echo "Not given the file to send"
exit 1
fi
TEST_OUTPUT_FILES='unwanted_logs/advanced_tests'
BSN_PRE="${BASENAME%.*}"
BSN_EXT="${BASENAME##*.}"
GREEN='\033[0;32m'
mkdir ${TEST_OUTPUT_FILES}/ 2>/dev/null
rm -f ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_received_file.${BSN_EXT} \
${TEST_OUTPUT_FILES}/adv_valgrind_${BSN_PRE}_receiver.log \
${TEST_OUTPUT_FILES}/adv_valgrind_${BSN_PRE}_sender.log
touch ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_received_file.${BSN_EXT} \
${TEST_OUTPUT_FILES}/adv_valgrind_${BSN_PRE}_receiver.log \
${TEST_OUTPUT_FILES}/adv_valgrind_${BSN_PRE}_sender.log
./linksimulator/link_sim -p 65027 -P 65139 -l 70 -d 1500 -e 20 -c 10 -R &>${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_link.log &
link_pid=$!
# On lance le receiver et capture sa sortie standard
valgrind --leak-check=full --log-file=${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_valgrind_receiver.log \
./receiver ::1 65139 1> ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_received_file.${BSN_EXT} \
2> ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_receiver.log & receiver_pid=$!
cleanup()
{
kill -9 $receiver_pid
kill -9 $link_pid
exit 0
}
trap cleanup SIGINT # Kill les process en arrière plan en cas de ^-C
# On démarre le transfert
if ! valgrind --leak-check=full --log-file=${TEST_OUTPUT_FILES}/adv_valgrind_${BSN_PRE}_receiver.log \
./sender -f ${FILENAME} ::1 65027 2> ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_sender.log ; then
cat ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_sender.log
sleep 5 # On attend 5 seconde que le receiver finisse
if kill -0 $receiver_pid &> /dev/null ; then
echo "Le receiver ne s'est pas arreté à la fin du transfert!"
kill -9 $receiver_pid
err=1
else # On teste la valeur de retour du receiver
if ! wait $receiver_pid ; then
echo "Crash du receiver!"
cat ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_receiver.log
err=1
fi
fi
# Stop the link simulator
kill -9 $link_pid
wait $link_pid 2>/dev/null
# On vérifie que le transfert s'est bien déroulé
if [[ "$(md5sum ${FILENAME} | awk '{print $1}')" != "$(md5sum ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_received_file.${BSN_EXT} | awk '{print $1}')" ]]; then
echo "Le transfert a corrompu le fichier!"
echo "Diff binaire des deux fichiers: (attendu vs produit)"
diff -C 9 <(od -Ax -t x1z ${FILENAME}) <(od -Ax -t x1z ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_received_file.${BSN_EXT})
echo -e "${GREEN}The transfer has succeeded!${NC}"
exit ${err:-0} # En cas d'erreurs avant, on renvoie le code d'erreur
fi