PD-30 - Cahier de tests¶
1. Matrice de couverture INV -> Tests¶
| Invariant | Tests couvrants | Statut |
|---|---|---|
| INV-30-01 | TC-30-001 | ✅ Couvert |
| INV-30-02 | TC-30-002 | ✅ Couvert |
| INV-30-03 | TC-30-001, TC-30-015 | ✅ Couvert |
| INV-30-04 | TC-30-001, TC-30-005 | ✅ Couvert |
| INV-30-05 | TC-30-003 | ✅ Couvert |
| INV-30-06 | TC-30-004 | ✅ Couvert |
| INV-30-07 | TC-30-005 | ✅ Couvert |
| INV-30-08 | TC-30-006 | ✅ Couvert |
| INV-30-09 | TC-30-007 | ✅ Couvert |
| INV-30-10 | TC-30-008 | ✅ Couvert |
| INV-30-11 | TC-30-009 | ✅ Couvert |
| INV-30-12 | TC-30-006 | ✅ Couvert |
| INV-30-13 | TC-30-010 | ✅ Couvert |
| INV-30-14 | TC-30-011 | ✅ Couvert |
| INV-30-15 | TC-30-012, TC-30-013 | ✅ Couvert |
| INV-30-16 | TC-30-014, TC-30-016, TC-30-017 | ✅ Couvert |
| INV-30-17 | TC-30-001, TC-30-015 | ✅ Couvert |
| INV-30-18 | TC-30-016 | ✅ Couvert |
| INV-30-19 | TC-30-017 | ✅ Couvert |
2. Matrice de couverture CA -> Tests¶
| Critere | Tests couvrants | Statut |
|---|---|---|
| CA-30-01 | TC-30-001 | ✅ Couvert |
| CA-30-02 | TC-30-001, TC-30-015 | ✅ Couvert |
| CA-30-03 | TC-30-001, TC-30-005 | ✅ Couvert |
| CA-30-04 | TC-30-003 | ✅ Couvert |
| CA-30-05 | TC-30-004 | ✅ Couvert |
| CA-30-06 | TC-30-005 | ✅ Couvert |
| CA-30-07 | TC-30-006 | ✅ Couvert |
| CA-30-08 | TC-30-007 | ✅ Couvert |
| CA-30-09 | TC-30-008 | ✅ Couvert |
| CA-30-10 | TC-30-009 | ✅ Couvert |
| CA-30-11 | TC-30-010 | ✅ Couvert |
| CA-30-12 | TC-30-012, TC-30-013 | ✅ Couvert |
| CA-30-13 | TC-30-011 | ✅ Couvert |
| CA-30-14 | TC-30-014 | ✅ Couvert |
| CA-30-15 | TC-30-016 | ✅ Couvert |
| CA-30-16 | TC-30-017 | ✅ Couvert |
3. Scenarios de test¶
TC-30-001 - Creation de session active unique et complete¶
- Preconditions : Horloge de test synchronisee UTC ms ; store central disponible ; utilisateur U1 authentifie avec succes ; contexte
WEBconnu ; logs audit activables en lecture. - Donnees d'entree : Evenement d'authentification reussie (userId=U1, deviceId=D1, ip=IP1, userAgent=UA1, context=
WEB). - Actions : Declencher la creation de session une seule fois ; lire la session creee ; lire les logs lies a l'operation.
- Resultat attendu : Exactement 1 session
ACTIVEest creee avecsessionIdnon nul ; champs minimaux presents (sessionId,userId,deviceId,ipHash,userAgentHash,createdAt,lastActivityAt,context,expiresAt,status) ;ttlSeconds >= 1;expiresAt > createdAt; aucun token brut/secret/materiau cryptographique en clair dans la session et dans les logs. - Criteres couverts : INV-30-01, INV-30-03, INV-30-04, INV-30-17, CA-30-01, CA-30-02, CA-30-03
- Automatisable : Oui
TC-30-002 - Unicite globale du sessionId sur retention active + 24h¶
- Preconditions : Environnement de test permettant de conserver l'historique des
sessionId; retention configuree ; horloge controlee. - Donnees d'entree : N creations de sessions (N >= 100000) sur plusieurs utilisateurs/devices/contexte, reparties sur la fenetre retention active + 24h.
- Actions : Executer les creations ; collecter tous les
sessionIdemis sur la fenetre ; verifier l'unicite globale. - Resultat attendu : 0 collision de
sessionIdsur toute la fenetre observee ; toute collision rend le test en echec. - Criteres couverts : INV-30-02
- Automatisable : Oui
TC-30-003 - Expiration automatique et rejet post-expiration¶
- Preconditions : Session S1 active avec TTL court deterministic (ex. 3 s) ; horloge controlee ; endpoint protege par session actif.
- Donnees d'entree : Requete authentifiee avec S1 apres depassement de
expiresAt. - Actions : Attendre strictement au-dela de
expiresAt; emettre une requete avec S1 ; consulter trace d'audit. - Resultat attendu : Rejet
SESSION_INVALID; S1 inutilisable sans action humaine ; evenementEXPIREet traceSESSION_REJECTEDavec raison presentes. - Criteres couverts : INV-30-05, CA-30-04, ECT-30-01
- Automatisable : Oui
TC-30-004 - Renouvellement autorise avant expiration, interdit apres¶
- Preconditions : Session S2 active non expiree ; mecanisme de refresh disponible.
- Donnees d'entree : (A) requete valide avant expiration ; (B) tentative de refresh apres expiration ; (C) tentative apres invalidation explicite.
- Actions : Executer A puis lire
expiresAt/lastActivityAt; laisser expirer S2 puis executer B ; recreer S3 puis invalider S3 et executer C. - Resultat attendu : A augmente
expiresAtet met a jourlastActivityAt; B et C sont refuses (pas de prolongation possible) ; aucun refresh accepte sur session expiree/invalidee. - Criteres couverts : INV-30-06, CA-30-05
- Automatisable : Oui
TC-30-005 - Matrice des TTL par contexte¶
- Preconditions : Valeurs TTL configurees pour
WEB,MOBILE,API,SENSITIVE; horloge UTC ms controlee. - Donnees d'entree : 4 creations de session (une par contexte) avec meme userId/deviceId de test.
- Actions : Creer 4 sessions ; relever
createdAt,expiresAt,context,ttlSeconds; comparer les deltas. - Resultat attendu : Les 4 TTL appliques sont strictement positifs ;
expiresAt - createdAtcoherent avec la valeur du contexte ; les 4 valeurs sont distinctes entre elles. - Criteres couverts : INV-30-04, INV-30-07, CA-30-03, CA-30-06
- Automatisable : Oui
TC-30-006 - Listing appareils/sessions : complet, isole, frais, champs autorises¶
- Preconditions : Utilisateurs U1 et U2 avec sessions actives multiples ; derive geoloc ville/pays disponible ; store central disponible ; endpoint listing actif.
- Donnees d'entree : Requete de listing par U1 ; tentative de lecture des sessions U2 par U1.
- Actions : Prendre un snapshot etat store pour U1/U2 ; appeler listing U1 ; mesurer ecart temporel snapshot vs reponse ; executer tentative inter-utilisateur.
- Resultat attendu : Reponse U1 contient toutes et seulement les sessions de U1 ; aucune session U2 ; staleness <= 2 s ; chaque entree expose uniquement
type appareil,date connexion,derniere activite,localisation approximative (ville/pays),statut; tentative inter-utilisateur rejeteeACCESS_DENIED+ trace. - Criteres couverts : INV-30-08, INV-30-12, CA-30-07, ECT-30-04
- Automatisable : Oui
TC-30-007 - Revocation session ciblee cross-instance avec SLA latence¶
- Preconditions : Cluster multi-instance (>= 3 instances) ; jeu de sessions valides ; instrumentation latence p95/p99 ; echantillon >= 1000 operations.
- Donnees d'entree : 1000 requetes
REVOKE_SESSIONciblees avec verification immediate d'usage token sur toutes instances. - Actions : Pour chaque operation, declencher revocation puis sonder toutes instances jusqu'au rejet ; enregistrer latence de propagation.
- Resultat attendu : Chaque session ciblee devient inutilisable sur toutes instances ; distribution latence respecte
p95 < 100 msetp99 < 250 ms; journalREVOKE_SESSIONpresent. - Criteres couverts : INV-30-09, CA-30-08
- Automatisable : Oui
TC-30-008 - Revocation globale utilisateur cross-instance avec SLA latence¶
- Preconditions : Cluster multi-instance ; utilisateur U3 avec plusieurs sessions actives sur plusieurs devices/instances ; instrumentation latence p95/p99 ; echantillon >= 1000 operations.
- Donnees d'entree : 1000 operations
REVOKE_ALLsur des utilisateurs ayant au moins 3 sessions actives. - Actions : Declencher chaque
REVOKE_ALL; sonder reutilisation de toutes sessions sur toutes instances ; mesurer latence de pleine invalidation. - Resultat attendu : Toutes les sessions du user cible deviennent inutilisables ;
p95 < 100 msetp99 < 250 ms; journalREVOKE_ALLavec motif. - Criteres couverts : INV-30-10, CA-30-09
- Automatisable : Oui
TC-30-009 - Invalidation obligatoire sur evenements contractuels¶
- Preconditions : Utilisateur U4 avec sessions multi-devices ; canal d'emission d'evenements securite/conformite disponible.
- Donnees d'entree : 4 evenements :
PASSWORD_CHANGED,DEVICE_REVOKED(deviceId=D4),INTRUSION_SUSPECTED,JUDICIAL_REQUEST(scope explicite). - Actions : Injecter chaque evenement dans un run isole ; verifier la portee d'invalidation appliquee et les journaux sources/cibles.
- Resultat attendu :
PASSWORD_CHANGED=>REVOKE_ALLU4 ;DEVICE_REVOKED=> invalidation de toutes sessions actives de D4 seulement ;INTRUSION_SUSPECTED=>REVOKE_ALLU4 ;JUDICIAL_REQUEST=> invalidation conforme a la portee explicite fournie ; toutes les traces d'evenement source + action d'invalidation sont presentes. - Criteres couverts : INV-30-11, CA-30-10
- Automatisable : Oui
TC-30-010 - Revocation device : toutes les sessions du device cible, seulement celles-ci¶
- Preconditions : U5 avec 2 sessions actives sur D5-A et 2 sessions actives sur D5-B.
- Donnees d'entree : Requete
REVOKE_DEVICEpour D5-A. - Actions : Declencher la revocation ; verifier etat/utilisabilite des 4 sessions.
- Resultat attendu : Les 2 sessions de D5-A sont invalidees ; les 2 sessions de D5-B restent actives ; journal
REVOKE_DEVICEpresent. - Criteres couverts : INV-30-13, CA-30-11
- Automatisable : Oui
TC-30-011 - Verification timing-safe de token/session¶
- Preconditions : Composant de verification instrumentable ; environnement capable de preuve statique et test de non-regression runtime.
- Donnees d'entree : Corpus de tokens valides/invalides differant a positions variables (debut/milieu/fin) et longueurs controllees.
- Actions : (1) Verification statique : confirmer l'usage de primitive timing-safe dans le chemin de comparaison ; (2) Verification runtime : comparer distributions de temps sur jeux invalides a positions differentes, sous charge stable.
- Resultat attendu : Preuve explicite d'appel a comparaison timing-safe dans le composant de validation ; aucune comparaison directe type
==/===sur secrets/token ; derive temporelle non exploitable selon seuil de test defini. - Criteres couverts : INV-30-14, CA-30-13
- Automatisable : Oui
TC-30-012 - Rate limiting scope user (fenetre glissante 15 min)¶
- Preconditions : Endpoint sensible soumis au rate limiting ; fenetre glissante 15 min ; utilisateur U6 depuis IP stable.
- Donnees d'entree : 4 requetes sensibles valides emises par U6 en < 15 min.
- Actions : Emettre les 4 requetes selon un timing controle ; collecter reponses et traces.
- Resultat attendu : Requetes 1-3 non rejetees par la regle user ; 4e rejetee
RATE_LIMIT_USER(HTTP 429 equivalent) avecretryAfterSeconds; traceRATE_LIMIT_HITscope user. - Criteres couverts : INV-30-15, CA-30-12, ECT-30-02
- Automatisable : Oui
TC-30-013 - Rate limiting scope IP (fenetre glissante 15 min)¶
- Preconditions : Endpoint sensible soumis au rate limiting ; 2+ utilisateurs derriere la meme IP.
- Donnees d'entree : 6 requetes sensibles en < 15 min depuis meme IP (users differents autorises).
- Actions : Emettre les 6 requetes ; collecter reponses et traces.
- Resultat attendu : 1-5 non rejetees par la regle IP ; 6e rejetee
RATE_LIMIT_IP(HTTP 429 equivalent) avecretryAfterSeconds; traceRATE_LIMIT_HITscope ip. - Criteres couverts : INV-30-15, CA-30-12, ECT-30-03
- Automatisable : Oui
TC-30-014 - Journalisation append-only complete, ordonnee et conforme¶
- Preconditions : Audit log interrogeable en lecture ; pipeline d'horodatage UTC ms actif ; acteur et motif disponibles dans contexte.
- Donnees d'entree : Sequence d'actions couvrant
CREATE,REFRESH,REVOKE_SESSION,REVOKE_DEVICE,REVOKE_ALL,EXPIRE. - Actions : Executer la sequence ; extraire les logs ; verifier ordre temporel, immutabilite append-only, presence champs obligatoires.
- Resultat attendu : Tous les evenements contractuels testes sont presents en ordre de creation, sans mise a jour destructive d'entrees precedentes ; chaque entree contient timestamp UTC milliseconde, acteur, motif (si applicable) ; aucune donnee secrete en clair dans le journal.
- Criteres couverts : INV-30-16, INV-30-17, CA-30-14
- Automatisable : Oui
TC-30-015 - Absence de secrets en clair dans store et logs¶
- Preconditions : Jeux d'entree contenant canaris secrets (token brut, secret auth, materiau crypto simulé) injectes dans flux de test autorises ; acces lecture au store session et logs.
- Donnees d'entree : Operations create/refresh/revoke incluant identifiants canari en entree amont.
- Actions : Executer operations ; scanner store session et logs sur patterns canari/brut.
- Resultat attendu : Aucun canari secret present en clair ; seules representations autorisees (hash/redaction) observees.
- Criteres couverts : INV-30-03, INV-30-17, CA-30-02
- Automatisable : Oui
TC-30-016 - Bascule fallback in-memory en < 1 s avec TTL applique¶
- Preconditions : Store central operationnel puis fault injection possible ; fallback in-memory activable ; horloge monotone de mesure.
- Donnees d'entree : Defaillance simulee du store central pendant trafic nominal ; creation session en mode degrade avec TTL court.
- Actions : Provoquer indisponibilite store ; mesurer delai detection ->
FALLBACK_ON; creer session fallback ; verifier expiration par TTL ; restaurer store central et verifierFALLBACK_OFF. - Resultat attendu : Activation fallback en < 1 s ; mode degrade explicitement signale ; session fallback expire selon TTL ;
FALLBACK_ONetFALLBACK_OFFjournalises ; operations locales continuent tant que fallback disponible. - Criteres couverts : INV-30-18, INV-30-16, CA-30-15, ECT-30-05
- Automatisable : Oui
TC-30-017 - Rejet explicite des operations globales en mode degrade¶
- Preconditions : Mode degrade actif (fallback ON) ; utilisateur avec sessions actives ; endpoint global disponible en mode nominal.
- Donnees d'entree : Requetes
LIST_ALL_USER_SESSIONSetREVOKE_ALL_USER_SESSIONSpendant degradation. - Actions : Executer les deux requetes ; collecter reponses et traces.
- Resultat attendu : Rejets explicites
DEGRADED_MODE_RESTRICTIONpour les 2 operations ; traces de rejet presentes et correlees au mode degrade. - Criteres couverts : INV-30-19, CA-30-16, ECT-30-05
- Automatisable : Oui
TC-30-018 - Store central indisponible et fallback indisponible¶
- Preconditions : Mecanisme de simulation panne double (store central OFF + fallback OFF/KO).
- Donnees d'entree : Requete de verification/operation session standard.
- Actions : Mettre store central hors service ; rendre fallback indisponible ; emettre requete.
- Resultat attendu : Rejet
SESSION_SERVICE_UNAVAILABLE(HTTP 503 equivalent) ; traceSESSION_SERVICE_UNAVAILABLEpresente. - Criteres couverts : ECT-30-06
- Automatisable : Oui
TC-30-019 - Revocation sans acteur autorise¶
- Preconditions : Endpoint de revocation expose ; principal non autorise prepare.
- Donnees d'entree : Requete de
REVOKE_SESSIONouREVOKE_ALLpar acteur non autorise. - Actions : Executer la requete non autorisee ; collecter reponse et trace.
- Resultat attendu : Rejet
FORBIDDEN_ACTION; traceFORBIDDEN_ACTIONobligatoire. - Criteres couverts : ECT-30-07
- Automatisable : Oui
4. Tests non testables¶
| Regle | Raison |
|---|---|
| HP-30-01 | NON TESTABLE : l'exigence de "montee en charge lineaire" ne fournit aucune cible numerique (charge, debit, latence, erreur) permettant un oracle de succes/echec objectif. |
| HP-30-02 | NON TESTABLE : la "coherence avec mecanisme d'ancrage probatoire" ne fournit pas de contrat d'interface technique (schema, periodicite, identifiant de correlation). |
FN-30-07 (branche JUDICIAL_REQUEST sans portee explicite) | NON TESTABLE EN L'ETAT : la spec autorise "REVOKE_ALL utilisateur ou portee precisee" sans definir le comportement par defaut quand la portee n'est pas fournie. |
5. Verdict de couverture¶
- INV couverts : 19/19
- CA couverts : 16/16
- Regles non testables : 3