Aller au contenu

PD-237 - Scenarios de tests contractuels

1. References

  • Specification : PD-237-specification.md
  • Epic : PD-186 BACKEND CORE
  • Dependance normative : PD-54 - Construction d'Arbres de Merkle Periodiques
  • Pattern de reference : PD-236 - Recherche backend par tokens deterministes

2. Matrice de couverture

ID Invariant ID Critere ID Test Couverture Commentaire
INV-BE-01 CA-03 TC-INV-01 Oui Absence d'evenements en clair (stockage + flux)
INV-BE-02 CA-02 TC-INV-02 Oui Preuve restituee identique a celle persistee
INV-BE-03 - TC-INV-03 Oui Metadonnees immuables par tree_id
INV-BE-04 CA-04 TC-INV-04 Oui Rejet explicite en cas de mismatch metadonnees
INV-BE-05 CA-05 TC-INV-05 Oui Append-only (pas de suppression/modification)
- CA-01 TC-NOM-01 Oui Persistance payload complet et conforme
- CA-02 TC-NOM-02 Oui Recuperation preuve exacte
- CA-03 TC-NOM-05 Oui Inspection stockage (pas de clair)
- CA-04 TC-INV-04 Oui Rejet mismatch metadonnees
- CA-05 TC-NR-01 Oui Non-regression des arbres persistes
- CA-06 TC-NOM-04 Oui Recherche par feuille multi-arbres
- - TC-ERR-01..08 Oui Cas d'erreur contractuels

3. Scenarios de test - Flux nominaux (TC-NOM-01..XX)

TEST-ID: TC-NOM-01
Reference spec: §5.1, CA-01

GIVEN
  - Un arbre clos construit par PD-54
  - Un payload complet et conforme contenant:
    - merkle_root (format conforme a hash_algorithm_id)
    - leaves[] (hashes ordonnes, format conforme)
    - inclusion_proofs[] (une preuve par feuille)
    - batch_metadata complet (window_start, window_end, window_timezone,
      hash_algorithm_id, hash_algorithm_version, canonicalization_id,
      leaf_ordering_id)
WHEN
  - La persistance est demandee
THEN
  - Le backend persiste la racine, les feuilles, les preuves et les metadonnees
AND
  - Le backend retourne tree_id et created_at
AND
  - Les preuves d'inclusion sont coherentes avec merkle_root (validation deterministe)
AND
  - Aucune donnee en clair n'est persistee
TEST-ID: TC-NOM-02
Reference spec: §5.2, CA-02

GIVEN
  - Un arbre persiste (tree_id connu)
  - Une feuille leaf appartenant a cet arbre
WHEN
  - Une requete de recuperation de preuve est effectuee avec (leaf, tree_id)
THEN
  - La preuve retournee est strictement identique a la preuve persistee
AND
  - merkle_root, batch_metadata et leaf_index correspondent aux donnees persistees
TEST-ID: TC-NOM-03
Reference spec: §5.3

GIVEN
  - Un arbre persiste (tree_id connu)
WHEN
  - Une requete de recuperation d'arbre complet est effectuee avec tree_id
THEN
  - Le backend retourne l'ensemble des donnees persistees
AND
  - merkle_root, leaves[], inclusion_proofs[] et batch_metadata sont identiques
TEST-ID: TC-NOM-04
Reference spec: §5.2, CA-06

GIVEN
  - Deux arbres T1 et T2 persistes avec une feuille commune leaf_X
  - Aucun tree_id fourni dans la requete
WHEN
  - Une requete de recuperation par feuille est effectuee avec leaf_X
THEN
  - Le backend retourne tous les arbres contenant leaf_X
AND
  - L'ensemble des tree_id retournes est exactement {T1, T2}
AND
  - L'ordre de retour est deterministe (tree_id croissant)
AND
  - Pour chaque arbre retourne, merkle_root, inclusion_proof et batch_metadata
    correspondent aux donnees persistees
TEST-ID: TC-NOM-05
Reference spec: CA-03

GIVEN
  - Un arbre persiste
WHEN
  - Une inspection probatoire des donnees persistees et des flux API est effectuee
THEN
  - Aucun evenement en clair n'est observe
AND
  - Seuls des hashes, racines et metadonnees sont presents

4. Scenarios de test - Cas d'erreur (TC-ERR-01..08)

TEST-ID: TC-ERR-01
Reference spec: ERR-MK-01

GIVEN
  - Un payload de persistance sans merkle_root
WHEN
  - La persistance est demandee
THEN
  - Le backend rejette explicitement (ERR-MK-01)
AND
  - HTTP 400 avec body contenant code ERR-MK-01 et message non vide
AND
  - Aucune donnee n'est persistee ni recuperable via l'API
TEST-ID: TC-ERR-02
Reference spec: ERR-MK-02

GIVEN
  - Un payload contenant un hash non conforme a hash_algorithm_id
    (ex: merkle_root non hexadecimal 64 caracteres pour SHA-256)
WHEN
  - La persistance est demandee
THEN
  - Le backend rejette explicitement (ERR-MK-02)
AND
  - HTTP 400 avec body contenant code ERR-MK-02 et message non vide
AND
  - Aucune donnee n'est persistee ni recuperable via l'API
TEST-ID: TC-ERR-08
Reference spec: ERR-MK-02

GIVEN
  - Un payload contenant un hash en hex uppercase (ex: merkle_root avec A-F)
WHEN
  - La persistance est demandee
THEN
  - Le backend rejette explicitement (ERR-MK-02)
AND
  - HTTP 400 avec body contenant code ERR-MK-02 et message non vide
AND
  - Aucune donnee n'est persistee ni recuperable via l'API
TEST-ID: TC-ERR-03
Reference spec: ERR-MK-03

GIVEN
  - Un payload avec batch_metadata absent ou incomplet
WHEN
  - La persistance est demandee
THEN
  - Le backend rejette explicitement (ERR-MK-03)
AND
  - HTTP 400 avec body contenant code ERR-MK-03 et message non vide
AND
  - Aucune donnee n'est persistee ni recuperable via l'API
TEST-ID: TC-ERR-04
Reference spec: ERR-MK-04

GIVEN
  - Un payload ou inclusion_proofs[].length != leaves[].length
  - OU une inclusion_proof invalide ne permettant pas de reconstruire merkle_root
WHEN
  - La persistance est demandee
THEN
  - Le backend rejette explicitement (ERR-MK-04)
AND
  - HTTP 400 avec body contenant code ERR-MK-04 et message non vide
AND
  - Aucune donnee n'est persistee ni recuperable via l'API
TEST-ID: TC-ERR-05
Reference spec: ERR-MK-05

GIVEN
  - Un tree_id inexistant
WHEN
  - Une recuperation d'arbre complet est demandee avec ce tree_id
THEN
  - Le backend rejette explicitement (ERR-MK-05 / 404)
AND
  - HTTP 404 avec body contenant code ERR-MK-05 et message non vide
AND
  - Aucune donnee n'est modifiee
TEST-ID: TC-ERR-06
Reference spec: ERR-MK-06

GIVEN
  - Une feuille leaf_inconnue absente des arbres persistes
WHEN
  - Une recuperation de preuve est demandee pour leaf_inconnue
THEN
  - Le backend rejette explicitement (ERR-MK-06 / 404)
AND
  - HTTP 404 avec body contenant code ERR-MK-06 et message non vide
AND
  - Aucune donnee n'est modifiee
TEST-ID: TC-ERR-07
Reference spec: ERR-MK-07

GIVEN
  - Un arbre T1 deja persiste
  - Un payload de persistance contenant tree_id fourni par l'appelant (tree_id de T1)
  - Des donnees differentes (merkle_root/proofs/metadata) par rapport a T1
WHEN
  - La persistance est demandee avec ce payload
THEN
  - Le backend rejette explicitement (ERR-MK-07)
AND
  - HTTP 403 avec body contenant code ERR-MK-07 et message non vide
AND
  - Un evenement d'audit est emis
AND
  - Aucune donnee n'est modifiee ni recuperable via l'API

5. Tests d'invariants (TC-INV-01..05)

Invariant Test(s) dedies Observable Commentaire
INV-BE-01 TC-INV-01 Inspection stockage + flux API Aucun evenement en clair
INV-BE-02 TC-INV-02 Comparaison byte-to-byte Preuve identique
INV-BE-03 TC-INV-03 Metadonnees persistees Immutabilite batch_metadata
INV-BE-04 TC-INV-04 Rejet explicite Mismatch metadonnees
INV-BE-05 TC-INV-05 Rejet explicite + audit Append-only
TEST-ID: TC-INV-01
Reference spec: INV-BE-01

GIVEN
  - Un arbre persiste
WHEN
  - Les donnees persistees et les payloads API sont inspectes
THEN
  - Aucun evenement en clair n'est trouve
AND
  - Seuls des hashes, racines et metadonnees sont observes
TEST-ID: TC-INV-02
Reference spec: INV-BE-02

GIVEN
  - Un arbre persiste et une feuille leaf
WHEN
  - Une recuperation de preuve est effectuee pour leaf
THEN
  - La preuve retournee est strictement identique a la preuve persistee
AND
  - Aucune normalisation ou transformation n'est observee
TEST-ID: TC-INV-03
Reference spec: INV-BE-03

GIVEN
  - Un arbre T1 persiste avec batch_metadata M1
WHEN
  - Une tentative est faite de persister T1 avec batch_metadata M2 != M1
THEN
  - La requete est rejetee explicitement (ERR-MK-07)
AND
  - La recuperation de T1 retourne toujours M1
TEST-ID: TC-INV-04
Reference spec: INV-BE-04

GIVEN
  - Un arbre T1 persiste avec batch_metadata M1
  - Une requete de persistance pour T1 avec batch_metadata M2 != M1
WHEN
  - La requete est soumise
THEN
  - Le backend rejette explicitement la requete (ERR-MK-07)
AND
  - Aucune donnee n'est modifiee
TEST-ID: TC-INV-05
Reference spec: INV-BE-05

GIVEN
  - Un arbre T1 persiste
WHEN
  - Une tentative de suppression ou d'ecrasement de T1 est effectuee
THEN
  - Le backend rejette explicitement (ERR-MK-07)
AND
  - Un evenement d'audit est emis
AND
  - T1 reste inchange

6. Tests de non-regression (TC-NR-01..XX)

Test ID Objet Observable Commentaire
TC-NR-01 Ajout d'un arbre n'altere pas les arbres existants Recuperation identique avant/apres Append-only
TC-NR-02 Recherche par feuille stable apres ajout d'autres arbres Resultats identiques avant/apres CA-06
TEST-ID: TC-NR-01
Reference spec: CA-05

GIVEN
  - Un arbre T1 persiste et une preuve P1 connue
WHEN
  - Un nouvel arbre T2 est persiste
THEN
  - La recuperation de P1 pour T1 retourne toujours les memes donnees
TEST-ID: TC-NR-02
Reference spec: CA-06

GIVEN
  - Un arbre T1 persiste contenant leaf_X
WHEN
  - Un arbre T2 sans leaf_X est persiste
  - Une recherche par leaf_X est effectuee
THEN
  - Le resultat retourne correspond toujours a T1 uniquement

7. Tests negatifs et adversariaux (TC-NEG-01..XX)

Test ID Entree invalide / abus Resultat attendu Observable
TC-NEG-01 Rejeu d'une persistance avec tree_id fourni par l'appelant Rejet + audit ERR-MK-07
TC-NEG-02 Tentative de modification des preuves avec tree_id fourni par l'appelant Rejet explicite ERR-MK-07
TEST-ID: TC-NEG-01
Reference spec: ERR-MK-07

GIVEN
  - Un arbre T1 persiste
WHEN
  - Une persistance est rejouee en fournissant le tree_id de T1
  - Les donnees soumises different de celles de T1
THEN
  - Rejet explicite (ERR-MK-07)
AND
  - Evenement d'audit emis
AND
  - Aucun effet de bord
TEST-ID: TC-NEG-02
Reference spec: ERR-MK-07

GIVEN
  - Un arbre T1 persiste
WHEN
  - Une tentative de modification des inclusion_proofs de T1 est soumise avec tree_id fourni par l'appelant
THEN
  - Rejet explicite (ERR-MK-07)
AND
  - Aucun effet de bord

8. Observabilite requise pour les tests

  • Reponses d'API incluant ERR-MK-xx et raison contractuelle.
  • Statuts HTTP et body contenant code + message non vide.
  • Acces aux donnees persistees (merkle_root, leaves[], inclusion_proofs[], batch_metadata).
  • Capacite de recuperer un arbre complet par tree_id.
  • Capacite de recuperer une preuve par leaf (+ tree_id optionnel).
  • Journal d'audit pour ERR-MK-07.
  • Possibilite de comparer byte-to-byte les hashes et preuves retournes.
  • Capacite de verifier qu'aucune donnee associee a un payload rejete n'est recuperable via l'API.
  • Format de inclusion_proof observable : array ordonne de hashes (hex lowercase) du niveau feuille vers racine.

9. Regles non testables

Regle / Point Raison Impact
Neant Tous les points du present document sont testables -

10. Verdict QA

Testable

  • Tous les invariants INV-BE-01..05 et criteres CA-01..06 sont testables avec les scenarios definis.
  • Aucune regle non testable n'est identifiee dans ce document.