Contournement bug #654 et loop de test

This commit is contained in:
Maniack Crudelis 2016-12-05 21:03:41 +01:00
parent 2670d2d4fb
commit 621e7d1784
4 changed files with 163 additions and 31 deletions

28
sub_scripts/loop_#654.sh Executable file
View file

@ -0,0 +1,28 @@
#!/bin/bash
# Boucle de test pour partir à la chasse au bug #654 (https://dev.yunohost.org/issues/654)
# Donner en argument le package à tester
# Un ctrl+C est nécessaire pour stopper la boucle!
# Sur un second terminal, tail -f package_check/patch_#654.log pour récupérer les erreurs
if [ "$#" -eq 0 ]; then
echo "Le script prend en argument le package à tester."
exit 1
fi
if [ "$#" -gt 1 ]; then
echo "Le script prend un seul argument."
exit 1
fi
# Récupère le dossier du script
if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
sudo rm "$script_dir/../pcheck.lock" # Retire le lock
touch "$script_dir/../patch_#654.log"
while (true) # Boucle infinie...
do
"$script_dir/../package_check.sh" --bash-mode "$1"
# "$script_dir/../package_check.sh" --bash-mode --no_lxc "$1"
done

View file

@ -0,0 +1,73 @@
#!/bin/bash
# Boucle de test pour partir à la chasse au bug #654 (https://dev.yunohost.org/issues/654)
# Un ctrl+C est nécessaire pour stopper la boucle!
# !!!!!! Attention, ce script doit tourner dans une VM exclusivement !!!!!!
APP="my_webapp_ynh"
APPID=multi_webapp
MANIFEST_ARGS_MOD="domain=crudelis-test4.fr&path=/site&admin=mcrudelis&sql=No&is_public=Yes"
# Récupère le dossier du script
if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
patchlog="$script_dir/temppatchlog654"
patch654="$script_dir/patch_#654_pcheckless.log"
COMPLETE_LOG="/var/log/yunohost/yunohost-cli.log"
touch "$patch654"
lprogress=$(sudo wc -l "$COMPLETE_LOG" | cut -d ' ' -f 1) # Compte le nombre de ligne du log complet
PATCH_654 () {
sudo tail -n +$lprogress "$COMPLETE_LOG" > "$patchlog" # Copie le fichier de log à partir de la dernière ligne du log préexistant
lprogress=$(sudo wc -l "$COMPLETE_LOG" | cut -d ' ' -f 1) # Compte le nombre de ligne du log complet
lprogress=$(( $lprogress + 1 )) # Ignore la première ligne, reprise de l'ancien log.
bug=0
if grep -q "L'exécution du script .* ne s'est pas terminée" "$patchlog"; then
bug=1
elif grep -q "Script execution hasnt terminated:" "$patchlog"; then
bug=1
elif grep -q "La ejecución del script no ha terminado:" "$patchlog"; then
bug=1
elif grep -q "Skriptausführung noch nicht beendet" "$patchlog"; then
bug=1
fi
if [ "$bug" -eq 1 ]
then
echo -e "\e[91m\n!! Bug 654 détecté !!\n\e[0m"
echo -e "$(date)\nBug 654\n" >> "$patch654" # Patch #654
fi
}
while (true) # Boucle infinie...
do
echo "Installation"
sudo yunohost --debug app install "$APP" -a "$MANIFEST_ARGS_MOD" > /dev/null
PATCH_654
echo "Remove"
sudo yunohost --debug app remove $APPID > /dev/null
PATCH_654
echo "Réinstallation"
sudo yunohost --debug app install "$APP" -a "$MANIFEST_ARGS_MOD" > /dev/null
PATCH_654
echo "Upgrade"
sudo yunohost --debug app upgrade $APPID -f "$APP" > /dev/null
PATCH_654
echo "Backup"
sudo yunohost backup delete Backup_test
sudo yunohost --debug backup create -n Backup_test --apps $APPID --hooks conf_ssowat data_home conf_ynh_firewall conf_cron > /dev/null
PATCH_654
echo "Remove"
sudo yunohost --debug app remove $APPID > /dev/null
PATCH_654
echo "Restore"
sudo yunohost --debug backup restore Backup_test --force --apps $APPID > /dev/null
PATCH_654
echo "Remove"
sudo yunohost --debug app remove $APPID > /dev/null
PATCH_654
done

26
sub_scripts/patch_#654.sh Executable file
View file

@ -0,0 +1,26 @@
#!/bin/bash
# Ce patch détecte l'erreur "L'exécution du script ne s'est pas terminée", Bug #654 (https://dev.yunohost.org/issues/654)
# Il permet, en cas d'erreur, de relancer le test qui vient d'échouer.
# En attendant de trouver la source de cette erreur, ce patch permet de soulager les tests de CI qui virent irrémédiablement au rouge en raison de la forte fréquence de ce bug.
patchlog="$script_dir/temppatchlog654"
export lprogress=0
PATCH_654 () {
sudo tail -n +$lprogress "$COMPLETE_LOG" > "$patchlog" # Copie le fichier de log à partir de la dernière ligne du log préexistant
lprogress=$(sudo wc -l "$COMPLETE_LOG" | cut -d ' ' -f 1) # Compte le nombre de ligne du log complet
lprogress=$(( $lprogress + 1 )) # Ignore la première ligne, reprise de l'ancien log.
if grep -q "L'exécution du script .* ne s'est pas terminée" "$patchlog"; then
return 1
elif grep -q "Script execution hasnt terminated:" "$patchlog"; then
return 1
elif grep -q "La ejecución del script no ha terminado:" "$patchlog"; then
return 1
elif grep -q "Skriptausführung noch nicht beendet" "$patchlog"; then
return 1
fi
return 0
}

67
sub_scripts/testing_process.sh Executable file → Normal file
View file

@ -429,8 +429,8 @@ CHECK_BACKUP_RESTORE () {
REMOVE_APP # Suppression de l'app
ECHO_FORMAT "\nRestauration de l'application après suppression de l'application...\n" "white" "bold"
if [ "$no_lxc" -ne 0 ]; then # Si lxc n'est pas utilisé, impossible d'effectuer le 2e test
j=1 # Ignore le 2e test
echo "LXC n'est pas utilisé, impossible de tester la restauration sur un système vierge...\n"
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é)
@ -846,7 +846,26 @@ 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))
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"
@ -854,62 +873,48 @@ TESTING_PROCESS () {
PACKAGE_LINTER # Vérification du package avec package linter
fi
if [ "$setup_sub_dir" -eq 1 ]; then
CHECK_SETUP_SUBDIR # Test d'installation en sous-dossier
LXC_STOP
TEST_LAUNCHER CHECK_SETUP_SUBDIR # Test d'installation en sous-dossier
fi
if [ "$setup_root" -eq 1 ]; then
CHECK_SETUP_ROOT # Test d'installation à la racine du domaine
LXC_STOP
TEST_LAUNCHER CHECK_SETUP_ROOT # Test d'installation à la racine du domaine
fi
if [ "$setup_nourl" -eq 1 ]; then
CHECK_SETUP_NO_URL # Test d'installation sans accès par url
LXC_STOP
TEST_LAUNCHER CHECK_SETUP_NO_URL # Test d'installation sans accès par url
fi
if [ "$upgrade" -eq 1 ]; then
CHECK_UPGRADE # Test d'upgrade
LXC_STOP
TEST_LAUNCHER CHECK_UPGRADE # Test d'upgrade
fi
if [ "$setup_private" -eq 1 ]; then
CHECK_PUBLIC_PRIVATE private # Test d'installation en privé
LXC_STOP
TEST_LAUNCHER CHECK_PUBLIC_PRIVATE private # Test d'installation en privé
fi
if [ "$setup_public" -eq 1 ]; then
CHECK_PUBLIC_PRIVATE public # Test d'installation en public
LXC_STOP
TEST_LAUNCHER CHECK_PUBLIC_PRIVATE public # Test d'installation en public
fi
if [ "$multi_instance" -eq 1 ]; then
CHECK_MULTI_INSTANCE # Test d'installation multiple
LXC_STOP
TEST_LAUNCHER CHECK_MULTI_INSTANCE # Test d'installation multiple
fi
if [ "$wrong_user" -eq 1 ]; then
CHECK_COMMON_ERROR wrong_user # Test d'erreur d'utilisateur
LXC_STOP
TEST_LAUNCHER CHECK_COMMON_ERROR wrong_user # Test d'erreur d'utilisateur
fi
if [ "$wrong_path" -eq 1 ]; then
CHECK_COMMON_ERROR wrong_path # Test d'erreur de path ou de domaine
LXC_STOP
TEST_LAUNCHER CHECK_COMMON_ERROR wrong_path # Test d'erreur de path ou de domaine
fi
if [ "$incorrect_path" -eq 1 ]; then
CHECK_COMMON_ERROR incorrect_path # Test d'erreur de forme de path
LXC_STOP
TEST_LAUNCHER CHECK_COMMON_ERROR incorrect_path # Test d'erreur de forme de path
fi
if [ "$port_already_use" -eq 1 ]; then
CHECK_COMMON_ERROR port_already_use # Test d'erreur de port
LXC_STOP
TEST_LAUNCHER CHECK_COMMON_ERROR port_already_use # Test d'erreur de port
fi
if [ "$corrupt_source" -eq 1 ]; then
CHECK_CORRUPT # Test d'erreur sur source corrompue -> Comment je vais provoquer ça!?
LXC_STOP
TEST_LAUNCHER CHECK_CORRUPT # Test d'erreur sur source corrompue -> Comment je vais provoquer ça!?
fi
if [ "$fail_download_source" -eq 1 ]; then
CHECK_DL # Test d'erreur de téléchargement de la source -> Comment!?
LXC_STOP
TEST_LAUNCHER CHECK_DL # Test d'erreur de téléchargement de la source -> Comment!?
fi
if [ "$final_path_already_use" -eq 1 ]; then
CHECK_FINALPATH # Test sur final path déjà utilisé.
LXC_STOP
TEST_LAUNCHER CHECK_FINALPATH # Test sur final path déjà utilisé.
fi
if [ "$backup_restore" -eq 1 ]; then
CHECK_BACKUP_RESTORE # Test de backup puis de Restauration
TEST_LAUNCHER CHECK_BACKUP_RESTORE # Test de backup puis de Restauration
fi
}