Publié le :
Macro CREATION_INTERNE

Test du mécanisme de verrouillage de table via des macros

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script exécute une série de tests pour valider le comportement de la macro `%mp_lockanytable`. Il commence par créer une table de contrôle (`work.controller`) et en valide la structure. Ensuite, il crée une table de test (`tmp.sometable`), la verrouille et vérifie que l'état 'LOCKED' est bien enregistré. Il procède ensuite au déverrouillage et s'assure que le statut passe à 'UNLOCKED'. Un cas d'erreur est également testé en tentant de déverrouiller une table inexistante, en s'assurant que le programme ne s'arrête pas. Finalement, il vérifie l'absence de fuite de variables macro après l'appel à la macro principale.
Analyse des données

Type : CREATION_INTERNE


Toutes les données utilisées sont créées par le script lui-même. Cela inclut la table à verrouiller (`tmp.sometable`), la table de contrôle des verrous (`work.controller`), et plusieurs petites tables de vérification (`work.checkds*`) utilisées pour les assertions.

1 Bloc de code
Macro Data
Explication :
La macro `%mp_coretable` crée la table `work.controller` destinée à suivre l'état des verrous. La macro `%mp_assertcols` est ensuite utilisée pour valider que cette table de contrôle contient bien toutes les colonnes requises.
Copié !
1%mp_coretable(LOCKTABLE,libds=work.controller)
2 
3%mp_assertcols(work.controller,
4 cols=lock_status_cd lock_lib lock_ds lock_user_nm lock_ref lock_pid
5 lock_start_dttm lock_end_dttm,
6 test=ALL,
7 desc=check all control columns exist
8)
2 Bloc de code
DATA STEP Data
Explication :
Ce bloc active la création de répertoires à la volée, alloue une bibliothèque `tmp` dans le dossier temporaire de la session, puis y crée une table `tmp.sometable` pour les besoins du test.
Copié !
1options dlcreatedir;
2LIBNAME tmp "%sysfunc(pathname(work))/tmp";
3DATA tmp.sometable;
4 x=1;
5RUN;
3 Bloc de code
Macro Data
Explication :
La macro `%mp_lockanytable` est appelée pour verrouiller la table `tmp.sometable`. Des tables de validation sont créées (`work.checkds1`, `work.checkds2`) et la macro `%mp_assertcolvals` vérifie que le nom de la table et le statut 'LOCKED' sont correctement enregistrés dans la table de contrôle.
Copié !
1%mp_lockanytable(LOCK,lib=tmp,ds=sometable,ref=This Ref, ctl_ds=work.controller)
2 
3DATA work.checkds1;
4 checkval='SOMETABLE';
5RUN;
6%mp_assertcolvals(work.controller.lock_ds,
7 checkvals=work.checkds1.checkval,
8 desc=TABLE is captured in lock,
9 test=ANYVAL
10)
11 
12DATA work.checkds2;
13 checkval='LOCKED';
14RUN;
15%mp_assertcolvals(work.controller.lock_status_cd,
16 checkvals=work.checkds2.checkval,
17 desc=code is captured in lock,
18 test=ANYVAL
19)
4 Bloc de code
Macro Data
Explication :
La table `tmp.sometable` est déverrouillée via `%mp_lockanytable`. Le script vérifie ensuite avec `%mp_assertcolvals` que le statut dans la table de contrôle est bien mis à jour à 'UNLOCKED'.
Copié !
1%mp_lockanytable(UNLOCK,lib=tmp,ds=sometable,ref=bye, ctl_ds=work.controller)
2 
3DATA work.checkds3;
4 checkval='UNLOCKED';
5RUN;
6%mp_assertcolvals(work.controller.lock_status_cd,
7 checkvals=work.checkds3.checkval,
8 desc=Ref is captured in unlock,
9 test=ANYVAL
10)
5 Bloc de code
Macro
Explication :
Ce bloc teste un cas d'erreur en tentant de déverrouiller une table inexistante. La macro `%mp_assert` valide que cette opération s'exécute sans erreur fatale, en vérifiant que le code retour système `&syscc` reste à 0.
Copié !
1%mp_lockanytable(UNLOCK,lib=no,ds=doesnotexist,ref=bye, ctl_ds=work.controller)
2 
3%mp_assert(
4 iftrue=(&syscc=0),
5 desc=Ability to unlock a TABLE that was never locked,
6 outds=work.test_results
7)
6 Bloc de code
Macro
Explication :
Ce bloc teste la 'fuite' de variables macro. `%mp_assertscope(SNAPSHOT)` prend un instantané des variables macro existantes, `%mp_lockanytable` est exécutée, puis `%mp_assertscope(COMPARE)` compare le nouvel état au précédent pour s'assurer qu'aucune variable macro locale n'a été créée globalement.
Copié !
1%mp_assertscope(SNAPSHOT)
2%mp_lockanytable(LOCK,lib=tmp,ds=testscope,ref=This Ref, ctl_ds=work.controller)
3%mp_assertscope(COMPARE)
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.
Informations de Copyright : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de; Copyright © 2021, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. SPDX-License-Identifier: Apache-2.0