Aller au contenu

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_state pré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-op avec 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 mode reject_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_id nul 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_forever jusqu'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_DUP dé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

  1. Priorité d'automatisation CI: T55-02/03/05/08/09/11/15/16/17 (forte valeur anti-régression)

  2. Oracles de test stables:

  3. Racines attendues pré-calculées
  4. États finaux autorisés (enum stricte)
  5. Codes d'erreurs normalisés

  6. Fault injection: Isoler les fautes via injection contrôlée (DB, blockchain, module racine) pour couvrir ERR-55-02..09 de façon reproductible

  7. Rapport de couverture: À chaque release, prouver que chaque INV/CA reste couvert

  8. 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