diff --git a/test_git_update.sh b/test_git_update.sh index 96bed6d..2093801 100755 --- a/test_git_update.sh +++ b/test_git_update.sh @@ -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 "" -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 "" -#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é" -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 .. +REPO_NAME=performance_testing +REMOTE_LOCATION=./remote +WITH_SUBMODULE="true" +REMOTE="./remote/performance_testing" +FILENAMES=("sample0" "sample1") +TAG_NAME=start -#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[@]} - do - if [ -f "./$foldername/$file" ]; then - echo "le fichier $file a bien été importé" - else - cas0="false" - echo "le fichier $file n'a pas pu être importé" - fi - done -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 -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 - -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 - 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 - -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" +if [ "$WITH_SUBMODULE" = "true" ]; then + bash creation_repo.sh -s &> /dev/null else - echo "le tag a été importé et le git checkout $tagname a fonctionné" + bash creation_repo.sh &> /dev/null fi -if [ "$cas1" = "true" ]; then - echo "Cas de test 1, dans un dossier vide préexistant, sans historique, avec tag : OK" +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 - echo "Cas de test 1, dans un dossier vide préexistant, sans historique, avec tag: ECHEC" + cloning_result=1 + echo "the folder $REPO_NAME could not be created" fi +} -#CAS 2 : git cloné dans un dossier git déjà rempli, on souhaite que tout soit écrasé +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 -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 \ No newline at end of file +} + + +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 \ No newline at end of file