PD-55 — Tests & Validation¶
Hypothèses de test (pour garantir déterminisme/reproductibilité)¶
- Environnement figé: horloge contrôlée (NTP stable ou time-freeze), seed de données fixe, version worker/tag blockchain client figés.
- Jeu de données de référence:
E1..E6événements éligibles (payload métier connu, IDs stables, timestamps maîtrisés).E_DUPévénement déjà rattaché à un lot finalisé.- Entrées invalides prédéfinies (format ID, timestamp, hash, tx_id).
- Réseau blockchain de test (ou simulateur) avec modes forcés: succès, rejet tx, timeout finalité, indisponibilité.
- Vérifications reposant sur preuves persistées: DB lots/événements, logs horodatés corrélés (
correlation_id), trace on-chain (tx/payload).
1. Matrice de couverture INV → Tests¶
| Invariant | Tests couverts |
|---|---|
| INV-55-01 | T55-02, T55-15 |
| INV-55-02 | T55-02, T55-08 |
| INV-55-03 | T55-02, T55-10 |
| INV-55-04 | T55-16 |
| INV-55-05 | T55-03 |
| INV-55-06 | T55-05, T55-13, T55-18 |
| INV-55-07 | T55-09 |
| INV-55-08 | T55-10 |
| INV-55-09 | T55-11 |
| INV-55-10 | T55-17 |
| INV-55-11 | T55-04 |
| INV-55-12 | T55-14 |
2. Matrice de couverture CA → Tests¶
| Critère | Tests couverts |
|---|---|
| CA-55-01 | T55-01 |
| CA-55-02 | T55-02 |
| CA-55-03 | T55-15 |
| CA-55-04 | T55-02 |
| CA-55-05 | T55-03 |
| CA-55-06 | T55-05 |
| CA-55-07 | T55-04 |
| CA-55-08 | T55-10 |
| CA-55-09 | T55-08 |
| CA-55-10 | T55-09 |
| CA-55-11 | T55-11 |
| CA-55-12 | T55-14 |
3. Scénarios de test de référence¶
3.1. Tests nominaux (Happy Path)¶
T55-01 — Déclenchement périodique 10 min¶
- Couvre: CA-55-01
- Préconditions: scheduler actif, aucune dérive horloge.
- Étapes: lancer worker sur 3 fenêtres successives contrôlées.
- Attendus: 1 cycle par fenêtre (tolérance définie), timestamps cohérents, logs de début/fin corrélés.
T55-02 — Ancrage nominal d'un lot¶
- Couvre: INV-55-01/02/03, CA-55-02/04
- Préconditions:
E1..E3éligibles et non ancrés. - Étapes: exécuter cycle complet jusqu'à finalité.
- Attendus:
- Un seul lot finalisé contenant
E1..E3 - Chaque événement rattaché à un unique lot
- Champs
lot_id,root,tx_id,anchored_at,finality_stateprésents - Payload on-chain = empreinte uniquement
T55-03 — Déterminisme racine¶
- Couvre: INV-55-05, CA-55-05
- Préconditions: lot ordonné figé (
E1,E2,E3). - Étapes: recalculer 2 fois la racine via deux exécutions indépendantes.
- Attendus: même valeur binaire/hex stricte sur les deux calculs.
T55-04 — No-op audité sans événements¶
- Couvre: INV-55-11, CA-55-07, ERR-55-01
- Préconditions: fenêtre sans événement éligible.
- Étapes: exécuter cycle.
- Attendus:
- Aucun lot finalisé créé
- Enregistrement explicite
no-opavec fenêtre couverte, horodatage,correlation_id
3.2. Tests d'erreur (Error Path)¶
T55-05 — Rejet transaction on-chain¶
- Couvre: INV-55-06, CA-55-06, ERR-55-03
- Préconditions:
E1,E2éligibles; simulateur en modereject_tx. - Étapes: exécuter cycle puis revenir en mode normal et relancer.
- Attendus:
- Après rejet, lot en échec/non finalisé
- Événements restent non ancrés et rééligibles
- Au cycle suivant, ancrage réussi sans perte
T55-06 — tx_id invalide/absent¶
- Couvre: ERR-55-04
- Préconditions: publication simulée retourne
tx_idnul ou malformé. - Étapes: exécuter finalisation.
- Attendus:
- Finalisation refusée
- État lot non finalisable
- Journal d'erreur explicite
T55-07 — Finalité non atteinte avant timeout¶
- Couvre: ERR-55-05
- Préconditions: blockchain en mode
pending_foreverjusqu'au timeout. - Étapes: exécuter cycle, attendre timeout, relancer contrôle finalité.
- Attendus: lot en état intermédiaire (
submitted/pending), pas de marquage finalisé prématuré.
T55-08 — Tentative de double rattachement¶
- Couvre: INV-55-02, CA-55-09, ERR-55-06
- Préconditions:
E_DUPdéjà lié à lot finalisé. - Étapes: forcer nouvelle tentative d'inclusion de
E_DUP. - Attendus:
- Rejet explicite
- Aucun second rattachement
- Trace d'audit de refus
T55-09 — Écart de fenêtre temporelle¶
- Couvre: INV-55-07, CA-55-10, ERR-55-08
- Préconditions: config fenêtre volontairement décalée (gap simulé).
- Étapes: exécuter deux cycles successifs.
- Attendus:
- Détection du trou de couverture + alerte critique
- Absence de trou non signalé
T55-11 — Validation stricte des entrées¶
- Couvre: INV-55-09, CA-55-11, ERR-55-10
- Préconditions: corpus d'entrées invalides (formats ID/hash/date/tx).
- Étapes: soumettre chaque entrée au worker/API d'ingestion.
- Attendus:
- Rejet systématique avant traitement métier
- Code d'erreur explicite
- Aucune mutation d'état
T55-12 — Échec calcul racine¶
- Couvre: ERR-55-02
- Préconditions: injecter faute dans module hash/merkle.
- Étapes: lancer cycle puis corriger faute et relancer.
- Attendus:
- Lot non finalisé lors de l'échec
- Ré-exécution possible et réussie ensuite
T55-13 — Échec de persistance¶
- Couvre: INV-55-06, ERR-55-09
- Préconditions: panne DB simulée entre soumission et finalisation.
- Étapes: exécuter cycle.
- Attendus:
- Aucune finalisation partielle (atomicité)
- Pas d'événements "perdus"
- Reprise cohérente après restauration DB
3.3. Tests de robustesse¶
T55-14 — Indisponibilité blockchain prolongée + procédure continuité¶
- Couvre: INV-55-12, CA-55-12, ERR-55-07
- Préconditions: blockchain indisponible sur plusieurs fenêtres, runbook continuité disponible.
- Étapes:
- Exécuter N cycles
- Observer accumulation
- Appliquer procédure de continuité (mode dégradé/reprise)
- Restaurer chaîne
- Attendus:
- Accumulation contrôlée (pas de perte)
- Procédure documentée exécutable
- Reprise avec vidage progressif
T55-18 — Reprise après échec partiel/restart worker¶
- Couvre: INV-55-06
- Préconditions: interrompre worker en milieu de cycle.
- Étapes: redémarrer worker, relancer cycle.
- Attendus:
- Aucun événement éligible perdu
- Idempotence de reprise
- État final cohérent
3.4. Tests de sécurité¶
T55-10 — Preuve externe depuis tx_id (Traçabilité inverse)¶
- Couvre: INV-55-03/08, CA-55-08
- Préconditions: lot finalisé connu avec
tx_id. - Étapes: depuis un client externe (sans accès DB interne), récupérer preuve + liste événements couverts.
- Attendus:
- Vérification de preuve réussie
- Reconstruction complète des événements couverts par le lot
T55-15 — Vérification absence de contenu métier on-chain¶
- Couvre: INV-55-01, CA-55-03
- Préconditions: payload métier contenant marqueurs reconnaissables.
- Étapes: inspecter transaction publiée (input/event logs/data field).
- Attendus:
- Aucun fragment en clair détectable
- Uniquement hash/empreinte/metadata technique autorisée
T55-16 — Immutabilité lot finalisé (append-only)¶
- Couvre: INV-55-04
- Préconditions: lot finalisé existant.
- Étapes: tenter UPDATE/DELETE d'événement du lot via API/DB contrôlée.
- Attendus:
- Opération refusée (contrainte métier/technique)
- Historique append-only conservé
T55-17 — Journalisation horodatée corrélable des transitions¶
- Couvre: INV-55-10
- Préconditions: pipeline log actif.
- Étapes: exécuter un cycle nominal + un cycle en erreur.
- Attendus:
- Chaque transition d'état trace
timestamp + from_state + to_state + correlation_id + actor/component - Séquence reconstituable de bout en bout
4. Tests non automatisables (procédures manuelles)¶
| Test | Description | Fréquence suggérée |
|---|---|---|
| Exercice de crise continuité | Table-top multi-équipes lié à T55-14: validation humaine du runbook, rôles, escalade, SLA | Annuel |
| Revue de conformité/audit externe | Vérification indépendance réelle d'accès liée à T55-10 | Semestriel |
| Vérification documentaire | Gouvernance, versioning runbook, RACI, critères d'activation mode dégradé | À chaque release |
| Test de lisibilité opérationnelle | Alertes critiques (NOC/SRE), qualité des messages et actionnabilité | Trimestriel |
5. Remarques et points d'attention¶
-
Priorité d'automatisation CI: T55-02/03/05/08/09/11/15/16/17 (forte valeur anti-régression)
-
Oracles de test stables:
- Racines attendues pré-calculées
- États finaux autorisés (enum stricte)
-
Codes d'erreurs normalisés
-
Fault injection: Isoler les fautes via injection contrôlée (DB, blockchain, module racine) pour couvrir ERR-55-02..09 de façon reproductible
-
Rapport de couverture: À chaque release, prouver que chaque INV/CA reste couvert
-
Artefacts de preuve: Conserver logs, snapshots DB, traces tx pour auditabilité et investigations post-incident
Références¶
- Spécification : PD-55-specification.md
- Epic : PD-187 (BLOCKCHAIN)
- JIRA : PD-55