2024-06-24 16:09:48 +00:00
#! /bin/bash
2024-06-25 13:52:05 +00:00
#importer driglibash
2024-07-11 12:04:25 +00:00
. 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
2024-06-24 16:09:48 +00:00
fi
2024-07-11 12:04:25 +00:00
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 [@] }
2024-06-24 16:09:48 +00:00
do
2024-07-11 12:04:25 +00:00
if [ -f " ./ $REPO_NAME / $FILE " ] ; then
echo " the file $FILE was correctly imported "
2024-06-25 13:52:05 +00:00
else
2024-07-11 12:04:25 +00:00
cloning_result = 1
echo " the file $FILE could not be imported "
2024-06-24 16:09:48 +00:00
fi
done
2024-07-11 12:04:25 +00:00
cd ..
2024-06-24 16:09:48 +00:00
else
2024-07-11 12:04:25 +00:00
cloning_result = 1
echo " the folder $REPO_NAME could not be created "
2024-06-24 16:09:48 +00:00
fi
2024-07-11 12:04:25 +00:00
}
2024-06-24 16:09:48 +00:00
2024-07-11 12:04:25 +00:00
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 ..
}
2024-06-24 16:09:48 +00:00
2024-07-11 12:04:25 +00:00
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
}
2024-06-24 16:09:48 +00:00
2024-07-11 12:04:25 +00:00
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
2024-06-25 13:52:05 +00:00
2024-07-11 12:04:25 +00:00
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
}
2024-06-25 13:52:05 +00:00
2024-07-11 12:04:25 +00:00
test2( ) {
#case 2 : git cloné dans un dossier git déjà rempli, on souhaite que tout soit écrasé
2024-06-25 14:34:31 +00:00
section TEST2.1
2024-06-25 13:52:05 +00:00
#sous-test 1 : dossier contenant le même repo dans un état antérieur, on ne garde pas les fichiers hors git
2024-07-11 12:04:25 +00:00
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é "
2024-06-25 13:52:05 +00:00
fi
2024-07-11 12:04:25 +00:00
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é "
2024-06-25 13:52:05 +00:00
fi
2024-07-11 12:04:25 +00:00
run mkdir $REPO_NAMEDst
2024-06-25 13:52:05 +00:00
#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)
2024-07-11 12:04:25 +00:00
run git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
2024-06-25 13:52:05 +00:00
#on ajoute des fichiers hors Git
2024-07-11 12:04:25 +00:00
run touch $REPO_NAMEDst /$nonGitFILE
case2 = "true"
2024-06-25 13:52:05 +00:00
#on vérifie que l'initialisation est un succès
2024-07-11 12:04:25 +00:00
if [ -d " ./ $REPO_NAMEDst " ] ; then
for FILE2 in ${ FILENAMESToOverwrite [@] }
2024-06-25 13:52:05 +00:00
do
2024-07-11 12:04:25 +00:00
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"
2024-06-25 13:52:05 +00:00
fi
done
else
2024-07-11 12:04:25 +00:00
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"
2024-06-25 13:52:05 +00:00
fi
2024-07-11 12:04:25 +00:00
cd $REPO_NAMEDst
2024-06-25 13:52:05 +00:00
#commande de clonage dans un dossier préexistant
2024-07-11 12:04:25 +00:00
../git_update.sh -b $nomBranche $REMOTE
if [ -f $nonGitFILE ] ; then
2024-06-25 13:52:05 +00:00
echo "Le fichier déjà présent qui n'était pas considéré par Git n'a pas été supprimé"
2024-07-11 12:04:25 +00:00
case2 = "false"
elif [ $( cat ${ FILENAMESToOverwrite [0] } | grep $keyword | wc -l) -gt 0 ] ; then
2024-06-25 13:52:05 +00:00
echo "Le fichier git déjà présent n'a pas été changé pour la nouvelle version"
2024-07-11 12:04:25 +00:00
case2 = "false"
elif [ ! -f $newFILE ] ; then
2024-06-25 13:52:05 +00:00
echo "Un fichier git préalablement absent du folder n'a pas été importé"
2024-07-11 12:04:25 +00:00
case2 = "false"
2024-06-25 13:52:05 +00:00
fi
2024-07-11 12:04:25 +00:00
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"
2024-06-25 13:52:05 +00:00
else
2024-07-11 12:04:25 +00:00
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"
2024-06-25 13:52:05 +00:00
fi
cd ..
#sous-test 2 dossier contenant le même repo dans un état antérieur, on ne garde pas les fichiers hors git
2024-06-25 14:34:31 +00:00
section TEST2.2
2024-07-11 12:04:25 +00:00
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é "
2024-06-25 13:52:05 +00:00
fi
2024-07-11 12:04:25 +00:00
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é "
2024-06-25 13:52:05 +00:00
fi
2024-07-11 12:04:25 +00:00
mkdir $REPO_NAMEDst
2024-06-25 13:52:05 +00:00
#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)
2024-07-11 12:04:25 +00:00
git clone -q --recurse-submodules $REMOTE $REPO_NAMEDst
2024-06-25 13:52:05 +00:00
#on ajoute des fichiers hors Git
2024-07-11 12:04:25 +00:00
touch $REPO_NAMEDst /$nonGitFILE
case2 = "true"
2024-06-25 13:52:05 +00:00
#on vérifie que l'initialisation est un succès
2024-07-11 12:04:25 +00:00
if [ -d " ./ $REPO_NAMEDst " ] ; then
for FILE2 in ${ FILENAMESToOverwrite [@] }
2024-06-25 13:52:05 +00:00
do
2024-07-11 12:04:25 +00:00
if [ ! -f " ./ $REPO_NAMEDst / $FILE2 " ] ; then
echo "Erreur dans l'initialisation du case de test 2"
2024-06-25 13:52:05 +00:00
exit
fi
done
else
2024-07-11 12:04:25 +00:00
echo "Erreur dans l'initialisation du case de test 2"
2024-06-25 13:52:05 +00:00
exit
fi
2024-07-11 12:04:25 +00:00
cd $REPO_NAMEDst
2024-06-25 13:52:05 +00:00
#commande de clonage dans un dossier préexistant en gardant les fichiers qui étaient là avant
2024-07-11 12:04:25 +00:00
../git_update.sh -N -b $nomBranche $REMOTE
if [ ! -f $nonGitFILE ] ; then
2024-06-25 13:52:05 +00:00
echo "Le fichier déjà présent qui n'était pas considéré par Git a été supprimé"
2024-07-11 12:04:25 +00:00
case2 = "false"
elif [ $( cat ${ FILENAMESToOverwrite [0] } | grep $keyword | wc -l) -gt 0 ] ; then
2024-06-25 13:52:05 +00:00
echo "Le fichier git déjà présent n'a pas été changé pour la nouvelle version"
2024-07-11 12:04:25 +00:00
case2 = "false"
elif [ ! -f $newFILE ] ; then
2024-06-25 13:52:05 +00:00
echo "Un fichier git préalablement absent du folder n'a pas été importé"
2024-07-11 12:04:25 +00:00
case2 = "false"
2024-06-24 16:09:48 +00:00
fi
2024-07-11 12:04:25 +00:00
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"
2024-06-25 13:52:05 +00:00
else
2024-07-11 12:04:25 +00:00
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"
2024-06-25 13:52:05 +00:00
fi
cd ..
2024-06-24 16:09:48 +00:00
2024-07-11 12:04:25 +00:00
}
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