git_update/test_git_update.sh

279 lines
7.9 KiB
Bash
Executable File

#! /bin/bash
#importer driglibash
. driglibash-base
echo "<execution of test_git_update.sh>"
REPO_NAME=performance_testing
REMOTE_LOCATION=./remote
WITH_SUBMODULE="true"
REMOTE="./remote/performance_testing"
FILENAMES=("sample0" "sample1")
TAG_NAME=start
if [ "$WITH_SUBMODULE" = "true" ]; then
bash creation_repo.sh -s &> /dev/null
else
bash creation_repo.sh &> /dev/null
fi
Help()
{
echo "
NAME
test_git_update.sh
SYNOPSIS
test_git_update.sh [-a] [-h] [-n number]
OPTIONS
-a excutes all the tests.
-n number executes test number
-h prints the help.
DESCRIPTION"
}
cloning_check(){
if [ -d "./$REPO_NAME" ]; then
echo "$REPO_NAME has been created"
cloning_result=0
cd ./$REPO_NAME
for FILE in ${FILENAMES[@]}
do
if [ -f "./$REPO_NAME/$FILE" ]; then
echo "the file $FILE was correctly imported"
else
cloning_result=1
echo "the file $FILE could not be imported"
fi
done
cd ..
else
cloning_result=1
echo "the folder $REPO_NAME could not be created"
fi
}
history_check(){
run cd $REPO_NAME
history_result=0
if [ $(git log | grep "commit" | wc -l) -gt 1 ]; then
echo "Several commits have been saved"
history_result=1
elif [ $(git log | grep "commit" | wc -l) = 1 ]; then
echo "Only the last commit has been saved"
else
history_result=1
echo "Cloning error, incoherent git log"
fi
cd ..
}
test0 (){
#CASE 0: git cloned in an empty directory without tag
section TEST0
#if it exists, delete the directory
if [ -d $REPO_NAME ]; then
rm -rf $REPO_NAME
fi
run ./git_update.sh $REMOTE
#checks
cloning_check
history_check
case0=$(($history_result+$cloning_result))
if [ $case0=0 ]; then
echo "case de test 0, dans un dossier vide préexistant, sans historique, sans tag : OK"
else
echo "case de test 0, dans un dossier vide préexistant, sans historique, sans tag : ECHEC"
fi
}
test1(){
#CASE 1: git cloned in an empty directory with tag
section TEST1
#if it exists, delete the directory
if [ -d $REPO_NAME ]; then
run rm -rf $REPO_NAME
fi
run ./git_update.sh -r $TAG_NAME $REMOTE
#checks
cloning_check
history_check
tagcheck #à ecrire
case1=
if [ "$case1" = "true" ]; then
echo "case de test 1, dans un dossier vide préexistant, sans historique, avec tag : OK"
else
echo "case de test 1, dans un dossier vide préexistant, sans historique, avec tag: ECHEC"
fi
}
test2(){
#case 2 : git cloné dans un dossier git déjà rempli, on souhaite que tout soit écrasé
section TEST2.1
#sous-test 1 : dossier contenant le même repo dans un état antérieur, on ne garde pas les fichiers hors git
REPO_NAMEDst=leRepo2 #destination
FILENAMESToOverwrite=("texte" "texteHorsGit")
nonGitFILE=texteHorsGit
newFILE=main.c
if [ -d $REPO_NAME ]; then #reste d'un test précédent
run rm -rf $REPO_NAME
echo "le dossier de test préexistant $REPO_NAME a été supprimé"
fi
if [ -d $REPO_NAMEDst ]; then #reste de ce test-ci déjà exécuté
run rm -rf $REPO_NAMEDst
echo "le dossier de test préexistant $REPO_NAMEDst a été supprimé"
fi
run mkdir $REPO_NAMEDst
#on clone notre repo de test dans un état précédent (grâce au tag début quand on aura la fonctionnalité précédente fonctionnelle)
run git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
#on ajoute des fichiers hors Git
run touch $REPO_NAMEDst/$nonGitFILE
case2="true"
#on vérifie que l'initialisation est un succès
if [ -d "./$REPO_NAMEDst" ]; then
for FILE2 in ${FILENAMESToOverwrite[@]}
do
if [ ! -f "./$REPO_NAMEDst/$FILE2" ]; then
echo "Erreur dans l'initialisation du case de test 2"
die "Problème à régler dans l'initialisation du case 2 afin de pouvoir conduire le test"
fi
done
else
echo "Erreur dans l'initialisation du case de test 2"
die "Problème à régler dans l'initialisation du case 2 afin de pouvoir conduire le test"
fi
cd $REPO_NAMEDst
#commande de clonage dans un dossier préexistant
../git_update.sh -b $nomBranche $REMOTE
if [ -f $nonGitFILE ]; then
echo "Le fichier déjà présent qui n'était pas considéré par Git n'a pas été supprimé"
case2="false"
elif [ $(cat ${FILENAMESToOverwrite[0]} | grep $keyword | wc -l) -gt 0 ]; then
echo "Le fichier git déjà présent n'a pas été changé pour la nouvelle version"
case2="false"
elif [ ! -f $newFILE ]; then
echo "Un fichier git préalablement absent du folder n'a pas été importé"
case2="false"
fi
if [ "$case2" = "true" ]; then
echo "case de test 2 sous-test 1, dans un dossier préexistant du même repo Git dans un état antérieur, sans tag, sans garder de fichier non git : OK"
else
echo "case de test 2 sous-test 1, dans un dossier préexistant du même repo Git dans un état antérieur, sans tag, sans garder de fichier non git: ECHEC"
fi
cd ..
#sous-test 2 dossier contenant le même repo dans un état antérieur, on ne garde pas les fichiers hors git
section TEST2.2
if [ -d $REPO_NAME ]; then #reste d'un test précédent
rm -rf $REPO_NAME
echo "le dossier de test préexistant $REPO_NAME a été supprimé"
fi
if [ -d $REPO_NAMEDst ]; then #reste de ce test-ci déjà exécuté
rm -rf $REPO_NAMEDst
echo "le dossier de test préexistant $REPO_NAMEDst a été supprimé"
fi
mkdir $REPO_NAMEDst
#on clone notre repo de test dans un état précédent (grâce au tag début quand on aura la fonctionnalité précédente fonctionnelle)
git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
#on ajoute des fichiers hors Git
touch $REPO_NAMEDst/$nonGitFILE
case2="true"
#on vérifie que l'initialisation est un succès
if [ -d "./$REPO_NAMEDst" ]; then
for FILE2 in ${FILENAMESToOverwrite[@]}
do
if [ ! -f "./$REPO_NAMEDst/$FILE2" ]; then
echo "Erreur dans l'initialisation du case de test 2"
exit
fi
done
else
echo "Erreur dans l'initialisation du case de test 2"
exit
fi
cd $REPO_NAMEDst
#commande de clonage dans un dossier préexistant en gardant les fichiers qui étaient là avant
../git_update.sh -N -b $nomBranche $REMOTE
if [ ! -f $nonGitFILE ]; then
echo "Le fichier déjà présent qui n'était pas considéré par Git a été supprimé"
case2="false"
elif [ $(cat ${FILENAMESToOverwrite[0]} | grep $keyword | wc -l) -gt 0 ]; then
echo "Le fichier git déjà présent n'a pas été changé pour la nouvelle version"
case2="false"
elif [ ! -f $newFILE ]; then
echo "Un fichier git préalablement absent du folder n'a pas été importé"
case2="false"
fi
if [ "$case2" = "true" ]; then
echo "case de test 2 sous-test 2, dans un dossier préexistant du même repo Git dans un état antérieur, en gardant les fichiers non-git, sans tag : OK"
else
echo "case de test 2 sous-test 2, dans un dossier préexistant du même repo Git dans un état antérieur, en gardant les fichiers non-git, sans tag: ECHEC"
fi
cd ..
}
while getopts ":hn:a" option; do
case $option in
h) # display Help
Help
exit;;
n)
TEST_NUM=$OPTARG;;
a)
ALL_TESTS=true;;
\?) # Invalid option
echo "Error: Invalid option here"
exit;;
esac
done
if [ "$ALL_TESTS" = "true" ]; then
test0
test1
test2
test3
test4
test5
test6
test7
test8
test9
elif [ -n "$TEST_NUM" ]; then
case $TEST_NUM in
0)
test0;;
1)
test1;;
2)
test2;;
3)
test3;;
4)
test4;;
5)
test5;;
6)
test6;;
7)
test7;;
8)
test8;;
9)
test9;;
*)
echo "Error: Invalid test number"
die;;
esac
else
Help
fi