Le script génère ses propres données de test : un fichier temporaire (`testref`) servant de code source pour le job, et des datasets (`work.info`, `work.jobstates`) produits par les macros SAS Viya. Le contenu du log du job est également une donnée interne générée par l'exécution du job.
1 Bloc de code
DATA STEP Data
Explication : Ce bloc crée un fileref temporaire 'testref' et y écrit un programme SAS simple (`data;run; endsas;`). Ce programme SAS minimaliste sera ensuite utilisé comme code source pour un job SAS Viya.
Copié !
filename testref temp;
data _null_;
file testref;
put 'data;run;';
put 'endsas;';
run;
1
filename testref temp;
2
DATA _null_;
3
file testref;
4
put 'data;run;';
5
put 'endsas;';
6
RUN;
2 Bloc de code
MACRO mv_createjob
Explication : Appel de la macro `%mv_createjob` pour définir un nouveau job SAS Viya nommé 'testjob' à l'emplacement spécifié par la macro-variable `&mcTestAppLoc/jobs/temp`. Le code source du job est lu à partir du fileref 'testref' créé précédemment.
Explication : Exécute le job 'testjob' défini précédemment. Les informations détaillées de l'exécution du job (URI, statut, etc.) sont sauvegardées dans le dataset `work.info`.
Explication : Filtre le dataset `work.info` pour ne conserver que les observations pertinentes pour le suivi de l'état du job, spécifiquement celles où `method` est 'GET' et `rel` est 'state'. Ceci est fait en préparation de l'attente du statut final du job.
Copié !
data work.info;
set work.info;
where method='GET' and rel='state';
run;
1
DATA work.info;
2
SET work.info;
3
where method='GET' and rel='state';
4
RUN;
5 Bloc de code
MACRO mv_jobwaitfor Data
Explication : Appel de la macro `%mv_jobwaitfor` pour attendre que le job, dont les informations sont contenues dans `work.info`, atteigne un état final (ALL). Le statut final détaillé est enregistré dans le dataset `work.jobstates`.
Explication : Ce `DATA _NULL_` step lit le dataset `work.jobstates` et extrait la valeur de la variable `uri` (l'Uniform Resource Identifier du log du job) pour la stocker dans la macro-variable `uri`. Cette macro-variable est essentielle pour récupérer le log du job.
Copié !
data _null_;
set work.jobstates;
call symputx('uri',uri);
run;
1
DATA _null_;
2
SET work.jobstates;
3
call symputx('uri',uri);
4
RUN;
7 Bloc de code
MACRO mv_getjoblog
Explication : La macro `%mp_assertscope(SNAPSHOT)` est utilisée pour capturer l'état actuel des macro-variables, utile pour les comparaisons de tests. Ensuite, la macro `%mv_getjoblog` est appelée pour récupérer le log du job en utilisant l'URI extraite précédemment. Le contenu du log est sauvegardé dans le fileref `mylog` avec un débogage activé (`mdebug=1`).
Explication : Cette macro `%mp_assertscope(COMPARE...)` est utilisée dans le cadre d'un test unitaire pour comparer l'état actuel des macro-variables avec un 'snapshot' précédent, en ignorant certaines macro-variables (`MCLIB2_JADP2LEN`, `MCLIB2_JADPNUM`, `MCLIB2_JADVLEN`) qui sont probablement des variables internes générées automatiquement et non pertinentes pour l'assertion.
Copié !
/* ignore auto proc json vars */
%mp_assertscope(COMPARE
,ignorelist=MCLIB2_JADP2LEN MCLIB2_JADPNUM MCLIB2_JADVLEN
)
Explication : Ce `DATA _NULL_` step lit le contenu du log du job (`mylog`) ligne par ligne. Il recherche la chaîne 'endsas;'. Si elle est trouvée, la macro-variable `found` est mise à 1. Si la fin du fichier est atteinte sans trouver la chaîne, `found` est mise à 0. Le contenu du log est également écrit dans le log SAS courant via `putlog _infile_` pour faciliter le débogage.
Copié !
data _null_;
infile mylog end=eof;
input;
putlog _infile_;
retain found 0;
if index(_infile_,'endsas;') then do;
found=1;
call symputx('found',found);
end;
else if eof and found ne 1 then call symputx('found',0);
run;
1
DATA _null_;
2
INFILE mylog END=eof;
3
INPUT;
4
putlog _infile_;
5
retain found 0;
6
IF index(_infile_,'endsas;') THENDO;
7
found=1;
8
call symputx('found',found);
9
END;
10
ELSEIF eof and found ne 1THEN call symputx('found',0);
11
RUN;
10 Bloc de code
MACRO mp_assert
Explication : La macro `%mp_assert` est utilisée pour vérifier une condition de test. Ici, elle vérifie si la macro-variable `found` est égale à 1, ce qui confirme que la chaîne 'endsas;' a été trouvée dans le log du job. La description du test indique qu'il s'agit de vérifier si le log a été correctement récupéré malgré la simplicité du job soumis.
Copié !
%mp_assert(
iftrue=(%str(&found)=1),
desc=Check if the log was still fetched even though endsas was submitted
)
1
%mp_assert(
2
iftrue=(%str(&found)=1),
3
desc=Check IF the log was still fetched even though endsas was submitted
4
)
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.