2
0
Fork 0

modif scripts verifier_exeHZ.pl et Perl/test.pl : gestion de l interruption ctrl+c en cours de batterie (desormais, l interruption est bien maitrisee avec verifier_exeHZ.pl. Avec verifier_exeHZ.zsh, ca fonctionne grace aux modifs de Perl/test.pl mais le script verifier_exeHZ.zsh ne contient en lui-meme aucune modif pour gerer ctrl+c, donc pas fiable); Doc utilisateur : modif de la section 4 qui est maintenant divisee en 2 sous-sections (l une pour expliquer le lancement de la batterie et l autre pour faire quelques commentaires sur l interruption ctrl+c)

This commit is contained in:
troufflard 2016-03-11 16:47:39 +00:00
parent fd6cbf097e
commit f4e780d194
4 changed files with 255 additions and 31 deletions

View file

@ -82,6 +82,9 @@ citecolor= green %couleur citation biblio
}
\definecolor{greenOK}{RGB}{15 , 185 , 15}
@ -182,6 +185,9 @@ L'arborescence du projet CVS est la suivante :\\
\section{Lancement de la batterie de tests}\label{section_lancement_batterie_tests}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Procédure de lancement}
Il y a actuellement deux scripts permettant de lancer la batterie de tests. Le script \verb|verifier_exeHZ.zsh| est la version originale historique. Le script \verb|verifier_exeHZ.pl| est une version plus récente offrant plus de possibilités sous forme d'options. Pour l'instant, ces deux scripts existent. A terme, si \verb|verifier_exeHZ.pl| s'avère satisfaisant, la version \verb|.zsh| dispara\^itra du projet.\\
Avant de détailler l'utilisation de ces scripts, voici un résumé de la procédure pour lancer la batterie :
@ -193,17 +199,13 @@ Avant de d
Le rapport obtenu après exécution de la batterie indique pour chaque test si il est réussi ainsi que le temps de calcul obtenu par la commande \verb|time|.\\
{\color{blue} \noindent \bf \underline{Interrompre l'exécution de la batterie (**procédure temporaire**)} :\rm
En l'état actuel, il est possible de stopper l'exécution de la batterie avec \verb|ctrl+c|. Cependant, la gestion de cette interruption n'est pas encore bien gérée. Il faut faire un certain nombre de \verb|ctrl+c| jusqu'à ce que le programme s'arr\^ete (typiquement, il faut rester appuyer sur \verb|ctrl+c|). Ensuite, il faut vérifier s'il y a des processus Herezh++ qui persistent en fond de t\^ache et tuer ces processus (\verb|kill -9|). Ces processus sont faciles à repérer avec la commande \verb|ps| gr\^ace au nom de leur commande associée qui est de la forme : \verb|testHZ[un entier] -f fichier.info|. Et enfin, éventuellement, on peut effacer les répertoires temporaires encore présents dans \verb|/tmp| pour éviter leur accumulation (ces répertoires ont un nom de la forme : \verb|/tmp/test.pl_[un entier]|.
\bf NB : cette procédure d'interruption n'altère pas les répertoires originaux de tests de la batterie. Bien que non optimale, cette procédure est s\^ure et n'aura aucune influence sur le prochain lancement de la batterie.\rm
}
\subsubsection*{\underline{Script \texttt{verifier\_exeHZ.zsh}} :}
Le script \verb|verifier_exeHZ.zsh| lance automatiquement tous les tests présents dans le répertoire courant et ses sous-répertoires. Un test est un répertoire dont le nom commence par \verb|Test_R| ou \verb|Test_L| (voir section \ref{section_organisation_tests}). Le script peut \^etre lancé dans n'importe quel répertoire contenant le répertoire \verb|Perl|. Il produit un rapport de tests pour les tests \verb|Test_R| (tests rapides) et un rapport pour les tests \verb|Test_L| (tests longs). Ces rapports sont contenus dans le répertoire \verb|Rapport| (éventuellement créé si il n'existe pas au lancement) sous le nom \verb|rapport_test_R.txt| et \verb|rapport_test_L.txt|. Le script affiche automatiquement ces rapports si l'éditeur de texte \verb|nedit| est disponible.
Comme mentionné précédemment, \verb|verifier_exeHZ.zsh| NE permet PAS d'interrompre correctement la batterie en cours avec \verb|ctrl+c|, avec pour conséquence un fort risque de modification des répertoires de test originaux.
Le script \verb|verifier_exeHZ.zsh| prend un argument : le nom de l'exécutable Herezh++. Typiquement, cet exécutable est présent dans un répertoire pointé par la variable environnement \verb|$PATH|. Mais on peut également donner un chemin absolu ou relatif.\\
Exemples :
\begin{itemize}
\item[$\bullet$] cas d'un exécutable accessible via la variable environnement \verb|$PATH| :
@ -220,7 +222,8 @@ Exemples :
\end{itemize}
\subsubsection*{\underline{Script \texttt{verifier\_exeHZ.pl}} :}
Le script \verb|verifier_exeHZ.pl| fonctionne de manière identique. Toutes les informations mentionnées pour \verb|verifier_exeHZ.zsh| sont valables pour \verb|verifier_exeHZ.pl|. Cette version offre des possibilités supplémentaires sous forme d'options. Ces options sont consultables en tapant \verb|verifier_exeHZ.pl -h| dans un terminal. En l'absence d'options, \verb|verifier_exeHZ.pl| fonctionne exactement comme \verb|verifier_exeHZ.zsh|.\\
Le script \verb|verifier_exeHZ.pl| fonctionne de manière identique. Toutes les informations mentionnées pour \verb|verifier_exeHZ.zsh| sont valables pour \verb|verifier_exeHZ.pl|. Cette version offre des possibilités supplémentaires sous forme d'options. Ces options sont consultables en tapant \verb|verifier_exeHZ.pl -h| dans un terminal. En l'absence d'options, \verb|verifier_exeHZ.pl| fonctionne exactement comme \verb|verifier_exeHZ.zsh|. Comme mentionné précédemment, \verb|verifier_exeHZ.pl| permet d'interrompre correctement la batterie en cours avec \verb|ctrl+c|.\\
Exemples d'options :
\begin{itemize}
\item[$\bullet$] ne lancer que les tests rapides (option \verb|-R|) :
@ -240,7 +243,14 @@ Exemples d'options :
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Procédure d'interruption}
L'utilisateur peut souhaiter stopper la batterie en cours. La commande usuelle d'interruption d'un processus UNIX/Linux est \verb|ctrl+c|.
{\color{greenOK} Le script \verb|verifier_exeHZ.pl| gère une interruption propre de la batterie en cours par \verb|ctrl+c|.}
{\color{red} Le script \verb|verifier_exeHZ.zsh| ne gère pas correctement l'interruption \verb|ctrl+c| et il y a un risque d'avoir des fichiers et répertoires non effacés ou modifiés. Par sécurité, il est demandé de NE JAMAIS ACTUALISER le projet (cvs commit) après une interruption ctrl+c du script \verb|verifier_exeHZ.zsh|.}
@ -880,45 +890,52 @@ Erreur (prog:genere_catalogue_tests.pl) : erreur a l execution de pdflatex
\item[$\bullet$] 2015-06-29 (Julien Troufflard) :
\begin{itemize}
\item[-] création d'un nouveau script (\verb|Perl/genere_catalogue_tests.pl|). Il génère automatiquement une documentation sur les tests (résumé et index pour recherche par mots-clés). Ce document est placé à la racine du projet sous le nom \verb|documentation_tests.pdf|. Le mode de fonctionnement (lecture des fichiers README de chaque test) impose une nouvelle contrainte sur la forme des fichiers README (interdiction d'utiliser des lignes de 3 tirets ou plus dans le corps d'une rubrique README car ce motif signifie la fin d'une rubrique). Cette contrainte est le choix actuel mais peut \^etre modifié à tout moment en définissant une balise de fin de rubrique à utiliser dans les fichiers README (par exemple : \verb|fin_rubrique|) et en indiquant sa syntaxe dans la variable \verb|$MOTIF_FIN_RUBRIQUE| du script \verb|Perl/genere_catalogue_tests.pl|.\\
\item[-] Apparition d'une nouvelle rubrique README : \it Auteur \rm (renseigne le ou les auteurs du test avec prénom, nom, adresse mail). rubrique qui appara\^it dans la documentation des tests.\\
\item[-] Apparition d'une nouvelle rubrique README : \it Auteur \rm (renseigne le ou les auteurs du test avec prénom, nom, adresse mail). rubrique qui appara\^it dans la documentation des tests.
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-07-13 (Julien Troufflard) :
\begin{itemize}
\item[-] changement du nom du fichier de catalogue de tests (désormais s'appellera \verb|catalogue_test.pdf| au lieu de \verb|documentation_tests.pdf|)\\
\item[-] le fichier .pdf de la document utilisateur principale est désormais archivé sous CVS. Il s'appelle \verb|doc_procedure_verification.pdf| et est placé à la racine du projet (il s'agit simplement du fichier généré par \verb|Doc/doc_procedure_verification.tex|)\\
\item[-] le fichier .pdf de la document utilisateur principale est désormais archivé sous CVS. Il s'appelle \verb|doc_procedure_verification.pdf| et est placé à la racine du projet (il s'agit simplement du fichier généré par \verb|Doc/doc_procedure_verification.tex|)
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-07-15 (Julien Troufflard) :
\begin{itemize}
\item[-] ajout d'une nouvelle version du script de lancement de la batterie. Cette nouvelle version en Perl s'appelle \verb|verifier_exeHZ.pl|. Elle reproduit la m\^eme chose que la version actuelle en zsh mais propose en plus des options pour éviter de lancer tous les tests. La version précédente \verb|verifier_exeHZ| est conservée mais renommée en \verb|verifier_exeHZ.zsh|. A terme, cette version zsh sera supprimée du projet CVS.\\
\item[-] ajout d'une nouvelle version du script de lancement de la batterie. Cette nouvelle version en Perl s'appelle \verb|verifier_exeHZ.pl|. Elle reproduit la m\^eme chose que la version actuelle en zsh mais propose en plus des options pour éviter de lancer tous les tests. La version précédente \verb|verifier_exeHZ| est conservée mais renommée en \verb|verifier_exeHZ.zsh|. A terme, cette version zsh sera supprimée du projet CVS.
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-07-16 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script de génération automatique du catalogue de tests (script \verb|Perl/genere_catalogue_tests.pl|). Désormais, il est possible d'insérer des figures via une syntaxe par balises dans les fichiers README des tests. La méthode est expliquée à la section \ref{section_fichiers_obligatoires} "Fichiers obligatoires" (fichier \verb|README|)\\
\item[-] ajout du script \verb|Perl/verif_existence_repertoire_test.pl|. Permet de savoir si un nom de répertoire de test existe déjà dans la batterie. Est utile au moment de l'ajout d'un nouveau test pour aider à choisir le nom et éviter de choisir un nom déjà existant (m\^eme si ce n'est pas dans le m\^eme répertoire de destination car le catalogue des tests ne tient pas compte du chemin complet). Explication de son utilisation à la section \ref{subsection_vue_ensemble}\\
\item[-] méthodologie pour ajouter un nouveau test : il n'y avait aucune section exposant clairement les étapes à suivre pour créer et ajouter un test, d'où la création de la section \ref{subsection_methodologie}\\
\item[-] méthodologie pour ajouter un nouveau test : il n'y avait aucune section exposant clairement les étapes à suivre pour créer et ajouter un test, d'où la création de la section \ref{subsection_methodologie}
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-09-29 (Julien Troufflard) :
\begin{itemize}
\item[-] modif du script \verb|Perl/verifier_exeHZ.pl| : le package \verb|Term::ReadKey| n'est pas forcément installé sur toutes les machines. Pour éviter d'\^etre pénalisé par ce package, son existence est vérifiée via la subroutine \verb|check_install| du package \verb|Module::Load::Conditional| et, si il existe, l'appel à \verb|Term::ReadKey| est fait via \verb|require| au lieu de \verb|use|. Cette manière de faire pourra \^etre appliquée partout où il y a un doute sur l'existence d'un package et définir ainsi un moyen de contourner l'absence d'un package.\\
\item[-] modif du script \verb|Perl/test.pl| : il y avait une faille dans la subroutine \verb|lancement_commande|. Sur certaines machines, la redirection \verb|tee| ne se fait pas instantanément. Ceci conduisait à croire que le fichier de redirection n'était pas créé et donc renvoyait un problème lié à la redirection de l'affichage. Désormais, un délai est accordé pour attendre la création de ce fichier (environ 2 secondes maximum avec un check de l'existence du fichier de redirection toutes les millisecondes). De manière indirecte, ceci a conduit à créer un nouvel indicateur de status pour signaler si le calcul ne se lance pas (\verb|probleme lancement calcul|).\\
\item[-] modif du script \verb|Perl/test.pl| : il y avait une faille dans la subroutine \verb|lancement_commande|. Sur certaines machines, la redirection \verb|tee| ne se fait pas instantanément. Ceci conduisait à croire que le fichier de redirection n'était pas créé et donc renvoyait un problème lié à la redirection de l'affichage. Désormais, un délai est accordé pour attendre la création de ce fichier (environ 2 secondes maximum avec un check de l'existence du fichier de redirection toutes les millisecondes). De manière indirecte, ceci a conduit à créer un nouvel indicateur de status pour signaler si le calcul ne se lance pas (\verb|probleme lancement calcul|).
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-09-30 (Julien Troufflard) :
\begin{itemize}
\item[-] modif de l'en-t\^ete de tous les scripts perl (y compris les \verb|.verif| de la batterie) : amélioration de la portabilité en modifiant le shebang selon \url{https://en.wikipedia.org/wiki/Shebang_\%28Unix\%29#Portability}. Désormais, les scripts commencent par \verb|#!/usr/bin/env perl| au lieu du chemin absolu \verb|#!/usr/bin/perl| qui pourrait ne pas fonctionner sur certaines machines à l'architecture atypique (et actualisation de la section \ref{section_fichiers_facultatifs} pour signaler cette habitude à prendre pour les fichiers \verb|.verif|).\\
remarque : modif également pour le script zsh \verb|verifier_exeHZ.zsh|\\
remarque : modif également pour le script zsh \verb|verifier_exeHZ.zsh|
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-11-24 (Julien Troufflard) :
\begin{itemize}
\item[-] modif script \verb|Perl/genere_catalogue_tests.pl| :\\
1) possibilité d'insérer un espace "{\textbackslash}hspace" entre les figures \verb|\figures| (voir section \ref{section_fichiers_obligatoires} concernant le fichier \verb|README|)\\
2) possibilité d'insérer des formules et caractères mathématiques dans les fichiers \verb|README| entre simples \$ ou doubles \$\$ (voir section \ref{section_fichiers_obligatoires} concernant le fichier \verb|README|)\\
2) possibilité d'insérer des formules et caractères mathématiques dans les fichiers \verb|README| entre simples \$ ou doubles \$\$ (voir section \ref{section_fichiers_obligatoires} concernant le fichier \verb|README|)
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-11-25 (Julien Troufflard) :
\begin{itemize}
@ -930,8 +947,9 @@ remarque : modif
- comparaison maple : désormais, si toutes les grandeurs d'un test sont OK, un affichage allégé est produit dans le rapport (juste une ligne pour indiquer que toutes les grandeurs sont OK sans détailler les comparaisons)\\
2) affichage des temps de calcul :\\
- dans la subroutine \verb|lancement_commande()| : lancement de Herezh via la tournure \verb/tsch -c "time HZ -f fic.info" | tee fic.log/ pour récuperer le temps CPU dans le fichier .log (l'utilisation de \verb|tcsh -c|, c'est uniquement pour que le résultat de \verb|time| soit bien récupéré sur \verb|STDOUT|, donc dans \verb|fic.log|)\\
- juste après l'appel à \verb|lancement_commande()| $\Rightarrow$ saisie du temps de calcul dans le \verb|.log| et affichage dans le rapport de test (juste après le nom du test)\\
- juste après l'appel à \verb|lancement_commande()| $\Rightarrow$ saisie du temps de calcul dans le \verb|.log| et affichage dans le rapport de test (juste après le nom du test)
\end{itemize}%tiret
~\\
\item[$\bullet$] 2015-11-25(bis) (Julien Troufflard) :
\begin{itemize}
@ -940,8 +958,9 @@ remarque : modif
- remplacement de la subroutine \verb|return_nb_decimales()| par la subroutine \verb|return_nb_decimales_first()| (m\^eme chose mais en mieux : renvoie la position de la première décimale non nulle au lieu du nombre total de décimales). Pour rappel, ce traitement n'a pas pour but d'arrondir les résultats pour la comparaison. Il s'agit juste d'un arrondi à but cosmétique pour afficher, dans le rapport, la grandeur avec un nombre de décimales adapté à la précision.\\
- comparaison maple :\\
1) modification de la comparaison pour gérer le cas où le nombre est très petit (par exemple : 1.e-15 comparé à 1.e-30 génère une erreur relative énorme). Ce problème avait été déjà pensé dans la version historique de la vérification Herezh (Laurent Mahéo) mais malheureusement non traité dans la nouvelle version. Désormais, on traite ce problème en arrondissant les grandeurs à 1.e-12 près.\\
2) correction d'une erreur dans la comparaison absolue : par erreur, la comparaison se faisait toujours par rapport à la précision absolue par défaut (\verb|$PREC_ABSOLU|) sans tenir compte de l'éventuelle modification par fichier \verb|.precision|\\
2) correction d'une erreur dans la comparaison absolue : par erreur, la comparaison se faisait toujours par rapport à la précision absolue par défaut (\verb|$PREC_ABSOLU|) sans tenir compte de l'éventuelle modification par fichier \verb|.precision|
\end{itemize}%tiret
~\\
\item[$\bullet$] 2016-02-12 (Julien Troufflard) :
\begin{itemize}
@ -955,6 +974,14 @@ remarque : modif
\item[-] ajout dans la documentation d'un paragraphe concernant la génération du catalogue de tests (section \ref{section_actualisation_catalogue_tests})
\item[-] ajout dans la documentation d'un paragraphe regroupant les personnes référentes à contacter (section \ref{section_personnes_referentes})
\end{itemize}%tiret
~\\
\item[$\bullet$] 2016-03-11 (Julien Troufflard) :
\begin{itemize}
\item[-] modif des scripts \verb|verifier_exeHZ.pl| et \verb|Perl/test.pl| dans le but de permettre un arr\^et Ctrl-c propre en cours de batterie :\\
pour ces 2 scripts, une gestion des signaux d'interruption \verb|INT| et \verb|TERM| a été introduite (subroutine \verb|arret_force()| et un fichier (texte) temporaire est utilisé pour permettre un dialogue entre les 2 processus (fichier de nom \verb|//tmp/verifier_exeHZ_2_test_$PID.com/| où \verb|$PID| est le pid du processus \verb|verifier_exeHZ.pl|). Un nouveau status de test existe désormais dans le rapport de test : \verb|ECHEC : ***INTERRUPTION PAR L UTILISATEUR***|. A noter que le rapport de test est tout de m\^eme généré en bonne et due forme pour les tests déjà terminés avant Ctrl-c (mais le rapport n'est pas automatiquement affiché).
\item[-] la section \ref{section_lancement_batterie_tests} de ce document a été divisé en 2 sous-sections. Une section est dédiée à la procédure d'interruption \verb|ctrl+c| (pour expliquer mais aussi pour pointer du doigt le fait qu'une interruption volontaire n'est pas toujours une opération sans conséquences).
\end{itemize}%tiret
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%template d ajout d une nouvelle mise à jour (composé d'une puce "bullet" avec Date et auteur de la modif, suivie d une série de puce "-"
@ -966,9 +993,9 @@ remarque : modif
%.
%.
%.
%\item[-] blabla N\\
%\item[-] blabla N
%\end{itemize}%tiret
%~\\
\end{itemize}%bullet

View file

@ -20,6 +20,8 @@ my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
# Notes aux developpeurs :
# - utiliser print puis exit au lieu de die (pour envoyer l affichage sur STDOUT et non sur STDERR)
# - utiliser print au lieu de warn (meme raison que remarque precedente)
# - ce programme capture le signal d interruption Ctrl-c(INT) ou kill -15(TERM) (application de la subroutine arret_force() en cas d interruption)
# (i.e pas d arret immediat de ce script)
#
#####################################################################################################
@ -96,10 +98,18 @@ my $repertoire_de_travail = "/tmp/$NOM_PROG\_$$"; ###---Repertoire de travail da
### soit un chemin absolu et vers un repertoire facilement disponible sur n importe quelle OS Mac ou Linux)
### Le choix actuel (2015-11-25) a ete de nommer ce repertoire en fonction du nom de ce script suivi du pid
### du processus, ce qui a priori le rend unique)
########################### Variables executable Herezh ###########################
my $exeHZ; ###---Executable Herezh
my $hzchemin; ###---path vers l executable Herezh
########################### Variables pour la communication avec un script verifier_exeHZ.pl ###########################
my $pid_verifier_exeHZ; ###---pid du processus verifier_exeHZ.pl qui a lance ce script de test (fourni comme 3eme argument facultatif)
my $fic_communication; ###---Fichier pour communiquer avec le script verifier_exeHZ.pl (rq : variable inutile dans le cas du script verifier_exeHZ.zsh)
@ -129,6 +139,7 @@ if($is_opt_help or $#ARGV < 1) {
print "Ce script Perl s utilise avec 2 arguments : \n";
print " -> 1] Nom du repertoire Test dans lequel se situe un fichier \'.info\'.\n";
print " -> 2] Nom de l executable Herezh\n";
print " -> 3] (facultatif) pid du processus verifier_exeHZ.pl qui a lance ce script\n";
exit;
}
@ -138,6 +149,11 @@ $repertoire_test = shift(@ARGV);
#nom de l executable Herezh
$exeHZ = shift(@ARGV);
#pid du processus verifier_exeHZ.pl qui a lance ce script (argument facultatif)
$pid_verifier_exeHZ = shift(@ARGV) if($#ARGV > -1);
#verification de l existence du repertoire de test
(-d $repertoire_test) or do {
printRapport("$repertoire_test\n -> ECHEC : repertoire $repertoire_test introuvable\n\n");
@ -161,6 +177,17 @@ $hzchemin = verif_commande($exeHZ);
print "**Erreur Test $repertoire_test : executable Herezh ($exeHZ) introuvable\n";
exit;
};
#verif de l existence d un fichier de communication dont serait egal a : /tmp/verifier_exeHZ_2_test_[$pid_verifier_exeHZ].com
if(defined $pid_verifier_exeHZ) {
$fic_communication = "/tmp/verifier_exeHZ_2_test_$pid_verifier_exeHZ.com";
(-e $fic_communication) or do {
printRapport("$repertoire_test\n -> ECHEC : fichier de communication ($fic_communication) introuvable\n\n");
print "**Erreur Test $repertoire_test : fichier de communication ($fic_communication) introuvable\n";
exit;
};
}
##########################################################################
##########################################################################
##########################################################################
@ -173,6 +200,55 @@ $hzchemin = verif_commande($exeHZ);
##########################################################################
##########################################################################
##########################################################################
#
# (DEBUT) GESTION D UNE INTERRUPTION (Ctrl-c ou kill -15)
# => on capture les signaux d interruption et on utilise la variable $ARRET_FORCE pour terminer proprement le programme
#
##########################################################################
##########################################################################
##########################################################################
#indicateur d un arret force (=1 si arret)
# rq : cette variable sert a plusieurs endroits pour gerer l interruption proprement :
# - dans la sub lancement_commande() (voir LOOP_SURVEILLANCE:while() )
# - dans le status du test (voir VERIFICATION DU TEST dans la boucle BOUCLE_TEST:for(...)
my $ARRET_FORCE = 0;
#subroutine arret_force : - sera appelee pour toute interruption Ctrl-c (signal INT) ou kill -15 (signal TERM)
# - ne ferme pas le programme (on utilise la variable $ARRET_FORCE pour quitter la boucle de test et terminer normalement le programme)
sub arret_force {
#on stoppe tout simplement si aucun pid de processus n a ete donne en argument (variable : $pid_verifier_exeHZ)...
exit if(not defined $pid_verifier_exeHZ);
#...sinon, on applique la procedure d arret en collaboration avec le script verifier_exeHZ.pl qui a appele ce script :
#1) on indique l arret force via la variable $ARRET_FORCE pour quitter proprement le test en cours
$ARRET_FORCE = 1;
#2) on envoie un signal d arret a verifier_exeHZ.pl (au cas ou il ne l a pas deja eu, ce qui peut arriver quand on lance un processus Herezh via un open(PIPE, |....))
kill("TERM", $pid_verifier_exeHZ);
}
#capture : Ctrl-c (INT)
$SIG{INT} = \&arret_force;
#capture : kill -15 (TERM)
$SIG{TERM} = \&arret_force;
##########################################################################
##########################################################################
##########################################################################
#
# (FIN) GESTION D UNE INTERRUPTION (Ctrl-c ou kill -15)
#
##########################################################################
##########################################################################
##########################################################################
##########################################################################
##########################################################################
##########################################################################
@ -549,8 +625,15 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) {
#################################################################################
#premiere verification selon status renvoye par la subroutine lancement_commande
#################################################################################
#---cas d une interruption volontaire (par exemple : Ctrl-c)
if($ARRET_FORCE) {
printRapport(" -> ECHEC : ***INTERRUPTION PAR L UTILISATEUR***\n\n");
print "**Erreur Test $repertoire_test/.CVisu$no_test : INTERRUPTION PAR L UTILISATEUR\n";
last BOUCLE_TEST;
}
#---cas d un calcul ayant conduit a un trop gros fichier de redirection
if($status_calcul eq "depassement taille maximum") {
elsif($status_calcul eq "depassement taille maximum") {
printRapport(" -> ECHEC : le calcul Herezh a conduit a la creation d un trop gros fichier de redirection (fichier $fichier_test.log a depasse la taille maximum autorisee egale a $TAILLE_MAX_FIC_REDIR octets).\n");
printRapport(" Les causes possibles sont un probleme de menu interactif, un long calcul associe a une frequence trop grande d affichage des increments et iterations, ...\n");
printRapport(" Si ce depassement est un fonctionnement normal, il faut augmenter la taille admissible dans la variable \$TAILLE_MAX_FIC_REDIR au debut du script de test $NOM_PROG pour rendre possible ce test.\n\n");
@ -905,7 +988,10 @@ print "##########################################################\n";
#####################################################################################################
# dans le cas du script verifier_exeHZ.pl => on signale la fin du test via le fichier $fic_communication
#####################################################################################################
system("echo FIN_TEST > $fic_communication") if(defined $fic_communication);
@ -1088,6 +1174,15 @@ sub lancement_commande {
select(undef, undef, undef, 0.5);
##
## CAS D UN ARRET FORCE (par exemple Ctrl-c)
##
if($ARRET_FORCE) {
kill("TERM", @HZpid);
last;
}
##
## SURVEILLANCE DE LA TAILLE DU FICHIER
##
@ -1163,9 +1258,14 @@ sub lancement_commande {
my $status_calcul;
#si il y a eu un arret force => status = arret force
if($ARRET_FORCE) {
$status_calcul = "arret force";
}
#si le fichier $fic_com_taille_max existe, cela veut dire qu il y a eu un depassement de la taille maximum autorisee
# => status => depassement taille maximum
if(-e $fic_com_taille_max) {
elsif(-e $fic_com_taille_max) {
$status_calcul = 'depassement taille maximum';
}

Binary file not shown.

View file

@ -10,6 +10,13 @@ my $NOM_PROG = basename $PROGRAM_NAME;
my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';
#fichier de communication avec le script ./Perl/test.pl (pour gerer l arret force de la batterie)
# !!!!ATTENTION : tout changement dans ce nom de fichier doit etre reperecute dans le script ./Perl/test.pl
my $FIC_COMMUNICATION = "/tmp/verifier_exeHZ_2_test_$PID.com";
@ -158,6 +165,81 @@ if($is_opt_rpt) {
##########################################################################
##########################################################################
##########################################################################
#
# GESTION D UNE INTERRUPTION (Ctrl-c ou kill -15)
# actions a gerer :
# - arreter proprement le test en cours
# - supprimer d eventuels fichiers temporaires ou inutiles (liste des fichiers a effacer dans la liste @FICHIERS_A_EFFACER)
# - finaliser le fichier rapport de tests en l etat actuel
#
##########################################################################
##########################################################################
##########################################################################
#variable pour connaitre le nom du rapport a finaliser
# 3 possibilites : option -rpt => $NOM_FIC_RAPPORT = "Rapport/rapport_test_debugECHEC.txt"
# tests rapides => $NOM_FIC_RAPPORT = "Rapport/rapport_test_R.txt"
# tests longs => $NOM_FIC_RAPPORT = "Rapport/rapport_test_L.txt"
#
# (rq : quelque soit la procedure en cours, le fichier rapport temporaire sera toujours "Rapport/rapport_test.txt")
#
my $NOM_FIC_RAPPORT;
#liste des fichiers a effacer
my @FICHIERS_A_EFFACER = ($FIC_COMMUNICATION);
#indicateur de test en cours (=0 si pas de test en cours, =1 si test en cours)
my $TEST_EN_COURS = 0;
#subroutine arret_force : - sera appelee pour toute interruption Ctrl-c (signal INT) ou kill -15 (signal TERM)
# - ferme le programme ("exit")
sub arret_force {
#attente de l arret d un eventuel script ./Perl/test.pl en cours
# on attend que le script ./Perl/test.pl ecrive la chaine "FIN_TEST" dans le fichier de communication $FIC_COMMUNICATION
while(-e $FIC_COMMUNICATION and not join(' ', qx(cat $FIC_COMMUNICATION)) =~ /\bFIN_TEST\b/) {select(undef,undef,undef,0.25);}
#creation du fichier rapport final (en l etat actuel)
system("mv -f Rapport/rapport_test.txt $NOM_FIC_RAPPORT");
#on signale a l utilisateur que le fichier de rapport a quand meme ete cree (mais on ne l affiche pas)
warn "\n\n\n\n";
warn " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n";
warn " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n";
warn " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n";
warn "\n";
warn " --------------------------------------------------------------\n";
warn " | ARRET FORCE |\n";
warn " --------------------------------------------------------------\n";
warn " => le rapport de test $NOM_FIC_RAPPORT a \n";
warn " quand meme ete cree\n";
warn "\n";
warn " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n";
warn " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n";
warn " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n";
warn "\n";
#suppression des eventuels fichiers de la liste @FICHIERS_A_EFFACER
system("rm -rf $_") for @FICHIERS_A_EFFACER;
#fin du programme
exit;
}
#capture : Ctrl-c (INT)
$SIG{INT} = \&arret_force;
#capture : kill -15 (TERM)
$SIG{TERM} = \&arret_force;
##########################################################################
##########################################################################
##########################################################################
@ -187,6 +269,9 @@ mkdir "./Rapport" if(not -e "./Rapport");
#--------------------------------------------------------------------------
my @LISTE_TESTS_ECHEC;
if(defined $opt_rpt_fic_rapport) {
#nom du fichier rapport final : Rapport/rapport_test_debugECHEC.txt
$NOM_FIC_RAPPORT = "Rapport/rapport_test_debugECHEC.txt";
open(FIC, "<$opt_rpt_fic_rapport");
my $is_test_ECHEC;
my $nom_repertoire_test;
@ -234,13 +319,15 @@ if(defined $opt_rpt_fic_rapport) {
#lancement des tests (dont le resultat s ecrit dans le rapport temporaire Rapport/rapport_test.txt)
foreach my $rep_test (@LISTE_TESTS_ECHEC) {
system("./Perl/test.pl $rep_test $exeHZ");
system("echo DEBUT_TEST > $FIC_COMMUNICATION");
system("./Perl/test.pl $rep_test $exeHZ $PID");
system("rm -f $FIC_COMMUNICATION");
}
#creation du fichier rapport final
system("mv -f Rapport/rapport_test.txt Rapport/rapport_test_debugECHEC.txt");
system("mv -f Rapport/rapport_test.txt $NOM_FIC_RAPPORT");
#affichage du rapport
system("nedit Rapport/rapport_test_debugECHEC.txt &");
system("nedit $NOM_FIC_RAPPORT \&");
}
}#fin option -rpt
@ -251,6 +338,9 @@ if(defined $opt_rpt_fic_rapport) {
#lancement des tests rapides (sauf en cas d option -L ou -rpt)
#--------------------
unless($is_opt_L or $is_opt_rpt) {
#nom du fichier rapport final : Rapport/rapport_test_R.txt
$NOM_FIC_RAPPORT = "Rapport/rapport_test_R.txt";
#recherche des tests Test_R dans l arborescence (utilisation de find et suppression de chaque retour a la ligne avec chomp)
my @LISTE_TESTS_R = map {chomp; $_} qx(find . -name "Test_R*" -type d);
@ -276,13 +366,15 @@ unless($is_opt_L or $is_opt_rpt) {
#lancement des tests (dont le resultat s ecrit dans le rapport temporaire Rapport/rapport_test.txt)
foreach my $rep_test (@LISTE_TESTS_R) {
system("./Perl/test.pl $rep_test $exeHZ");
system("echo DEBUT_TEST > $FIC_COMMUNICATION");
system("./Perl/test.pl $rep_test $exeHZ $PID");
system("rm -f $FIC_COMMUNICATION");
}
#creation du fichier rapport final
system("mv -f Rapport/rapport_test.txt Rapport/rapport_test_R.txt");
system("mv -f Rapport/rapport_test.txt $NOM_FIC_RAPPORT");
#affichage du rapport
system("nedit Rapport/rapport_test_R.txt \&");
system("nedit $NOM_FIC_RAPPORT \&");
}
}
@ -293,6 +385,9 @@ unless($is_opt_L or $is_opt_rpt) {
#lancement des tests longs (sauf en cas d option -R ou -rpt)
#--------------------
unless($is_opt_R or $is_opt_rpt) {
#nom du fichier rapport final : Rapport/rapport_test_L.txt
$NOM_FIC_RAPPORT = "Rapport/rapport_test_L.txt";
#recherche des tests Test_L dans l arborescence (utilisation de find et suppression de chaque retour a la ligne avec chomp)
my @LISTE_TESTS_L = map {chomp; $_} qx(find . -name "Test_L*" -type d);
@ -318,13 +413,15 @@ unless($is_opt_R or $is_opt_rpt) {
#lancement des tests (dont le resultat s ecrit dans le rapport temporaire Rapport/rapport_test.txt)
foreach my $rep_test (@LISTE_TESTS_L) {
system("./Perl/test.pl $rep_test $exeHZ");
system("echo DEBUT_TEST > $FIC_COMMUNICATION");
system("./Perl/test.pl $rep_test $exeHZ $PID");
system("rm -f $FIC_COMMUNICATION");
}
#creation du fichier rapport final
system("mv -f Rapport/rapport_test.txt Rapport/rapport_test_L.txt");
system("mv -f Rapport/rapport_test.txt $NOM_FIC_RAPPORT");
#affichage du rapport
system("nedit Rapport/rapport_test_L.txt \&");
system("nedit $NOM_FIC_RAPPORT \&");
}
}