package_check/sub_scripts/testing_process.sh
2016-12-15 14:21:15 +01:00

986 lines
42 KiB
Bash

#!/bin/bash
RESULT="$script_dir/Test_results.log"
BACKUP_HOOKS="conf_ssowat data_home conf_ynh_firewall conf_cron" # La liste des hooks disponible pour le backup se trouve dans /usr/share/yunohost/hooks/backup/
echo -e "Chargement des fonctions de testing_process.sh"
source "$script_dir/sub_scripts/log_extractor.sh"
SETUP_APP () {
# echo -e "MANIFEST_ARGS=$MANIFEST_ARGS"
# echo -e "MANIFEST_ARGS_MOD=$MANIFEST_ARGS_MOD"
COPY_LOG 1
LXC_START "sudo yunohost --debug app install \"$APP_PATH_YUNO\" -a \"$MANIFEST_ARGS_MOD\""
YUNOHOST_RESULT=$?
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
ECHO_FORMAT "Installation terminée avec succès. ($YUNOHOST_RESULT)\n" "white" clog
else
ECHO_FORMAT "Installation échouée. ($YUNOHOST_RESULT)\n" "white" clog
fi
COPY_LOG 2
APPID=$(grep -o -m1 "YNH_APP_INSTANCE_NAME=[^ ]*" "$OUTPUTD" | cut -d '=' -f2) # Récupère le nom de l'app au moment de l'install. Pour pouvoir le réutiliser dans les commandes yunohost. La regex matche tout ce qui suit le =, jusqu'à l'espace.
}
REMOVE_APP () {
if [ "$auto_remove" -eq 0 ] && [ "$bash_mode" -ne 1 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer.
if [ "$no_lxc" -eq 0 ]; then
echo "Utilisez ssh pour vous connecter au conteneur LXC. 'ssh $ARG_SSH $LXC_NAME'"
fi
read -p "Appuyer sur une touche pour supprimer l'application et continuer les tests..." < /dev/tty
fi
ECHO_FORMAT "\nSuppression...\n" "white" "bold" clog
COPY_LOG 1
LXC_START "sudo yunohost --debug app remove \"$APPID\""
YUNOHOST_REMOVE=$?
if [ "$YUNOHOST_REMOVE" -eq 0 ]; then
ECHO_FORMAT "Suppression terminée avec succès. ($YUNOHOST_REMOVE)\n" "white" clog
else
ECHO_FORMAT "Suppression échouée. ($YUNOHOST_REMOVE)\n" "white" clog
fi
COPY_LOG 2
}
CHECK_URL () {
if [ "$use_curl" -eq 1 ]
then
ECHO_FORMAT "\nAccès par l'url...\n" "white" "bold"
if [ "$MANIFEST_PUBLIC" == "null" ]
then # Si la clé du manifest pour l'accès public n'a pas été trouvé, on suppose une app sans accès public
LXC_START "sudo yunohost app setting \"$APPID\" skipped_uris -v \"/\"" # Force un skipped_uris à la racine pour forcer un accès public.
LXC_START "sudo yunohost app ssowatconf"
ECHO_FORMAT "Accès public forcé pour le test d'accès par url.\n" "lyellow" "bold"
fi
if [ "$no_lxc" -eq 0 ]; then
IP_CURL="$(cat "$script_dir/sub_scripts/lxc_build.sh" | grep PLAGE_IP= | cut -d '"' -f2).2"
else
IP_CURL="127.0.0.1"
fi
echo -e "$IP_CURL $DOMAIN #package_check\n$IP_CURL $SOUS_DOMAIN #package_check" | sudo tee -a /etc/hosts > /dev/null # Renseigne le hosts pour le domain à tester, pour passer directement sur localhost
curl_error=0
http503=0
i=1
while [ "$i" -ne 3 ] # Tant que i vaut 1 ou 2, les tests continuent.
do # 2 passes, pour effectuer un test avec le / final, et un autre sans.
if [ "$i" -eq 1 ]; then # Test sans / final.
if [ "${CHECK_PATH:${#CHECK_PATH}-1}" == "/" ] # Si le dernier caractère est un /
then
MOD_CHECK_PATH="${CHECK_PATH:0:${#CHECK_PATH}-1}" # Supprime le /
else
MOD_CHECK_PATH=$CHECK_PATH
fi
i=2 # La prochaine boucle passera au 2e test
fi
if [ "$i" -eq 2 ]; then # Test avec / final.
if [ "${CHECK_PATH:${#CHECK_PATH}-1}" != "/" ] # Si le dernier caractère n'est pas un /
then
MOD_CHECK_PATH="$CHECK_PATH/" # Ajoute / à la fin du path
else
MOD_CHECK_PATH=$CHECK_PATH
fi
i=3 # La prochaine boucle terminera les tests
fi
rm -f "$script_dir/url_output" # Supprime le précédent fichier html si il est encore présent
curl -LksS -w "%{http_code};%{url_effective}\n" $SOUS_DOMAIN$MOD_CHECK_PATH -o "$script_dir/url_output" > "$script_dir/curl_print"
if [ "$?" -ne 0 ]; then
ECHO_FORMAT "Erreur de connexion...\n" "lred" "bold"
curl_error=1
fi
ECHO_FORMAT "Adresse de test: $SOUS_DOMAIN$MOD_CHECK_PATH\n" "white"
ECHO_FORMAT "Adresse de la page: $(cat "$script_dir/curl_print" | cut -d ';' -f2)\n" "white"
HTTP_CODE=$(cat "$script_dir/curl_print" | cut -d ';' -f1)
ECHO_FORMAT "Code HTTP: $HTTP_CODE\n" "white"
if [ "${HTTP_CODE:0:1}" == "0" ] || [ "${HTTP_CODE:0:1}" == "4" ] || [ "${HTTP_CODE:0:1}" == "5" ]
then # Si le code d'erreur http est du type 0xx 4xx ou 5xx, c'est un code d'erreur.
if [ "${HTTP_CODE}" != "401" ]
then # Le code d'erreur 401 fait exception, si il y a 401 c'est en général l'application qui le renvoi. Donc l'install est bonne.
curl_error=1
fi
if [ "${HTTP_CODE}" = "503" ]
then # Le code d'erreur 503 indique que la ressource est temporairement indisponible. On va le croire pour cette fois et lui donner une autre chance.
curl_error=0
ECHO_FORMAT "Service temporairement indisponible...\n" "lyellow" "bold"
http503=$(( $http503 + 1 ))
if [ $http503 -eq 3 ]; then
curl_error=1 # Après 3 erreurs 503, le code est considéré définitivement comme une erreur
else
i=$(( $i - 1 )) # La boucle est décrémenté de 1 pour refaire le même test.
sleep 1 # Attend 1 seconde pour laisser le temps au service de se mettre en place.
continue # Retourne en début de boucle pour recommencer le test
fi
fi
if [ "$curl_error" -eq 1 ]; then
ECHO_FORMAT "Le code HTTP indique une erreur.\n" "white" clog
fi
fi
URL_TITLE=$(grep "<title>" "$script_dir/url_output" | cut -d '>' -f 2 | cut -d '<' -f1)
ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white"
if [ "$URL_TITLE" == "YunoHost Portal" ]; then
YUNO_PORTAL=1
# Il serait utile de réussir à s'authentifier sur le portail pour tester une app protégée par celui-ci. Mais j'y arrive pas...
else
YUNO_PORTAL=0
ECHO_FORMAT "Extrait du corps de la page:\n" "white"
echo -e "\e[37m" # Écrit en light grey
grep "<body" -A 20 "$script_dir/url_output" | sed 1d | tee -a "$RESULT"
echo -e "\e[0m"
fi
done
sudo sed -i '/#package_check/d' /etc/hosts # Supprime la ligne dans le hosts
else
ECHO_FORMAT "Test de connexion annulé.\n" "white"
curl_error=0
fi
}
CHECK_SETUP_SUBDIR () {
# Test d'installation en sous-dossier
ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
use_curl=1
if [ -z "$MANIFEST_DOMAIN" ]; then
echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
if [ -z "$MANIFEST_PATH" ]; then
echo "Clé de manifest pour 'path' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
if [ -z "$MANIFEST_USER" ]; then
echo "Clé de manifest pour 'user' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$PATH_TEST\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=$USER_TEST\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/")
if [ -n "$MANIFEST_PUBLIC" ] && [ -n "$MANIFEST_PUBLIC_public" ]; then # Si possible, install en public pour le test d'accès url
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/")
fi
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
# Test l'accès à l'app
CHECK_PATH=$PATH_TEST
CHECK_URL
tnote=$((tnote+2))
install_pass=1
if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$curl_error" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+2))
GLOBAL_CHECK_SETUP=1 # Installation réussie
GLOBAL_CHECK_SUB_DIR=1 # Installation en sous-dossier réussie
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
GLOBAL_CHECK_SETUP=-1 # Installation échouée
fi
GLOBAL_CHECK_SUB_DIR=-1 # Installation en sous-dossier échouée
fi
# Suppression de l'app
REMOVE_APP
if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression
then
LOG_EXTRACTOR
tnote=$((tnote+2))
install_pass=2
if [ "$YUNOHOST_REMOVE" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+2))
GLOBAL_CHECK_REMOVE_SUBDIR=1 # Suppression en sous-dossier réussie
GLOBAL_CHECK_REMOVE=1 # Suppression réussie
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$GLOBAL_CHECK_REMOVE" -ne 1 ]; then
GLOBAL_CHECK_REMOVE=-1 # Suppression échouée
fi
GLOBAL_CHECK_REMOVE_SUBDIR=-1 # Suppression en sous-dossier échouée
fi
fi
YUNOHOST_RESULT=-1
YUNOHOST_REMOVE=-1
}
CHECK_SETUP_ROOT () {
# Test d'installation à la racine
ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
use_curl=1
if [ -z "$MANIFEST_DOMAIN" ]; then
echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
if [ -z "$MANIFEST_PATH" ]; then
echo "Clé de manifest pour 'path' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
if [ -z "$MANIFEST_USER" ]; then
echo "Clé de manifest pour 'user' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=/\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=$USER_TEST\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/")
if [ -n "$MANIFEST_PUBLIC" ] && [ -n "$MANIFEST_PUBLIC_public" ]; then # Si possible, install en public pour le test d'accès url
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/")
fi
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
# Test l'accès à l'app
CHECK_PATH="/"
CHECK_URL
if [ "$install_pass" -gt 0 ]; then # Si install_pass>0, une installation a déjà été faite.
tnote=$((tnote+1))
else
install_pass=1
tnote=$((tnote+2))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$curl_error" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
if [ "$GLOBAL_CHECK_SETUP" -eq 1 ]; then
note=$((note+1))
else
note=$((note+2))
fi
GLOBAL_CHECK_SETUP=1 # Installation réussie
GLOBAL_CHECK_ROOT=1 # Installation à la racine réussie
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
GLOBAL_CHECK_SETUP=-1 # Installation échouée
fi
GLOBAL_CHECK_ROOT=-1 # Installation à la racine échouée
fi
# Suppression de l'app
REMOVE_APP
if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression
then
LOG_EXTRACTOR
if [ "$install_pass" -eq 2 ]; then # Si install_pass=2, une suppression a déjà été faite.
tnote=$((tnote+1))
else
install_pass=2
tnote=$((tnote+2))
fi
if [ "$YUNOHOST_REMOVE" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
if [ "$GLOBAL_CHECK_REMOVE" -eq 0 ]; then
note=$((note+2))
else
note=$((note+1))
fi
GLOBAL_CHECK_REMOVE_ROOT=1 # Suppression à la racine réussie
GLOBAL_CHECK_REMOVE=1 # Suppression réussie
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$GLOBAL_CHECK_REMOVE" -ne 1 ]; then
GLOBAL_CHECK_REMOVE=-1 # Suppression échouée
fi
GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression à la racine échouée
fi
fi
YUNOHOST_RESULT=-1
YUNOHOST_REMOVE=-1
}
CHECK_SETUP_NO_URL () {
# Test d'installation sans accès par url
use_curl=0
ECHO_FORMAT "\n\n>> Installation sans accès par url... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
if [ "$install_pass" -eq 0 ]; then # Si install_pass=0, aucune installation n'a été faite.
install_pass=1
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
if [ "$GLOBAL_CHECK_SETUP" -eq 0 ]; then
note=$((note+1))
fi
GLOBAL_CHECK_SETUP=1 # Installation réussie
GLOBAL_CHECK_SUB_DIR=1
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
GLOBAL_CHECK_SETUP=-1 # Installation échouée
fi
fi
# Suppression de l'app
REMOVE_APP
if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression
then
LOG_EXTRACTOR
if [ "$install_pass" -ne 2 ]; then # Si install_pass!=2, aucune suppression n'a été faite.
install_pass=2
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_REMOVE" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
if [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq 0 ]; then
note=$((note+1))
fi
GLOBAL_CHECK_REMOVE_ROOT=1 # Suppression réussie
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$GLOBAL_CHECK_REMOVE" -ne 1 ]; then
GLOBAL_CHECK_REMOVE=-1 # Suppression échouée
fi
GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression échouée
fi
fi
YUNOHOST_RESULT=-1
YUNOHOST_REMOVE=-1
}
CHECK_UPGRADE () {
# Test d'upgrade
ECHO_FORMAT "\n\n>> Upgrade... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
return;
fi
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=$USER_TEST\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/")
if [ -n "$MANIFEST_PUBLIC" ] && [ -n "$MANIFEST_PUBLIC_public" ]; then # Si possible, install en public pour le test d'accès url
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/")
fi
if [ "$GLOBAL_CHECK_ROOT" -eq 1 ]; then # Utilise une install root, si elle a fonctionné
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=/\&@")
CHECK_PATH="/"
elif [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ] || [ "$force_install_ok" -eq 1 ]; then # Si l'install en sub_dir à fonctionné. Ou si l'argument force_install_ok est présent. Utilise ce mode d'installation
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$PATH_TEST\&@")
CHECK_PATH="$PATH_TEST"
else
echo "Aucun mode d'installation n'a fonctionné, impossible d'effectuer ce test..."
return;
fi
ECHO_FORMAT "\nInstallation préalable...\n" "white" "bold" clog
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
if [ "$YUNOHOST_RESULT" -ne 0 ]; then
ECHO_FORMAT "\nInstallation échouée...\n" "lred" "bold"
else
ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold" clog
# Upgrade de l'app
COPY_LOG 1
LXC_START "sudo yunohost --debug app upgrade $APPID -f \"$APP_PATH_YUNO\""
YUNOHOST_RESULT=$?
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
ECHO_FORMAT "Upgrade terminée avec succès. ($YUNOHOST_RESULT)\n" "white" clog
else
ECHO_FORMAT "Upgrade échoué. ($YUNOHOST_RESULT)\n" "white" clog
fi
COPY_LOG 2
LOG_EXTRACTOR
# Test l'accès à l'app
CHECK_URL
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$curl_error" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
GLOBAL_CHECK_UPGRADE=1 # Upgrade réussie
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_UPGRADE=-1 # Upgrade échouée
fi
if [ "$no_lxc" -ne 0 ]; then
# Suppression de l'app si lxc n'est pas utilisé.
REMOVE_APP
elif [ "$auto_remove" -eq 0 ] && [ "$bash_mode" -ne 1 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer.
if [ "$no_lxc" -eq 0 ]; then
echo "Utilisez ssh pour vous connecter au conteneur LXC. 'ssh $ARG_SSH $LXC_NAME'"
fi
read -p "Appuyer sur une touche pour continuer les tests..." < /dev/tty
fi
YUNOHOST_RESULT=-1
}
CHECK_BACKUP_RESTORE () {
# Test de backup
ECHO_FORMAT "\n\n>> Backup/Restore... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
fi
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=$USER_TEST\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/")
if [ -n "$MANIFEST_PUBLIC" ] && [ -n "$MANIFEST_PUBLIC_public" ]; then # Si possible, install en public pour le test d'accès url
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/")
fi
GLOBAL_CHECK_BACKUP=0 # Remet à 0 le résultat du test. En cas de reboucle
GLOBAL_CHECK_RESTORE=0
for i in 0 1
do # 2 passes, pour effectuer un test en root et en sub_dir
if [ "$i" -eq 0 ]
then # Commence par l'install root
if [ "$GLOBAL_CHECK_ROOT" -eq 1 ] || [ "$force_install_ok" -eq 1 ]; then # Utilise une install root, si elle a fonctionné. Ou si l'argument force_install_ok est présent.
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=/\&@")
CHECK_PATH="/"
ECHO_FORMAT "\nInstallation préalable à la racine...\n" "white" "bold" clog
else
echo "L'installation à la racine n'a pas fonctionnée, impossible d'effectuer ce test..."
continue;
fi
elif [ "$i" -eq 1 ]
then # Puis teste l'install sub_dir
if [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ] || [ "$force_install_ok" -eq 1 ]; then # Si l'install en sub_dir à fonctionné. Ou si l'argument force_install_ok est présent. Utilise ce mode d'installation
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$PATH_TEST\&@")
CHECK_PATH="$PATH_TEST"
ECHO_FORMAT "\nInstallation préalable en sous-dossier...\n" "white" "bold" clog
else
echo "L'installation en sous-dossier n'a pas fonctionnée, impossible d'effectuer ce test..."
return;
fi
fi
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
if [ "$YUNOHOST_RESULT" -ne 0 ]; then
ECHO_FORMAT "\nInstallation échouée...\n" "lred" "bold"
else
ECHO_FORMAT "\nBackup de l'application...\n" "white" "bold" clog
# Backup de l'app
COPY_LOG 1
LXC_START "sudo yunohost --debug backup create -n Backup_test --apps $APPID --hooks $BACKUP_HOOKS"
YUNOHOST_RESULT=$?
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
ECHO_FORMAT "Backup terminé avec succès. ($YUNOHOST_RESULT)\n" "white" clog
else
ECHO_FORMAT "Backup échoué. ($YUNOHOST_RESULT)\n" "white" clog
fi
COPY_LOG 2
LOG_EXTRACTOR
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
if [ $GLOBAL_CHECK_BACKUP -ne -1 ]; then # Le backup ne peux pas être réussi si il a échoué précédemment...
GLOBAL_CHECK_BACKUP=1 # Backup réussi
fi
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_BACKUP=-1 # Backup échoué
fi
sudo cp -a /var/lib/lxc/$LXC_NAME/rootfs/home/yunohost.backup/archives ./ # Récupère le backup sur le conteneur
for j in 0 1
do # 2 passes, pour tester la restauration après suppression de l'app ET après restauration du conteneur.
if [ "$j" -eq 0 ]
then # Commence par tester la restauration après suppression de l'application
REMOVE_APP # Suppression de l'app
ECHO_FORMAT "\nRestauration de l'application après suppression de l'application...\n" "white" "bold" clog
if [ "$no_lxc" -ne 0 ]; then # Si lxc n'est pas utilisé, impossible d'effectuer le 2e test
j=2 # Ignore le 2e test
echo -e "LXC n'est pas utilisé, impossible de tester la restauration sur un système vierge...\n"
fi
elif [ "$j" -eq 1 ]
then # Puis la restauration après restauration du conteneur (si LXC est utilisé)
LXC_STOP # Restaure le conteneur.
sudo mv -f ./archives /var/lib/lxc/$LXC_NAME/rootfs/home/yunohost.backup/ # Replace le backup sur le conteneur
ECHO_FORMAT "\nRestauration de l'application sur un système vierge...\n" "white" "bold" clog
fi
# Restore de l'app
COPY_LOG 1
LXC_START "sudo yunohost --debug backup restore Backup_test --force --apps $APPID"
YUNOHOST_RESULT=$?
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
ECHO_FORMAT "Restauration terminée avec succès. ($YUNOHOST_RESULT)\n" "white" clog
else
ECHO_FORMAT "Restauration échouée. ($YUNOHOST_RESULT)\n" "white" clog
fi
COPY_LOG 2
LOG_EXTRACTOR
# Test l'accès à l'app
CHECK_URL
tnote=$((tnote+1))
if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$curl_error" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
if [ $GLOBAL_CHECK_RESTORE -ne -1 ]; then # La restauration ne peux pas être réussie si elle a échouée précédemment...
GLOBAL_CHECK_RESTORE=1 # Restore réussi
fi
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_RESTORE=-1 # Restore échoué
fi
if [ "$no_lxc" -ne 0 ]; then
# Suppression de l'app si lxc n'est pas utilisé.
REMOVE_APP
# Suppression de l'archive
sudo yunohost backup delete Backup_test > /dev/null
elif [ "$auto_remove" -eq 0 ] && [ "$bash_mode" -ne 1 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer.
if [ "$no_lxc" -eq 0 ]; then
echo "Utilisez ssh pour vous connecter au conteneur LXC. 'ssh $ARG_SSH $LXC_NAME'"
fi
read -p "Appuyer sur une touche pour continuer les tests..." < /dev/tty
fi
YUNOHOST_RESULT=-1
LXC_STOP # Restaure le snapshot du conteneur avant de recommencer le processus de backup
done
done
}
CHECK_PUBLIC_PRIVATE () {
# Test d'installation en public/privé
if [ "$1" == "private" ]; then
ECHO_FORMAT "\n\n>> Installation privée... [Test $cur_test/$all_test]\n" "white" "bold" clog
GLOBAL_CHECK_PRIVATE=0 # Remet à 0 le résultat du test. En cas de reboucle
fi
if [ "$1" == "public" ]; then
ECHO_FORMAT "\n\n>> Installation publique... [Test $cur_test/$all_test]\n" "white" "bold" clog
GLOBAL_CHECK_PUBLIC=0 # Remet à 0 le résultat du test. En cas de reboucle
fi
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
return
fi
if [ -z "$MANIFEST_PUBLIC" ]; then
echo "Clé de manifest pour 'is_public' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
if [ -z "$MANIFEST_PUBLIC_public" ]; then
echo "Valeur 'public' pour la clé de manifest 'is_public' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
if [ -z "$MANIFEST_PUBLIC_private" ]; then
echo "Valeur 'private' pour la clé de manifest 'is_public' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return
fi
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=$USER_TEST\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/")
# Choix public/privé
if [ "$1" == "private" ]; then
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z0-9]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_private\&/")
fi
if [ "$1" == "public" ]; then
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z0-9]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/")
fi
for i in 0 1
do # 2 passes, pour effectuer un test en root et en sub_dir
if [ "$i" -eq 0 ]
then # Commence par l'install root
if [ "$GLOBAL_CHECK_ROOT" -eq 1 ] || [ "$force_install_ok" -eq 1 ]; then # Utilise une install root, si elle a fonctionné. Ou si l'argument force_install_ok est présent.
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=/\&@")
CHECK_PATH="/"
else
echo "L'installation à la racine n'a pas fonctionnée, impossible d'effectuer ce test..."
continue;
fi
elif [ "$i" -eq 1 ]
then # Puis teste l'install sub_dir
if [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ] || [ "$force_install_ok" -eq 1 ]; then # Si l'install en sub_dir à fonctionné. Ou si l'argument force_install_ok est présent. Utilise ce mode d'installation
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$PATH_TEST\&@")
CHECK_PATH="$PATH_TEST"
else
echo "L'installation en sous-dossier n'a pas fonctionnée, impossible d'effectuer ce test..."
return;
fi
fi
# Installation de l'app
SETUP_APP
# Test l'accès à l'app
CHECK_URL
if [ "$1" == "private" ]; then
if [ "$YUNO_PORTAL" -eq 0 ]; then # En privé, si l'accès url n'arrive pas sur le portail. C'est un échec.
YUNOHOST_RESULT=1
fi
fi
if [ "$1" == "public" ]; then
if [ "$YUNO_PORTAL" -eq 1 ]; then # En public, si l'accès url arrive sur le portail. C'est un échec.
YUNOHOST_RESULT=1
fi
fi
LOG_EXTRACTOR
tnote=$((tnote+1))
if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$curl_error" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
if [ "$1" == "private" ]; then
if [ $GLOBAL_CHECK_PRIVATE -ne -1 ]; then # L'installation ne peux pas être réussie si elle a échouée précédemment...
GLOBAL_CHECK_PRIVATE=1 # Installation privée réussie
fi
fi
if [ "$1" == "public" ]; then
if [ $GLOBAL_CHECK_PUBLIC -ne -1 ]; then # L'installation ne peux pas être réussie si elle a échouée précédemment...
GLOBAL_CHECK_PUBLIC=1 # Installation publique réussie
fi
fi
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$1" == "private" ]; then
GLOBAL_CHECK_PRIVATE=-1 # Installation privée échouée
fi
if [ "$1" == "public" ]; then
GLOBAL_CHECK_PUBLIC=-1 # Installation publique échouée
fi
fi
if [ "$auto_remove" -eq 0 ] && [ "$bash_mode" -ne 1 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer.
if [ "$no_lxc" -eq 0 ]; then
echo "Utilisez ssh pour vous connecter au conteneur LXC. 'ssh $ARG_SSH $LXC_NAME'"
fi
read -p "Appuyer sur une touche pour continuer les tests..." < /dev/tty
fi
REMOVE_APP
YUNOHOST_RESULT=-1
done
}
CHECK_MULTI_INSTANCE () {
# Test d'installation en multi-instance
ECHO_FORMAT "\n\n>> Installation multi-instance... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
return
fi
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=$USER_TEST\&@")
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/")
if [ -n "$MANIFEST_PUBLIC" ] && [ -n "$MANIFEST_PUBLIC_public" ]; then # Si possible, install en public pour le test d'accès url
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/")
fi
if [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ] || [ "$force_install_ok" -eq 1 ]; then # Si l'install en sub_dir à fonctionné. Ou si l'argument force_install_ok est présent. Utilise ce mode d'installation
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$PATH_TEST\&@")
else
echo "L'installation en sous-dossier n'a pas fonctionné, impossible d'effectuer ce test..."
return;
fi
# Installation de l'app une première fois
ECHO_FORMAT "1ère installation: path=$PATH_TEST\n" clog
SETUP_APP
LOG_EXTRACTOR
APPID_first=$APPID # Stocke le nom de la première instance
YUNOHOST_RESULT_first=$YUNOHOST_RESULT # Stocke le résulat de l'installation de la première instance
# Installation de l'app une deuxième fois, en ajoutant un suffixe au path
path2="$PATH_TEST-2"
ECHO_FORMAT "2e installation: path=$path2\n" clog
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$path2\&@")
SETUP_APP
LOG_EXTRACTOR
APPID_second=$APPID # Stocke le nom de la deuxième instance
YUNOHOST_RESULT_second=$YUNOHOST_RESULT # Stocke le résulat de l'installation de la deuxième instance
path3="/3-${PATH_TEST#/}"
ECHO_FORMAT "3e installation: path=$path3\n" clog
# Installation de l'app une troisième fois, en ajoutant un préfixe au path
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=$path2\&@$MANIFEST_PATH=$path3\&@")
SETUP_APP
LOG_EXTRACTOR
# Test l'accès à la 1ère instance de l'app
CHECK_PATH="$PATH_TEST"
CHECK_URL
if [ "$curl_error" -ne 0 ]; then
YUNOHOST_RESULT_first=$curl_error
fi
# Test l'accès à la 2e instance de l'app
CHECK_PATH="$path2"
CHECK_URL
if [ "$curl_error" -ne 0 ]; then
YUNOHOST_RESULT_second=$curl_error
fi
# Test l'accès à la 3e instance de l'app
CHECK_PATH="$path3"
CHECK_URL
if [ "$curl_error" -ne 0 ]; then
YUNOHOST_RESULT=$curl_error
fi
tnote=$((tnote+1))
if [ "$YUNOHOST_RESULT" -eq 0 ] || [ "$YUNOHOST_RESULT_second" -eq 0 ]
then # Si la 2e OU la 3e installation à fonctionné, le test est validé. Car le SSO peut bloquer des installations en suffixe sur la même racine.
YUNOHOST_RESULT=0
fi
if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$YUNOHOST_RESULT_first" -eq 0 ] && [ "$curl_error" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
GLOBAL_CHECK_MULTI_INSTANCE=1 # Installation multi-instance réussie
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_MULTI_INSTANCE=-1 # Installation multi-instance échouée
fi
if [ "$no_lxc" -ne 0 ]; then
# Suppression de la 2e app si lxc n'est pas utilisé.
REMOVE_APP
# Suppression de la 1ère app
APPID=$APPID_first
REMOVE_APP
elif [ "$auto_remove" -eq 0 ] && [ "$bash_mode" -ne 1 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer.
if [ "$no_lxc" -eq 0 ]; then
echo "Utilisez ssh pour vous connecter au conteneur LXC. 'ssh $ARG_SSH $LXC_NAME'"
fi
read -p "Appuyer sur une touche pour continuer les tests..." < /dev/tty
fi
YUNOHOST_RESULT=-1
}
CHECK_COMMON_ERROR () {
# Test d'erreur depuis le manifest
if [ "$1" == "wrong_user" ]; then
ECHO_FORMAT "\n\n>> Erreur d'utilisateur... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
if [ "$1" == "wrong_path" ]; then
ECHO_FORMAT "\n\n>> Erreur de domaine... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
if [ "$1" == "incorrect_path" ]; then
ECHO_FORMAT "\n\n>> Path mal formé... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
if [ "$1" == "port_already_use" ]; then
ECHO_FORMAT "\n\n>> Port déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" clog
if [ -z "$MANIFEST_PORT" ]; then
echo "Clé de manifest pour 'port' introuvable ou port non renseigné dans le fichier check_process. Impossible de procéder à ce test"
return
fi
fi
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
return
fi
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
if [ "$1" == "wrong_path" ]; then # Force un domaine incorrect
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=domainenerreur.rien\&/")
else
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/")
fi
if [ "$1" == "wrong_user" ]; then # Force un user incorrect
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=NO_USER\&@")
else
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_USER=[a-Z/-$]*\&@$MANIFEST_USER=$USER_TEST\&@")
fi
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/")
if [ "$1" == "incorrect_path" ]; then # Force un path mal formé: Ce sera path/ au lieu de /path
WRONG_PATH=${PATH_TEST#/}/ # Transforme le path de /path à path/
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$WRONG_PATH\&@")
CHECK_PATH="$PATH_TEST"
else
if [ "$GLOBAL_CHECK_ROOT" -eq 1 ]; then # Utilise une install root, si elle a fonctionné
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=/\&@")
CHECK_PATH="/"
elif [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ] || [ "$force_install_ok" -eq 1 ]; then # Si l'install en sub_dir à fonctionné. Ou si l'argument force_install_ok est présent. Utilise ce mode d'installation
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$PATH_TEST\&@")
else
echo "Aucun mode d'installation n'a fonctionné, impossible d'effectuer ce test..."
return;
fi
fi
if [ -n "$MANIFEST_PUBLIC" ] && [ -n "$MANIFEST_PUBLIC_public" ]; then # Si possible, install en public pour le test d'accès url
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/")
fi
if [ "$1" == "port_already_use" ]; then # Force un port déjà utilisé
if [ "${MANIFEST_PORT:0:1}" == "#" ] # Si le premier caractère de $MANIFEST_PORT est un #, c'est un numéro de port. Absent du manifest
then
check_port="${MANIFEST_PORT:1}" # Récupère le numéro de port
else
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PORT=[0-9$]*\&@$MANIFEST_PORT=6660\&@")
check_port=6660 # Sinon fixe le port à 6660 dans le manifest
fi
LXC_START "sudo yunohost firewall allow Both $check_port"
fi
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
if [ "$1" == "incorrect_path" ] || [ "$1" == "port_already_use" ]; then
# Test l'accès à l'app
if [ "$YUNOHOST_RESULT" -eq 0 ]; then # Test l'url si l'installation à réussie.
CHECK_URL
if [ "$curl_error" -ne 0 ]; then
YUNOHOST_RESULT=$curl_error
fi
fi
fi
tnote=$((tnote+1))
if [ "$YUNOHOST_RESULT" -eq 0 ]; then # wrong_user et wrong_path doivent aboutir à échec de l'installation. C'est l'inverse pour incorrect_path et port_already_use.
if [ "$1" == "wrong_user" ]; then
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_ADMIN=-1 # Installation privée réussie
fi
if [ "$1" == "wrong_path" ]; then
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_DOMAIN=-1 # Installation privée réussie
fi
if [ "$1" == "incorrect_path" ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
GLOBAL_CHECK_PATH=1 # Correction de path réussie
fi
if [ "$1" == "port_already_use" ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
GLOBAL_CHECK_PORT=1 # Changement de port réussi
fi
else
if [ "$1" == "wrong_user" ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
GLOBAL_CHECK_ADMIN=1 # Installation privée échouée
fi
if [ "$1" == "wrong_path" ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
GLOBAL_CHECK_DOMAIN=1 # Installation privée échouée
fi
if [ "$1" == "incorrect_path" ]; then
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_PATH=-1 # Installation privée échouée
fi
if [ "$1" == "port_already_use" ]; then
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
GLOBAL_CHECK_PORT=-1 # Installation privée échouée
fi
fi
if [ "$no_lxc" -ne 0 ]; then
# Suppression de l'app si lxc n'est pas utilisé.
REMOVE_APP
if [ "$1" == "port_already_use" ]; then # Libère le port ouvert pour le test
sudo yunohost firewall disallow Both $check_port > /dev/null
fi
elif [ "$auto_remove" -eq 0 ] && [ "$bash_mode" -ne 1 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer.
if [ "$no_lxc" -eq 0 ]; then
echo "Utilisez ssh pour vous connecter au conteneur LXC. 'ssh $ARG_SSH $LXC_NAME'"
fi
read -p "Appuyer sur une touche pour continuer les tests..." < /dev/tty
fi
YUNOHOST_RESULT=-1
}
PACKAGE_LINTER () {
# Package linter
ECHO_FORMAT "\n\n>> Package linter... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
"$script_dir/package_linter/package_linter.py" "$APP_CHECK" | tee "$script_dir/package_linter.log" # Effectue un test du package avec package_linter
if grep -q ">>>> " "$script_dir/package_linter.log"; then
GLOBAL_LINTER=1 # Si au moins 1 header est trouvé, c'est que l'exécution s'est bien déroulée.
fi
if grep -q -F "[91m" "$script_dir/package_linter.log"; then # Si une erreur a été détectée par package_linter.
GLOBAL_LINTER=-1 # Au moins une erreur a été détectée par package_linter
fi
tnote=$((tnote+1))
if [ "$GLOBAL_LINTER" -eq 1 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1)) # package_linter n'a détecté aucune erreur
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
fi
}
CHECK_CORRUPT () {
# Test d'erreur sur source corrompue
ECHO_FORMAT "\n\n>> Source corrompue après téléchargement... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
fi
echo -n "Non implémenté"
# GLOBAL_CHECK_CORRUPT=0
}
CHECK_DL () {
# Test d'erreur de téléchargement de la source
ECHO_FORMAT "\n\n>> Erreur de téléchargement de la source... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
fi
echo -n "Non implémenté"
# GLOBAL_CHECK_DL=0
}
CHECK_FINALPATH () {
# Test sur final path déjà utilisé.
ECHO_FORMAT "\n\n>> Final path déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ] && [ "$force_install_ok" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
fi
echo -n "Non implémenté"
# GLOBAL_CHECK_FINALPATH=0
}
TEST_LAUNCHER () {
# $1 prend le nom de la fonction à démarrer.
# $2 prend l'argument de la fonction, le cas échéant
# Ce launcher permet de factoriser le code autour du lancement des fonctions de test
BUG654=1 # Patch #654
while [ "$BUG654" -eq "1" ]; do # Patch #654
$1 $2 # Exécute le test demandé, avec son éventuel argument
LXC_STOP # Arrête le conteneur LXC
PATCH_654 # Patch #654
BUG654=$? # Patch #654
if [ "$BUG654" -eq "1" ]; then # Patch #654
ECHO_FORMAT "\n!! Bug 654 détecté !!\n" "red" clog # Patch #654
echo -e "date\nBug 654 sur $1 $2\n\n" >> "$script_dir/patch_#654.log" # Patch #654
cur_test=$((cur_test-1))
tnote=$((tnote-1))
fi # Patch #654
done # Patch #654
}
TESTING_PROCESS () {
source "$script_dir/sub_scripts/patch_#654.sh" # Patch #654
# Lancement des tests
cur_test=1
ECHO_FORMAT "\nScénario de test: $PROCESS_NAME\n" "white" "underlined" clog
if [ "$pkg_linter" -eq 1 ]; then
PACKAGE_LINTER # Vérification du package avec package linter
fi
if [ "$setup_sub_dir" -eq 1 ]; then
TEST_LAUNCHER CHECK_SETUP_SUBDIR # Test d'installation en sous-dossier
fi
if [ "$setup_root" -eq 1 ]; then
TEST_LAUNCHER CHECK_SETUP_ROOT # Test d'installation à la racine du domaine
fi
if [ "$setup_nourl" -eq 1 ]; then
TEST_LAUNCHER CHECK_SETUP_NO_URL # Test d'installation sans accès par url
fi
if [ "$upgrade" -eq 1 ]; then
TEST_LAUNCHER CHECK_UPGRADE # Test d'upgrade
fi
if [ "$setup_private" -eq 1 ]; then
TEST_LAUNCHER CHECK_PUBLIC_PRIVATE private # Test d'installation en privé
fi
if [ "$setup_public" -eq 1 ]; then
TEST_LAUNCHER CHECK_PUBLIC_PRIVATE public # Test d'installation en public
fi
if [ "$multi_instance" -eq 1 ]; then
TEST_LAUNCHER CHECK_MULTI_INSTANCE # Test d'installation multiple
fi
if [ "$wrong_user" -eq 1 ]; then
TEST_LAUNCHER CHECK_COMMON_ERROR wrong_user # Test d'erreur d'utilisateur
fi
if [ "$wrong_path" -eq 1 ]; then
TEST_LAUNCHER CHECK_COMMON_ERROR wrong_path # Test d'erreur de path ou de domaine
fi
if [ "$incorrect_path" -eq 1 ]; then
TEST_LAUNCHER CHECK_COMMON_ERROR incorrect_path # Test d'erreur de forme de path
fi
if [ "$port_already_use" -eq 1 ]; then
TEST_LAUNCHER CHECK_COMMON_ERROR port_already_use # Test d'erreur de port
fi
if [ "$corrupt_source" -eq 1 ]; then
TEST_LAUNCHER CHECK_CORRUPT # Test d'erreur sur source corrompue -> Comment je vais provoquer ça!?
fi
if [ "$fail_download_source" -eq 1 ]; then
TEST_LAUNCHER CHECK_DL # Test d'erreur de téléchargement de la source -> Comment!?
fi
if [ "$final_path_already_use" -eq 1 ]; then
TEST_LAUNCHER CHECK_FINALPATH # Test sur final path déjà utilisé.
fi
if [ "$backup_restore" -eq 1 ]; then
TEST_LAUNCHER CHECK_BACKUP_RESTORE # Test de backup puis de Restauration
fi
}