Skip to content
Extraits de code Groupes Projets
advanced_test.sh 2,72 ko
Newer Older
  • Learn to ignore specific revisions
  • Vany Ingenzi's avatar
    Vany Ingenzi a validé
    #!/bin/bash
    
    if [ -z "$1" ]; then 
      echo "Not given the file to send"
      exit 1
    fi 
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    FILENAME=$1
    BASENAME=$(basename $FILENAME)
    
    TEST_OUTPUT_FILES='unwanted_logs/advanced_tests'
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    BSN_PRE="${BASENAME%.*}"
    BSN_EXT="${BASENAME##*.}"
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    # Create the logs directory 
    
    mkdir ${TEST_OUTPUT_FILES}/ 2>/dev/null  
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    # cleanup d'un test précédent
    
    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
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    
    
    # We first launch the link simulator 
    
    ./linksimulator/link_sim -p 65027 -P 65139 -l 70 -d 1500 -e 20 -c 10 -R &>${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_link.log &
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    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=$!
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    
    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
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
      echo "Crash du sender!"
    
      cat ${TEST_OUTPUT_FILES}/adv_${BSN_PRE}_sender.log
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
      err=1  # On enregistre l'erreur
    fi
    
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    sleep 5 # On attend 5 seconde que le receiver finisse
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
    
    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
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
        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
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
      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})
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
      exit 1
    else
    
      echo -e "${GREEN}The transfer has succeeded!${NC}"
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
      exit ${err:-0}  # En cas d'erreurs avant, on renvoie le code d'erreur
    fi