Aller au contenu

PD-82 — Scénarios de tests contractuels

1. Références

  • Spécification source: PD-82-specification.md (canonique contractuelle)
  • Epic: PD-189 — CRYPTO
  • Portée test: conformité contractuelle, testabilité, non-régression, traçabilité probatoire

2. Matrice de couverture (INV → CA → TC)

INV ID Règle (résumé) CA couverts TC de couverture Statut
INV-82-01 1 validation ne déclenche jamais PRE CA-82-01, CA-82-09 TC-NOM-01, TC-NOM-02, TC-ERR-01, TC-INV-01 Couvert
INV-82-02 Aucune validation implicite au timeout CA-82-03 TC-ERR-02, TC-INV-02 Couvert
INV-82-03 TTL strict 7 jours sinon EXPIRED CA-82-03 TC-ERR-02, TC-INV-03 Couvert
INV-82-04 Révocation explicite avant activation => REJECTED CA-82-02, CA-82-10 TC-NOM-04, TC-INV-04, TC-NR-03 Couvert
INV-82-05 Plateforme ne force pas activation sans 2 validations valides CA-82-01, CA-82-07 TC-ERR-01, TC-ERR-07, TC-INV-05 Couvert
INV-82-06 Validation horodatée probatoirement CA-82-04 TC-NOM-03, TC-INV-06 Couvert
INV-82-07 Validation liée à identité juridique explicite CA-82-04, CA-82-07 TC-NOM-03, TC-ERR-06, TC-INV-07 Couvert
INV-82-08 Ordre des validations indifférent CA-82-06 TC-NOM-01, TC-NOM-02, TC-INV-08 Couvert
INV-82-09 Validation authentifiée cryptographiquement CA-82-05 TC-ERR-05, TC-INV-09 Couvert
INV-82-10 Identité non contestable (X.509/eIDAS/équivalent opposable) CA-82-04 TC-ERR-06, TC-INV-10 Couvert
INV-82-11 Aucune clé PRE activée avant ACTIVATED CA-82-01, CA-82-10 TC-ERR-01, TC-INV-11, TC-NR-04 Couvert
INV-82-12 Journal append-only complet CA-82-08, CA-82-09, CA-82-10 TC-NOM-03, TC-ERR-08, TC-INV-12 Couvert

3. Scénarios de test — Flux nominaux (GIVEN/WHEN/THEN)

TC-NOM-01 — Parent puis autorité, activation 2-of-2

GIVEN une délégation PRE mineur en état PENDING_BOTH
  AND parent P possède une identité opposable valide et une signature vérifiable
  AND autorité A est pré-enregistrée, authentifiée fortement, identité opposable valide
  AND horloge de test figée à T0
WHEN P soumet une validation explicite signée à T0+5m
  AND A soumet une validation explicite signée à T0+1d
THEN l'état transite PENDING_BOTH -> PENDING_AUTHORITY -> ACTIVATED
  AND activatePRE(delegationId) est appelé exactement 1 fois après la seconde validation
  AND l'événement d'activation référence les IDs des 2 validations (P, A)
  AND aucun événement de refus n'est présent
Couvre: INV-82-01, INV-82-08, INV-82-09, INV-82-11, INV-82-12; CA-82-01, CA-82-06, CA-82-09

TC-NOM-02 — Autorité puis parent, activation 2-of-2

GIVEN une délégation PRE mineur en état PENDING_BOTH
  AND A et P ont des identités opposables et signatures vérifiables
  AND horloge de test figée à T0
WHEN A valide explicitement à T0+10m
  AND P valide explicitement à T0+2d
THEN l'état transite PENDING_BOTH -> PENDING_PARENT -> ACTIVATED
  AND activatePRE(delegationId) est appelé exactement 1 fois après la seconde validation
  AND l'issue finale est identique au scénario TC-NOM-01
Couvre: INV-82-08, INV-82-01, INV-82-11; CA-82-06, CA-82-01

TC-NOM-03 — Traçabilité probatoire complète

GIVEN un processus complet PD-82 mené jusqu'à ACTIVATED
WHEN un audit externe exporte le dossier de preuve
THEN chaque événement (création, validations, activation) est présent en append-only
  AND chaque validation contient timestamp probatoire vérifiable
  AND chaque validation contient identité juridique explicite vérifiable
  AND l'ordre exact des événements est reconstructible sans ambiguïté
  AND l'activation référence les deux validations source
Couvre: INV-82-06, INV-82-07, INV-82-12; CA-82-04, CA-82-08, CA-82-09

TC-NOM-04 — Révocation avant activation

GIVEN une délégation PRE mineur en état PENDING_AUTHORITY
  AND la validation parent est présente et valide
WHEN le parent (auteur de la validation) soumet une révocation explicite signée avant seconde validation
THEN l'état devient REJECTED
  AND activatePRE(delegationId) n'est jamais appelé
  AND toute validation ultérieure sur cette délégation est refusée (état terminal)
  AND la révocation est journalisée en append-only
Couvre: INV-82-04, INV-82-11, INV-82-12; CA-82-02, CA-82-10


4. Scénarios de test — Cas d'erreur (GIVEN/WHEN/THEN)

TC-ERR-01 — Activation avec une seule validation

GIVEN une délégation en PENDING_AUTHORITY avec une seule validation valide
WHEN une activation PRE est demandée
THEN la demande est refusée explicitement
  AND l'état reste PENDING_AUTHORITY
  AND un événement append-only de refus est créé
  AND activatePRE(delegationId) n'est pas appelé
Couvre: ERR-82-01; INV-82-01, INV-82-11, INV-82-12; CA-82-01

TC-ERR-02 — Seconde validation après TTL > 7 jours

GIVEN une première validation valide horodatée à T0
  AND aucune seconde validation jusqu'à T0+7j+1s
WHEN la seconde validation est soumise à T0+7j+1s
THEN la validation est refusée
  AND l'état devient EXPIRED si non terminal
  AND aucune activation implicite ni explicite n'a lieu
  AND un nouveau processus est requis
Couvre: ERR-82-02; INV-82-02, INV-82-03; CA-82-03

TC-ERR-03 — Révocation par acteur non auteur

GIVEN une validation signée par le parent P
WHEN l'autorité A tente de révoquer la validation de P
THEN la révocation est refusée explicitement
  AND l'état reste inchangé
  AND un événement append-only de tentative invalide est journalisé
Couvre: ERR-82-03; INV-82-04, INV-82-12

TC-ERR-04 — Révocation après ACTIVATED

GIVEN une délégation en état ACTIVATED
WHEN P ou A soumet une révocation
THEN la révocation est refusée explicitement
  AND l'état reste ACTIVATED (terminal irréversible)
  AND l'événement de refus est journalisé
Couvre: ERR-82-04; INV-82-11, INV-82-12; CA-82-10

TC-ERR-05 — Signature invalide/non vérifiable

GIVEN une délégation en PENDING_BOTH
WHEN une validation est soumise avec signature invalide ou non vérifiable
THEN la validation est rejetée avec motif cryptographique explicite
  AND l'état reste inchangé
  AND l'échec est journalisé
Couvre: ERR-82-05; INV-82-09; CA-82-05

TC-ERR-06 — Identité non juridiquement qualifiable

GIVEN une délégation en PENDING_BOTH
WHEN une validation est soumise sans certificat/opposabilité juridique valable
THEN la validation est rejetée avec motif explicite d'identité non qualifiable
  AND l'état reste inchangé
  AND l'échec est journalisé
Couvre: ERR-82-06; INV-82-07, INV-82-10; CA-82-04

TC-ERR-07 — Parent tente de choisir l'autorité

GIVEN une délégation PRE mineur avec autorité déterminée par registre interne
WHEN le parent fournit/altère un identifiant d'autorité cible
THEN la demande est refusée avec motif métier explicite
  AND l'autorité utilisée reste celle du registre interne
  AND l'événement est journalisé
Couvre: ERR-82-07; INV-82-05, INV-82-07; CA-82-07

TC-ERR-08 — Tentative de modification/suppression append-only

GIVEN un journal contenant des événements PD-82
WHEN une opération de modification ou suppression historique est tentée
THEN l'opération est interdite
  AND aucune mutation historique n'est observée
  AND une alerte sécurité et un événement append-only sont enregistrés
Couvre: ERR-82-08; INV-82-12; CA-82-08


5. Tests d'invariants (non négociables)

INV TC dédié Observable vérifié
INV-82-01 TC-INV-01 (réf. TC-ERR-01) Aucun appel activatePRE tant que 2 validations distinctes valides absentes
INV-82-02 TC-INV-02 (réf. TC-ERR-02) Aucun auto-approve au timeout; refus explicite requis
INV-82-03 TC-INV-03 (réf. TC-ERR-02) À T0+7j+1s, état EXPIRED et plus aucune complétion possible
INV-82-04 TC-INV-04 (réf. TC-NOM-04) Révocation explicite pré-activation => REJECTED
INV-82-05 TC-INV-05 (réf. TC-ERR-01, TC-ERR-07) Plateforme et parent ne peuvent pas contourner la règle 2-of-2/registre
INV-82-06 TC-INV-06 (réf. TC-NOM-03) Validation contient timestamp probatoire vérifiable
INV-82-07 TC-INV-07 (réf. TC-NOM-03, TC-ERR-06) Validation liée à identité juridique explicite et vérifiable
INV-82-08 TC-INV-08 (réf. TC-NOM-01, TC-NOM-02) Parent→autorité et autorité→parent aboutissent pareil
INV-82-09 TC-INV-09 (réf. TC-ERR-05) Signature invalide rejetée systématiquement
INV-82-10 TC-INV-10 (réf. TC-ERR-06) Identité non opposable rejetée systématiquement
INV-82-11 TC-INV-11 (réf. TC-ERR-01, TC-ERR-04) Aucune activation clé PRE avant ACTIVATED; terminal irréversible
INV-82-12 TC-INV-12 (réf. TC-NOM-03, TC-ERR-08) Journal complet append-only, tentatives invalides tracées

6. Tests de non-régression

TEST ID Objectif de non-régression Précondition Observable attendu
TC-NR-01 Stabilité du flux N1 Build N et N+1 Même transitions et mêmes événements probatoires qu'en baseline
TC-NR-02 Stabilité du flux N2 Build N et N+1 Résultat ACTIVATED identique et même cardinalité d'événements
TC-NR-03 Révocation avant activation toujours bloquante Validation 1 présente REJECTED systématique, zéro activation
TC-NR-04 Fail-closed PRE Cas 0/1 validation Aucun appel activatePRE
TC-NR-05 TTL strict inchangé Horloge contrôlée EXPIRED au-delà de 7 jours exacts, jamais avant
TC-NR-06 Robustesse append-only Journal prérempli Aucune suppression/modification autorisée
TC-NR-07 Contrôle identité juridique Certificats variés Rejet systématique des identités non opposables
TC-NR-08 Contrôle signature crypto Signatures valides/invalides Acceptation uniquement des signatures vérifiables

7. Tests négatifs et adversariaux

TEST ID Entrée invalide / abus Résultat attendu Références
TC-NEG-01 Rejeu exact de la même validation signée (replay) Pas de double-compte validation, journalisation tentative INV-82-01, INV-82-12
TC-NEG-02 Validation avec horodatage altéré côté client Rejet ou neutralisation via source probatoire serveur INV-82-06, INV-82-09
TC-NEG-03 Collision d'identité (certificat expiré/usurpé) Rejet avec motif identité non opposable INV-82-10, ERR-82-06
TC-NEG-04 Tentative d'activation concurrente pendant transition Une seule décision atomique, pas d'état incohérent INV-82-01, INV-82-11
TC-NEG-05 Injection d'une autorité hors registre interne Rejet métier + trace de sécurité INV-82-05, ERR-82-07
TC-NEG-06 Suppression logique d'un événement via API admin Interdiction + alerte + historique intact INV-82-12, ERR-82-08
TC-NEG-07 Seconde validation à la frontière TTL (T0+7j exact) Acceptée si règle inclusive explicitement définie, sinon cas ambigu INV-82-03 (voir section 9)
TC-NEG-08 Révocation et seconde validation soumises quasi simultanément Résultat déterministe documenté (ordre causal auditable) INV-82-04, INV-82-12

8. Observabilité requise pour les tests

État système

  • État courant PD-82 (PENDING_BOTH, PENDING_AUTHORITY, PENDING_PARENT, ACTIVATED, REJECTED, EXPIRED)
  • Horodatage de transition et cause métier/technique

Réponse API / service

  • Code résultat déterministe (accepté/refusé)
  • Motif explicite de refus (TTL, signature, identité, autorité, terminalité)
  • Trace d'appel activatePRE(delegationId) (présence/absence, cardinalité)

Journal d'audit append-only

  • ID événement immuable, type événement, timestamp probatoire
  • Référence delegationId, acteur (parent/authority), identité opposable
  • Référence croisée des IDs de validations dans l'événement d'activation
  • Journalisation des tentatives invalides et alertes sécurité

Export probatoire

  • Export vérifiable par tiers
  • Reconstructibilité chronologique complète
  • Vérification indépendante des preuves (horodatage, signature, identité)

9. Règles non testables

Élément Statut Raison Impact
"Format probatoire RFC 3161 ou équivalent" (équivalent non défini) NON TESTABLE (partiel) Le terme "équivalent" n'a pas de critères d'acceptation normatifs explicites dans PD-82 Mineur — Impossible d'écrire un oracle binaire complet sans liste/critères d'équivalence
Frontière TTL à T0+7j (inclusif/exclusif non explicitement formalisé) NON TESTABLE (partiel) La spécification impose "au-delà de 7 jours" mais ne formalise pas explicitement le comportement au point exact de frontière Mineur — Risque d'interprétation divergente inter-implémentations

10. Verdict QA

⚠️ Partiellement testable

  • Couverture complète obtenue sur les 12 invariants, 10 critères d'acceptation et 8 cas d'erreur.
  • Deux points contractuels restent partiellement non testables sans précision normative supplémentaire:
  • Définition de "format probatoire équivalent" à RFC 3161.
  • Politique exacte de frontière TTL à T0+7j (inclusif/exclusif).
  • Hors ces ambiguïtés, les scénarios sont déterministes, reproductibles, vérifiables et automatisables.

Document généré le 2026-02-17 Workflow de gouvernance ProbatioVault