debut de reecriture pas encore fonctionnelle du test de git update

This commit is contained in:
eleonore12345 2024-07-11 14:04:25 +02:00
parent 8f709e5084
commit 0d9b713763

View File

@ -1,222 +1,279 @@
#! /bin/bash #! /bin/bash
#importer driglibash #importer driglibash
. driglibash-args . driglibash-base
# création d'un repo git en ligne leRepo avec dedans un fichier texte et un fichier main.c echo "<execution of test_git_update.sh>"
echo "<execution de test_git_update.sh>"
foldername="leRepo" #folder de test
filenames=("texte" "main.c") #quand main.c n'est pas compilé
cloningLink=ssh://git@git.jean-cloud.net:22529/eleonore/pourTesterGitUpdate.git
#CAS 0 : git cloné dans un dossier vide sans tag REPO_NAME=performance_testing
#if it exists, delete the folder REMOTE_LOCATION=./remote
section TEST0 WITH_SUBMODULE="true"
if [ -d $foldername ]; then REMOTE="./remote/performance_testing"
run rm -rf $foldername FILENAMES=("sample0" "sample1")
echo "le dossier de test préexistant $foldername a été supprimé" TAG_NAME=start
if [ "$WITH_SUBMODULE" = "true" ]; then
bash creation_repo.sh -s &> /dev/null
else
bash creation_repo.sh &> /dev/null
fi fi
cas0="true" #boolean qui suit le succès ou échec du test
run mkdir $foldername
run cd $foldername
run ../git_update.sh $cloningLink
run cd ..
#vérification que leRepo a été cloné et qu'il contient bien les fichiers Help()
if [ -d "./$foldername" ]; then {
echo "le dossier $foldername a été créé" echo "
for file in ${filenames[@]} 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 do
if [ -f "./$foldername/$file" ]; then if [ -f "./$REPO_NAME/$FILE" ]; then
echo "le fichier $file a bien été importé" echo "the file $FILE was correctly imported"
else else
cas0="false" cloning_result=1
echo "le fichier $file n'a pas pu être importé" echo "the file $FILE could not be imported"
fi fi
done done
cd ..
else else
cas0="false" cloning_result=1
die "le dossier $foldername n'a pas pu être créé" #die parce qu'il y a un problème à règler hors programme si le script n'a pas pu créer de dossier echo "the folder $REPO_NAME could not be created"
fi fi
}
#vérification que l'historique n'a pas été importé history_check(){
run cd $foldername run cd $REPO_NAME
if [ $(git log | grep "commit" | wc -l) -gt 1 ]; then history_result=0
echo "Plus d'un commit a été sauvegardé" if [ $(git log | grep "commit" | wc -l) -gt 1 ]; then
cas0="false" echo "Several commits have been saved"
elif [ $(git log | grep "commit" | wc -l) = 1 ]; then history_result=1
echo "Seul le dernier commit a été sauvegardé" elif [ $(git log | grep "commit" | wc -l) = 1 ]; then
else echo "Only the last commit has been saved"
cas0="false"
echo "Erreur dans le clonage, git log non cohérent"
fi
if [ "$cas0" = "true" ]; then
echo "Cas de test 0, dans un dossier vide préexistant, sans historique, sans tag : OK"
else
echo "Cas de test 0, dans un dossier vide préexistant, sans historique, sans tag : ECHEC"
fi
run cd ..
#CAS 1 : git cloné dans un dossier vide avec tag
section TEST1
#if it exists, delete the folder
if [ -d $foldername ]; then
run rm -rf $foldername
echo "le dossier de test préexistant $foldername a été supprimé"
fi
nomBranche=main
nomTag=debut
keyword=0.1 #expression présente dans le premier fichier au moment du tag mais plus après
cas1="true"
run mkdir $foldername
run cd $foldername
run ../git_update.sh -b $nomBranche -t $nomTag $cloningLink #avec l'option t qui redirige vers un tag
run cd ..
if [ -d "./$foldername" ]; then
echo "le dossier $filename a bien été créé"
for file in ${filenames[@]}
do
if [ -f "./$foldername/$file" ]; then
echo "le fichier $file a bien été importé"
else else
echo "le fichier $file n'a pas pu être importé" history_result=1
cas1="false" echo "Cloning error, incoherent git log"
fi fi
done cd ..
else }
echo "le dossier $filename n'a pas pu être cloné"
cas1="false"
fi
if [ $(git tag | wc -l) -lt 1 ]; then test0 (){
echo "le tag $tagname n'a pas été importé" #normal, pour l'instant fonctionnalité non-implémentée #CASE 0: git cloned in an empty directory without tag
cas1="false" section TEST0
elif [ $(cat $filenames[0] | grep $keyword | wc -l) -lt 1]; then #if it exists, delete the directory
echo "le tag $tagname a été importé mais le git checkout n'a pas fonctionné" if [ -d $REPO_NAME ]; then
cas1="false" rm -rf $REPO_NAME
else fi
echo "le tag a été importé et le git checkout $tagname a fonctionné" run ./git_update.sh $REMOTE
fi #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
}
if [ "$cas1" = "true" ]; then test1(){
echo "Cas de test 1, dans un dossier vide préexistant, sans historique, avec tag : OK" #CASE 1: git cloned in an empty directory with tag
else section TEST1
echo "Cas de test 1, dans un dossier vide préexistant, sans historique, avec tag: ECHEC" #if it exists, delete the directory
fi 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
#CAS 2 : git cloné dans un dossier git déjà rempli, on souhaite que tout soit écrasé 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 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 #sous-test 1 : dossier contenant le même repo dans un état antérieur, on ne garde pas les fichiers hors git
foldernameDst=leRepo2 #destination REPO_NAMEDst=leRepo2 #destination
filenamesToOverwrite=("texte" "texteHorsGit") FILENAMESToOverwrite=("texte" "texteHorsGit")
nonGitFile=texteHorsGit nonGitFILE=texteHorsGit
newFile=main.c newFILE=main.c
if [ -d $foldername ]; then #reste d'un test précédent if [ -d $REPO_NAME ]; then #reste d'un test précédent
run rm -rf $foldername run rm -rf $REPO_NAME
echo "le dossier de test préexistant $foldername a été supprimé" echo "le dossier de test préexistant $REPO_NAME a été supprimé"
fi fi
if [ -d $foldernameDst ]; then #reste de ce test-ci déjà exécuté if [ -d $REPO_NAMEDst ]; then #reste de ce test-ci déjà exécuté
run rm -rf $foldernameDst run rm -rf $REPO_NAMEDst
echo "le dossier de test préexistant $foldernameDst a été supprimé" echo "le dossier de test préexistant $REPO_NAMEDst a été supprimé"
fi fi
run mkdir $foldernameDst 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) #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 $cloningLink $foldernameDst run git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
#on ajoute des fichiers hors Git #on ajoute des fichiers hors Git
run touch $foldernameDst/$nonGitFile run touch $REPO_NAMEDst/$nonGitFILE
cas2="true" case2="true"
#on vérifie que l'initialisation est un succès #on vérifie que l'initialisation est un succès
if [ -d "./$foldernameDst" ]; then if [ -d "./$REPO_NAMEDst" ]; then
for file2 in ${filenamesToOverwrite[@]} for FILE2 in ${FILENAMESToOverwrite[@]}
do do
if [ ! -f "./$foldernameDst/$file2" ]; then if [ ! -f "./$REPO_NAMEDst/$FILE2" ]; then
echo "Erreur dans l'initialisation du cas de test 2" echo "Erreur dans l'initialisation du case de test 2"
die "Problème à régler dans l'initialisation du cas 2 afin de pouvoir conduire le test" die "Problème à régler dans l'initialisation du case 2 afin de pouvoir conduire le test"
fi fi
done done
else else
echo "Erreur dans l'initialisation du cas de test 2" echo "Erreur dans l'initialisation du case de test 2"
die "Problème à régler dans l'initialisation du cas 2 afin de pouvoir conduire le test" die "Problème à régler dans l'initialisation du case 2 afin de pouvoir conduire le test"
fi fi
cd $foldernameDst cd $REPO_NAMEDst
#commande de clonage dans un dossier préexistant #commande de clonage dans un dossier préexistant
../git_update.sh -b $nomBranche $cloningLink ../git_update.sh -b $nomBranche $REMOTE
if [ -f $nonGitFile ]; then if [ -f $nonGitFILE ]; then
echo "Le fichier déjà présent qui n'était pas considéré par Git n'a pas été supprimé" echo "Le fichier déjà présent qui n'était pas considéré par Git n'a pas été supprimé"
cas2="false" case2="false"
elif [ $(cat ${filenamesToOverwrite[0]} | grep $keyword | wc -l) -gt 0 ]; then 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" echo "Le fichier git déjà présent n'a pas été changé pour la nouvelle version"
cas2="false" case2="false"
elif [ ! -f $newFile ]; then elif [ ! -f $newFILE ]; then
echo "Un fichier git préalablement absent du folder n'a pas été importé" echo "Un fichier git préalablement absent du folder n'a pas été importé"
cas2="false" case2="false"
fi fi
if [ "$cas2" = "true" ]; then if [ "$case2" = "true" ]; then
echo "Cas 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" 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 else
echo "Cas 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" 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 fi
cd .. cd ..
#sous-test 2 dossier contenant le même repo dans un état antérieur, on ne garde pas les fichiers hors git #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 section TEST2.2
if [ -d $foldername ]; then #reste d'un test précédent if [ -d $REPO_NAME ]; then #reste d'un test précédent
rm -rf $foldername rm -rf $REPO_NAME
echo "le dossier de test préexistant $foldername a été supprimé" echo "le dossier de test préexistant $REPO_NAME a été supprimé"
fi fi
if [ -d $foldernameDst ]; then #reste de ce test-ci déjà exécuté if [ -d $REPO_NAMEDst ]; then #reste de ce test-ci déjà exécuté
rm -rf $foldernameDst rm -rf $REPO_NAMEDst
echo "le dossier de test préexistant $foldernameDst a été supprimé" echo "le dossier de test préexistant $REPO_NAMEDst a été supprimé"
fi fi
mkdir $foldernameDst 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) #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 $cloningLink $foldernameDst git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
#on ajoute des fichiers hors Git #on ajoute des fichiers hors Git
touch $foldernameDst/$nonGitFile touch $REPO_NAMEDst/$nonGitFILE
cas2="true" case2="true"
#on vérifie que l'initialisation est un succès #on vérifie que l'initialisation est un succès
if [ -d "./$foldernameDst" ]; then if [ -d "./$REPO_NAMEDst" ]; then
for file2 in ${filenamesToOverwrite[@]} for FILE2 in ${FILENAMESToOverwrite[@]}
do do
if [ ! -f "./$foldernameDst/$file2" ]; then if [ ! -f "./$REPO_NAMEDst/$FILE2" ]; then
echo "Erreur dans l'initialisation du cas de test 2" echo "Erreur dans l'initialisation du case de test 2"
exit exit
fi fi
done done
else else
echo "Erreur dans l'initialisation du cas de test 2" echo "Erreur dans l'initialisation du case de test 2"
exit exit
fi fi
cd $foldernameDst cd $REPO_NAMEDst
#commande de clonage dans un dossier préexistant en gardant les fichiers qui étaient là avant #commande de clonage dans un dossier préexistant en gardant les fichiers qui étaient là avant
../git_update.sh -N -b $nomBranche $cloningLink ../git_update.sh -N -b $nomBranche $REMOTE
if [ ! -f $nonGitFile ]; then if [ ! -f $nonGitFILE ]; then
echo "Le fichier déjà présent qui n'était pas considéré par Git a été supprimé" echo "Le fichier déjà présent qui n'était pas considéré par Git a été supprimé"
cas2="false" case2="false"
elif [ $(cat ${filenamesToOverwrite[0]} | grep $keyword | wc -l) -gt 0 ]; then 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" echo "Le fichier git déjà présent n'a pas été changé pour la nouvelle version"
cas2="false" case2="false"
elif [ ! -f $newFile ]; then elif [ ! -f $newFILE ]; then
echo "Un fichier git préalablement absent du folder n'a pas été importé" echo "Un fichier git préalablement absent du folder n'a pas été importé"
cas2="false" case2="false"
fi fi
if [ "$cas2" = "true" ]; then if [ "$case2" = "true" ]; then
echo "Cas 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" 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 else
echo "Cas 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" 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 fi
cd .. cd ..
#to do : tests des submodules }
#fusionner branch et tag
#mettre en place le clonage de tags dans dossier vide
#test des compilables while getopts ":hn:a" option; do
#mettre en place le choix des tests que l'on fait en exécutant test_git_update 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