mirror of
https://github.com/YunoHost/package_check.git
synced 2024-09-03 20:06:20 +02:00
327 lines
11 KiB
Bash
Executable file
327 lines
11 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
USER_TEST=package_checker
|
|
PASSWORD_TEST=checker_pwd
|
|
PATH_TEST=/check
|
|
DOMAIN=$(sudo yunohost domain list -l 1 | cut -d" " -f 2)
|
|
|
|
abs_path=$(cd $(dirname $0); pwd) # Récupère le chemin absolu du script.
|
|
|
|
source $abs_path/sub_scripts/testing_process.sh
|
|
source /usr/share/yunohost/helpers
|
|
|
|
# Vérifie l'existence de l'utilisateur de test
|
|
if ! ynh_user_exists "$USER_TEST" ; then # Si il n'existe pas, il faut le créer.
|
|
USER_TEST_CLEAN=${USER_TEST//"_"/""}
|
|
sudo yunohost user create --firstname "$USER_TEST_CLEAN" --mail "$USER_TEST_CLEAN@$DOMAIN" --lastname "$USER_TEST_CLEAN" --password "$PASSWORD_TEST" "$USER_TEST"
|
|
fi
|
|
|
|
# Vérifie le type d'emplacement du package à tester
|
|
if echo "$1" | grep -Eq "https?:\/\/"
|
|
then
|
|
GIT_PACKAGE=1
|
|
git clone $1 $(basename $1)
|
|
$1 = $(basename $1)
|
|
fi
|
|
APP_CHECK=$1
|
|
|
|
# Vérifie l'existence du fichier check_process
|
|
if [ ! -e $APP_CHECK/check_process ]; then
|
|
echo -e "\nImpossible de trouver le fichier check_process pour procéder aux tests."
|
|
echo "Merci d'ajouter un fichier check_process à la racine de l'app à tester."
|
|
exit 1
|
|
fi
|
|
|
|
## Parsing du fichier check_process de manière séquentielle.
|
|
GLOBAL_CHECK_SETUP=0
|
|
GLOBAL_CHECK_SUB_DIR=0
|
|
GLOBAL_CHECK_ROOT=0
|
|
GLOBAL_CHECK_REMOVE=0
|
|
GLOBAL_CHECK_REMOVE_SUBDIR=0
|
|
GLOBAL_CHECK_REMOVE_ROOT=0
|
|
GLOBAL_CHECK_UPGRADE=0
|
|
GLOBAL_CHECK_BACKUP=0
|
|
GLOBAL_CHECK_RESTORE=0
|
|
GLOBAL_CHECK_PRIVATE=0
|
|
GLOBAL_CHECK_PUBLIC=0
|
|
GLOBAL_CHECK_ADMIN=0
|
|
GLOBAL_CHECK_DOMAIN=0
|
|
GLOBAL_CHECK_PATH=0
|
|
GLOBAL_CHECK_CORRUPT=0
|
|
GLOBAL_CHECK_DL=0
|
|
GLOBAL_CHECK_PORT=0
|
|
GLOBAL_CHECK_FINALPATH=0
|
|
IN_PROCESS=0
|
|
MANIFEST=0
|
|
CHECKS=0
|
|
AUTO_REMOVE=1
|
|
while read LIGNE
|
|
do
|
|
if echo "$LIGNE" | grep -q "auto_remove="; then # Indication d'auto remove
|
|
auto_remove=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "^##"; then # Début d'un scénario de test
|
|
if [ "$IN_PROCESS" -eq 1 ]; then # Un scénario est déjà en cours. Donc on a atteind la fin du scénario.
|
|
TESTING_PROCESS
|
|
fi
|
|
PROCESS_NAME=${LIGNE#\#\# }
|
|
IN_PROCESS=1
|
|
fi
|
|
if [ "$IN_PROCESS" -eq 1 ]
|
|
then # Analyse des arguments du scenario de test
|
|
if echo "$LIGNE" | grep -q "# Manifest"; then # Arguments du manifest
|
|
MANIFEST=1
|
|
MANIFEST_ARGS="" # Initialise la chaine des arguments d'installation
|
|
fi
|
|
if echo "$LIGNE" | grep -q "# Checks"; then # Tests à effectuer
|
|
MANIFEST=0
|
|
CHECKS=1
|
|
setup_sub_dir=0
|
|
setup_root=0
|
|
setup_private=0
|
|
setup_public=0
|
|
wrong_user=0
|
|
wrong_path=0
|
|
incorrect_path=0
|
|
corrupt_source=0
|
|
fail_download_source=0
|
|
port_already_use=0
|
|
final_path_already_use=0
|
|
fi
|
|
if [ "$MANIFEST" -eq 1 ]
|
|
then # Analyse des arguments du manifest
|
|
if echo "$LIGNE" | grep -q "="; then
|
|
if echo "$LIGNE" | grep -q "(DOMAIN)"; then # Domaine dans le manifest
|
|
MANIFEST_DOMAIN=$(echo "$LIGNE" | cut -d '=' -f1) # Récupère la clé du manifest correspondant au domaine
|
|
LIGNE=$(echo "$LIGNE" | cut -d '(' -f1) # Retire l'indicateur de clé de manifest à la fin de la ligne
|
|
fi
|
|
if echo "$LIGNE" | grep -q "(PATH)"; then # Path dans le manifest
|
|
MANIFEST_PATH=$(echo "$LIGNE" | cut -d '=' -f1) # Récupère la clé du manifest correspondant au path
|
|
LIGNE=$(echo "$LIGNE" | cut -d '(' -f1) # Retire l'indicateur de clé de manifest à la fin de la ligne
|
|
fi
|
|
if echo "$LIGNE" | grep -q "(USER)"; then # User dans le manifest
|
|
MANIFEST_USER=$(echo "$LIGNE" | cut -d '=' -f1) # Récupère la clé du manifest correspondant à l'utilisateur
|
|
LIGNE=$(echo "$LIGNE" | cut -d '(' -f1) # Retire l'indicateur de clé de manifest à la fin de la ligne
|
|
fi
|
|
if echo "$LIGNE" | grep -q "(PUBLIC"; then # Accès public/privé dans le manifest
|
|
MANIFEST_PUBLIC=$(echo "$LIGNE" | cut -d '=' -f1) # Récupère la clé du manifest correspondant à l'accès public ou privé
|
|
MANIFEST_PUBLIC_public=$(echo "$LIGNE" | grep -o "|public=[a-Z]*" | cut -d "=" -f2) # Récupère la valeur pour un accès public.
|
|
MANIFEST_PUBLIC_private=$(echo "$LIGNE" | grep -o "|private=[a-Z]*" | cut -d "=" -f2) # Récupère la valeur pour un accès privé.
|
|
LIGNE=$(echo "$LIGNE" | cut -d '(' -f1) # Retire l'indicateur de clé de manifest à la fin de la ligne
|
|
fi
|
|
if echo "$LIGNE" | grep -q "(PASSWORD)"; then # Password dans le manifest
|
|
MANIFEST_PASSWORD=$(echo "$LIGNE" | cut -d '=' -f1) # Récupère la clé du manifest correspondant au mot de passe
|
|
LIGNE=$(echo "$LIGNE" | cut -d '(' -f1) # Retire l'indicateur de clé de manifest à la fin de la ligne
|
|
fi
|
|
if [ "${#MANIFEST_ARGS}" -gt 0 ]; then # Si il y a déjà des arguments
|
|
MANIFEST_ARGS="$MANIFEST_ARGS&" #, précède de &
|
|
fi
|
|
MANIFEST_ARGS="$MANIFEST_ARGS$(echo $LIGNE | sed 's/[ \"]//g')" # Ajoute l'argument du manifest, en retirant les espaces et les guillemets.
|
|
fi
|
|
fi
|
|
if [ "$CHECKS" -eq 1 ]
|
|
then # Analyse des tests à effectuer sur ce scenario.
|
|
if echo "$LIGNE" | grep -q "setup_sub_dir="; then # Test d'installation en sous-dossier
|
|
setup_sub_dir=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "setup_root="; then # Test d'installation à la racine
|
|
setup_root=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "setup_nourl="; then # Test d'installation sans accès par url
|
|
setup_nourl=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "setup_private="; then # Test d'installation en privé
|
|
setup_private=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "setup_public="; then # Test d'installation en public
|
|
setup_public=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "wrong_user="; then # Test d'erreur d'utilisateur
|
|
wrong_user=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "wrong_path="; then # Test d'erreur de path ou de domaine
|
|
wrong_path=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "incorrect_path="; then # Test d'erreur de forme de path
|
|
incorrect_path=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "corrupt_source="; then # Test d'erreur sur source corrompue
|
|
corrupt_source=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "fail_download_source="; then # Test d'erreur de téléchargement de la source
|
|
fail_download_source=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "port_already_use="; then # Test d'erreur de port
|
|
port_already_use=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
if echo "$LIGNE" | grep -q "final_path_already_use="; then # Test sur final path déjà utilisé.
|
|
final_path_already_use=$(echo "$LIGNE" | cut -d '=' -f2)
|
|
fi
|
|
fi
|
|
|
|
fi
|
|
done < "$APP_CHECK/check_process"
|
|
|
|
TESTING_PROCESS
|
|
|
|
ECHO_FORMAT "\n\nInstallation: "
|
|
if [ "$GLOBAL_CHECK_SETUP" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_SETUP" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Installation en sous-dossier: "
|
|
if [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_SUB_DIR" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Installation à la racine: "
|
|
if [ "$GLOBAL_CHECK_ROOT" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_ROOT" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Suppression: "
|
|
if [ "$GLOBAL_CHECK_REMOVE" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_REMOVE" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Suppression depuis sous-dossier: "
|
|
if [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -eq 1 ]; then
|
|
ECHO_FORMAT "\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_REMOVE_SUBDIR" -eq -1 ]; then
|
|
ECHO_FORMAT "\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Suppression depuis racine: "
|
|
if [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Upgrade: "
|
|
if [ "$GLOBAL_CHECK_UPGRADE" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_UPGRADE" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Backup: "
|
|
if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_BACKUP" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Restore: "
|
|
if [ "$GLOBAL_CHECK_RESTORE" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_RESTORE" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Installation privée: "
|
|
if [ "$GLOBAL_CHECK_PRIVATE" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_PRIVATE" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Installation publique: "
|
|
if [ "$GLOBAL_CHECK_PUBLIC" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_PUBLIC" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Mauvais utilisateur: "
|
|
if [ "$GLOBAL_CHECK_ADMIN" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_ADMIN" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Erreur de domaine: "
|
|
if [ "$GLOBAL_CHECK_DOMAIN" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_DOMAIN" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Correction de path: "
|
|
if [ "$GLOBAL_CHECK_PATH" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_PATH" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Source corrompue: "
|
|
if [ "$GLOBAL_CHECK_CORRUPT" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_CORRUPT" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Erreur de téléchargement de la source: "
|
|
if [ "$GLOBAL_CHECK_DL" -eq 1 ]; then
|
|
ECHO_FORMAT "\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_DL" -eq -1 ]; then
|
|
ECHO_FORMAT "\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Port déjà utilisé: "
|
|
if [ "$GLOBAL_CHECK_PORT" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_PORT" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|
|
|
|
ECHO_FORMAT "Dossier déjà utilisé: "
|
|
if [ "$GLOBAL_CHECK_FINALPATH" -eq 1 ]; then
|
|
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
|
|
elif [ "$GLOBAL_CHECK_FINALPATH" -eq -1 ]; then
|
|
ECHO_FORMAT "\t\t\tFAIL\n" "lred"
|
|
else
|
|
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
|
|
fi
|