diff --git a/Doc/doc_procedure_verification.tex b/Doc/doc_procedure_verification.tex index cf7e23d..2596711 100644 --- a/Doc/doc_procedure_verification.tex +++ b/Doc/doc_procedure_verification.tex @@ -720,6 +720,12 @@ Actuellement, il n'y a pas d'exemple dans le r \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|).\\ +\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 "-" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Perl/test.pl b/Perl/test.pl index a6c0f8f..4e2dc9a 100755 --- a/Perl/test.pl +++ b/Perl/test.pl @@ -369,15 +369,17 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) { my $incr_restart = 0; # rq : si le fichier .PI n existe pas, $incr_restart restera egal a 0 (pas d activation du RESTART) # sinon, $incr_restart sera egal au dernier increment lu dans le fichier .PI - open(FIC, "<$fichier_test.PI"); - while() { - last if(/^\s*$/); - next if(not /^\s*incre_posi_\(nb_et_posi\):\s+(\d+)/); - $incr_restart = $1; + unless(not -e "$fichier_test.PI") { + open(FIC, "<$fichier_test.PI"); + while() { + last if(/^\s*$/); + next if(not /^\s*incre_posi_\(nb_et_posi\):\s+(\d+)/); + $incr_restart = $1; + } + close(FIC); + #-reecriture du .info avec RESTART (si $incr_restart different de 0) + active_RESTART("$fichier_test.info", $incr_restart); } - close(FIC); - #-reecriture du .info avec RESTART (si $incr_restart different de 0) - active_RESTART("$fichier_test.info", $incr_restart); } ############################################################## @@ -422,7 +424,7 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) { # 2- la commande Herezh construite precedemment # 3- le nom du fichier de redirection de l affichage Herezh # 4- le nom du fichier .commande - + my $status_calcul = lancement_commande($hzchemin, $cmd_HZ, "$fichier_test.log", $fic_commande); # - si le calcul a termine normalement (converge ou non) => $status_calcul = "ok" @@ -458,6 +460,13 @@ BOUCLE_TEST:for(my $no_test=1; $no_test<=$nb_CVisu; $no_test++) { last BOUCLE_TEST; } + #---cas d un calcul qui ne se lance pas + elsif($status_calcul eq "probleme lancement calcul") { + printRapport(" -> ECHEC : le calcul ne se lance pas\n\n"); + print "**Erreur Test $repertoire_test/.CVisu$no_test : le calcul ne se lance pas\n"; + last BOUCLE_TEST; + } + #---cas d un arret a cause d une activite cpu nulle elsif($status_calcul eq "activite cpu nulle") { printRapport(" -> ECHEC : le calcul ne s arretait pas alors qu il avait une activite cpu nulle\n"); @@ -895,18 +904,50 @@ sub lancement_commande { ############################################################## #on s assure que le fichier de redirection a ete cree # si ce n est pas le cas, on retourne un probleme lie a la redirection de l affichage + # on en profite pour verifier que le calcul a bien ete lance (on refait la liste @HZpid comme vu ci-dessus si elle est vide) + # car dans ce cas, le fichier de redirection ne se creera jamais ############################################################## - if(not -e $fredir_tee) { - #suppression des processus de calcul - kill("TERM", @HZpid); - #suppression lien symbolique - system("rm -f $lien_symbolique_HZ"); + my $cpt_attente_lancement_commande = 0; + my $cpt_attente_creation_log = 0; + while(not -e $fredir_tee) { + #cas d un calcul pas encore lance + if($#HZpid == -1) { + select(undef, undef, undef, 0.001);#temps d attente d 1 milliseconde + @processus = qx(ps -U $ENV{USER} -o pid,%cpu,command | grep $lien_symbolique_HZ | grep -v grep); + foreach my $processus (@processus) { + next if(not $processus =~ /^\s*(\d+)/); + push(@HZpid, $1); + } + $cpt_attente_lancement_commande++; - return "probleme redirection affichage"; + #on genere une erreur si la commande ne s est toujours pas lancee apres 2000 fois 1 milliseconde = 2 secondes + if($cpt_attente_lancement_commande == 2000) { + #suppression des processus de calcul + kill("TERM", @HZpid); + #suppression lien symbolique + system("rm -f $lien_symbolique_HZ"); + + return "probleme lancement calcul"; + } + } + #cas d un calcul lance mais ou le fichier de redirection n existe pas encore + else { + select(undef, undef, undef, 0.001);#temps d attente d 1 milliseconde + $cpt_attente_creation_log++; + + #on genere une erreur si le fichier de redirection n a toujours pas ete cree apres 2000 fois 1 milliseconde = 2 secondes + if($cpt_attente_creation_log == 2000) { + #suppression des processus de calcul + kill("TERM", @HZpid); + #suppression lien symbolique + system("rm -f $lien_symbolique_HZ"); + + return "probleme redirection affichage"; + } + } } - # #...maintenant, on va lancer un processus fils pour surveiller le calcul. On provoque son arret force (kill -9) dans les cas suivants : # 1) si la taille du fichier $fredir_tee depasse $TAILLE_MAX_FIC_REDIR octets diff --git a/Rapport/rapport_test_L.txt b/Rapport/rapport_test_L.txt index 8c6675b..79c5f9d 100644 --- a/Rapport/rapport_test_L.txt +++ b/Rapport/rapport_test_L.txt @@ -1,11 +1,11 @@ --------------------------------------- - RAPPORT DE TEST - --------------------------------------- -- version HZ++ : HZppfast 6.713 +- version HZ++ : HZppfast 6.719 - Batterie de tests lancee -- le 31/07/2015 -- a 16:55 (heure locale) +- le 29/09/2015 +- a 1:44 (heure locale) --------------------------------------- ./Batterie/FONCTION_UNIQUE/LOI_DE_COMPORTEMENT/CP_venant_du_3D/Test_L_tunnel_ISOELAS_CP/.CVisu1 diff --git a/Rapport/rapport_test_R.txt b/Rapport/rapport_test_R.txt index 993629a..97e9daf 100644 --- a/Rapport/rapport_test_R.txt +++ b/Rapport/rapport_test_R.txt @@ -1,11 +1,11 @@ --------------------------------------- - RAPPORT DE TEST - --------------------------------------- -- version HZ++ : HZppfast 6.713 +- version HZ++ : HZppfast 6.719 - Batterie de tests lancee -- le 09/09/2015 -- a 12:12 (heure locale) +- le 29/09/2015 +- a 1:44 (heure locale) --------------------------------------- ./Batterie/FONCTION_UNIQUE/CONTACT/Test_R_contact_axi_non_dynamique/.CVisu1 diff --git a/doc_procedure_verification.pdf b/doc_procedure_verification.pdf index 727db0f..48f1a8e 100644 Binary files a/doc_procedure_verification.pdf and b/doc_procedure_verification.pdf differ diff --git a/verifier_exeHZ.pl b/verifier_exeHZ.pl index fa4ed99..2e1973f 100755 --- a/verifier_exeHZ.pl +++ b/verifier_exeHZ.pl @@ -5,6 +5,7 @@ use warnings; use English; use File::Basename; use File::Spec::Functions qw(splitpath rel2abs);#($volume, $rep, $fic) = splitpath($path); $absolute_path = rel2abs($relative_path) +use Module::Load::Conditional qw(check_install);#pour verifier existence d une librairie my $NOM_PROG = basename $PROGRAM_NAME; #pattern d un reel pour les regex (desormais redondant avec $RE{num}{real} de Regexp::Common) my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?'; @@ -354,8 +355,12 @@ unless($is_opt_R) { # - print ou warn (suivant que l on souhaite afficher avec print (donc vers STDOUT) ou warn (donc vers STDERR) # sub afficher_ligne_tirets { - use Term::ReadKey; - my $nb_char_largeur_terminal = ( GetTerminalSize() )[0];#largeur du terminal en nombre de caracteres (via package Term::ReadKey) + #utilisation de Term::ReadKey seulement si la librairie existe + my $nb_char_largeur_terminal = 78; + if(check_install( module => 'Term::ReadKey')) { + require Term::ReadKey; Term::ReadKey->import(qw(GetTerminalSize)); + $nb_char_largeur_terminal = ( GetTerminalSize() )[0];#largeur du terminal en nombre de caracteres (via package Term::ReadKey) + } my $funct_disp = shift;