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
#importer driglibash
. driglibash-args
# création d'un repo git en ligne leRepo avec dedans un fichier texte et un fichier main.c
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
. driglibash-base
echo "<execution of test_git_update.sh>"
#CAS 0 : git cloné dans un dossier vide sans tag
#if it exists, delete the folder
section TEST0
if [ -d $foldername ]; then
run rm -rf $foldername
echo "le dossier de test préexistant $foldername a été supprimé"
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
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
if [ -d "./$foldername" ]; then
echo "le dossier $foldername a été créé"
for file in ${filenames[@]}
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 "./$foldername/$file" ]; then
echo "le fichier $file a bien été importé"
if [ -f "./$REPO_NAME/$FILE" ]; then
echo "the file $FILE was correctly imported"
else
cas0="false"
echo "le fichier $file n'a pas pu être importé"
cloning_result=1
echo "the file $FILE could not be imported"
fi
done
cd ..
else
cas0="false"
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
cloning_result=1
echo "the folder $REPO_NAME could not be created"
fi
}
#vérification que l'historique n'a pas été importé
run cd $foldername
if [ $(git log | grep "commit" | wc -l) -gt 1 ]; then
echo "Plus d'un commit a été sauvegardé"
cas0="false"
elif [ $(git log | grep "commit" | wc -l) = 1 ]; then
echo "Seul le dernier commit a été sauvegardé"
else
cas0="false"
echo "Erreur dans le clonage, git log non cohérent"
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 ..
}
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 ..
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
}
#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 ..
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
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
echo "le fichier $file n'a pas pu être importé"
cas1="false"
fi
done
else
echo "le dossier $filename n'a pas pu être cloné"
cas1="false"
fi
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
}
if [ $(git tag | wc -l) -lt 1 ]; then
echo "le tag $tagname n'a pas été importé" #normal, pour l'instant fonctionnalité non-implémentée
cas1="false"
elif [ $(cat $filenames[0] | grep $keyword | wc -l) -lt 1]; then
echo "le tag $tagname a été importé mais le git checkout n'a pas fonctionné"
cas1="false"
else
echo "le tag a été importé et le git checkout $tagname a fonctionné"
fi
if [ "$cas1" = "true" ]; then
echo "Cas de test 1, dans un dossier vide préexistant, sans historique, avec tag : OK"
else
echo "Cas de test 1, dans un dossier vide préexistant, sans historique, avec tag: ECHEC"
fi
#CAS 2 : git cloné dans un dossier git déjà rempli, on souhaite que tout soit écrasé
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
foldernameDst=leRepo2 #destination
filenamesToOverwrite=("texte" "texteHorsGit")
nonGitFile=texteHorsGit
newFile=main.c
REPO_NAMEDst=leRepo2 #destination
FILENAMESToOverwrite=("texte" "texteHorsGit")
nonGitFILE=texteHorsGit
newFILE=main.c
if [ -d $foldername ]; then #reste d'un test précédent
run rm -rf $foldername
echo "le dossier de test préexistant $foldername a été supprimé"
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 $foldernameDst ]; then #reste de ce test-ci déjà exécuté
run rm -rf $foldernameDst
echo "le dossier de test préexistant $foldernameDst a été supprimé"
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 $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)
run git clone -q --recurse-submodules $cloningLink $foldernameDst
run git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
#on ajoute des fichiers hors Git
run touch $foldernameDst/$nonGitFile
cas2="true"
run touch $REPO_NAMEDst/$nonGitFILE
case2="true"
#on vérifie que l'initialisation est un succès
if [ -d "./$foldernameDst" ]; then
for file2 in ${filenamesToOverwrite[@]}
if [ -d "./$REPO_NAMEDst" ]; then
for FILE2 in ${FILENAMESToOverwrite[@]}
do
if [ ! -f "./$foldernameDst/$file2" ]; then
echo "Erreur dans l'initialisation du cas de test 2"
die "Problème à régler dans l'initialisation du cas 2 afin de pouvoir conduire le test"
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 cas de test 2"
die "Problème à régler dans l'initialisation du cas 2 afin de pouvoir conduire le test"
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 $foldernameDst
cd $REPO_NAMEDst
#commande de clonage dans un dossier préexistant
../git_update.sh -b $nomBranche $cloningLink
if [ -f $nonGitFile ]; then
../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é"
cas2="false"
elif [ $(cat ${filenamesToOverwrite[0]} | grep $keyword | wc -l) -gt 0 ]; then
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"
cas2="false"
elif [ ! -f $newFile ]; then
case2="false"
elif [ ! -f $newFILE ]; then
echo "Un fichier git préalablement absent du folder n'a pas été importé"
cas2="false"
case2="false"
fi
if [ "$cas2" = "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"
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 "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
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 $foldername ]; then #reste d'un test précédent
rm -rf $foldername
echo "le dossier de test préexistant $foldername a été supprimé"
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 $foldernameDst ]; then #reste de ce test-ci déjà exécuté
rm -rf $foldernameDst
echo "le dossier de test préexistant $foldernameDst a été supprimé"
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 $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)
git clone -q --recurse-submodules $cloningLink $foldernameDst
git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
#on ajoute des fichiers hors Git
touch $foldernameDst/$nonGitFile
cas2="true"
touch $REPO_NAMEDst/$nonGitFILE
case2="true"
#on vérifie que l'initialisation est un succès
if [ -d "./$foldernameDst" ]; then
for file2 in ${filenamesToOverwrite[@]}
if [ -d "./$REPO_NAMEDst" ]; then
for FILE2 in ${FILENAMESToOverwrite[@]}
do
if [ ! -f "./$foldernameDst/$file2" ]; then
echo "Erreur dans l'initialisation du cas de test 2"
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 cas de test 2"
echo "Erreur dans l'initialisation du case de test 2"
exit
fi
cd $foldernameDst
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 $cloningLink
if [ ! -f $nonGitFile ]; then
../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é"
cas2="false"
elif [ $(cat ${filenamesToOverwrite[0]} | grep $keyword | wc -l) -gt 0 ]; then
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"
cas2="false"
elif [ ! -f $newFile ]; then
case2="false"
elif [ ! -f $newFILE ]; then
echo "Un fichier git préalablement absent du folder n'a pas été importé"
cas2="false"
case2="false"
fi
if [ "$cas2" = "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"
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 "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
cd ..
#to do : tests des submodules
#fusionner branch et tag
#mettre en place le clonage de tags dans dossier vide
#test des compilables
#mettre en place le choix des tests que l'on fait en exécutant test_git_update
}
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