Aller au contenu

PD-236 — Scénarios de tests contractuels

1. Références

  • Spécification : PD-236-specification.md
  • Epic : EPIC-186 (PD-186 BACKEND CORE)
  • Dépendance normative : PD-42 (référencée par PD-236)

2. Matrice de couverture

ID Invariant ID Critère ID Test Couverture Commentaire
INV-01 CA-03 TC-INV-01 Oui Absence de keywords en clair (stockage & flux)
INV-02 CA-02 TC-INV-02 Oui Recherche par égalité stricte T_kw
INV-03 CA-01 TC-INV-03 Oui Homogénéité stricte des métadonnées par index
INV-04 CA-04 TC-INV-04 Oui Rejet explicite en cas de mismatch métadonnées
INV-05 TC-INV-05 Partiel Neutralité sémantique (voir NON TESTABLE)
CA-01 TC-NOM-01 Oui Indexation avec T_kw valide
CA-02 TC-NOM-02 Oui Recherche retourne l’ensemble exact
CA-03 TC-NOM-03 Oui Inspection persistance (pas de clair)
CA-04 TC-ERR-03 Oui Métadonnées absentes/incomplètes
CA-05 TC-NR-01 Oui Non-régression index existants
TC-ERR-01..05 Oui Cas d’erreur contractuels

3. Scénarios de test – Flux nominaux

TEST-ID: TC-NOM-01
Référence spec: §5.0, §5.1, CA-01, INV-03

GIVEN
  - Un index backend cible I (index_id) dont les métadonnées de référence M_I sont fixées selon §5.0
  - Un lot de N entrées { (T_kw_i, resource_id_i) } avec métadonnées PD-42 complètes et identiques à M_I
  - Chaque T_kw_i respecte le format défini par PD-42 pour l’algorithm_id déclaré (cf. ERR-BE-02)
WHEN
  - Une requête d’indexation est soumise au backend pour I
THEN
  - Le backend persiste N associations entre T_kw_i et resource_id_i
AND
  - Le backend persiste les métadonnées PD-42 associées à I (si applicable) sans divergence
AND
  - Aucun champ de type keyword en clair n’est présent dans les données persistées liées à ces entrées
TEST-ID: TC-NOM-02
Référence spec: §5.2, CA-02, INV-02

GIVEN
  - Un index backend I déjà alimenté par un ensemble connu d’associations (T_kw, resource_id) et associé à M_I
  - Une requête de recherche contenant (T_kw_q, métadonnées PD-42)
  - Les métadonnées PD-42 de la requête sont strictement identiques à M_I
WHEN
  - La recherche est exécutée
THEN
  - Le backend retourne exactement l’ensemble des resource_id associés à T_kw_q
AND
  - Aucun resource_id non associé à T_kw_q n’est retourné
AND
  - L’ordre de retour n’est pas contractuel (comparaison ensembliste)
TEST-ID: TC-NOM-03
Référence spec: CA-03, INV-01

GIVEN
  - Un index backend I alimenté
WHEN
  - Un audit / inspection probatoire des données persistées et des charges utiles d’API est effectué
THEN
  - Aucun keyword en clair n’est stocké
AND
  - Aucun keyword en clair n’apparaît dans les requêtes/réponses de l’API backend pour les opérations de PD-236
TEST-ID: TC-NOM-04
Référence spec: §5.0, §5.2, INV-03

GIVEN
  - Un index backend I avec métadonnées attendues M_I fixées selon §5.0
  - Deux requêtes de recherche Q1 et Q2 ayant le même T_kw_q mais des métadonnées différentes
    - Q1 avec M_I
    - Q2 avec M_≠I (diffère sur au moins un champ parmi algorithm_id/canonicalization_id/k_search_scope)
WHEN
  - Q1 est exécutée puis Q2 est exécutée
THEN
  - Q1 retourne l’ensemble attendu de resource_id
AND
  - Q2 est rejetée explicitement (voir TC-INV-04)

4. Scénarios de test – Cas d’erreur

TEST-ID: TC-ERR-01
Référence spec: ERR-BE-01

GIVEN
  - Une requête (indexation ou recherche) sans champ T_kw
WHEN
  - La requête est soumise
THEN
  - Le backend rejette explicitement la requête
AND
  - Aucune donnée n’est persistée ni modifiée
TEST-ID: TC-ERR-02
Référence spec: ERR-BE-02

GIVEN
  - Une requête contenant un T_kw ne respectant pas le format défini par PD-42 pour l’algorithm_id déclaré (ex: Base64 URL-safe sans padding, longueur 22 pour DET-HMAC-SHA256-B64T22-V1)
WHEN
  - La requête est soumise
THEN
  - Le backend rejette explicitement
AND
  - Aucune donnée n’est persistée ni modifiée
TEST-ID: TC-ERR-03
Référence spec: ERR-BE-03

GIVEN
  - Une requête d’indexation ou de recherche contenant un T_kw mais des métadonnées PD-42 absentes ou incomplètes
WHEN
  - La requête est soumise
THEN
  - Le backend rejette explicitement
AND
  - Aucune donnée n’est persistée ni modifiée
TEST-ID: TC-ERR-04
Référence spec: ERR-BE-04, INV-04, CA-04

GIVEN
  - Un index backend I associé à des métadonnées attendues M_I
  - Une requête contenant (T_kw, M_req) telle que M_req ≠ M_I
WHEN
  - La requête est soumise
THEN
  - Le backend rejette explicitement
AND
  - La réponse inclut un signalement explicite du mismatch (code/raison contractuelle)
AND
  - Aucune donnée n’est persistée ni modifiée
TEST-ID: TC-ERR-05
Référence spec: ERR-BE-05, INV-01

GIVEN
  - Une requête d’indexation contenant un champ supplémentaire ou une charge utile contenant un keyword en clair (champ explicitement qualifié de keyword dans le contrat d’API)
WHEN
  - La requête est soumise
THEN
  - Le backend rejette explicitement
AND
  - Un événement d’audit est émis/enregistré (cf. Observabilité)
AND
  - Aucune donnée n’est persistée ni modifiée

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

Invariant Test(s) dédiés Observable Commentaire
INV-01 TC-INV-01 Inspection stockage + payloads API Inclut détection d’injection clair
INV-02 TC-INV-02 Résultat d’ensemble exact Égalité stricte uniquement
INV-03 TC-INV-03 Cohérence métadonnées sur index Index homogène
INV-04 TC-INV-04 Rejet explicite mismatch Erreur + absence d’effets
INV-05 TC-INV-05 NON TESTABLE (voir §9) Neutralité sémantique
TEST-ID: TC-INV-01
Référence spec: INV-01

GIVEN
  - Un ensemble d’opérations d’indexation et de recherche sur I
WHEN
  - Les données persistées et les échanges (requêtes/réponses) sont inspectés
THEN
  - Aucun keyword en clair n’est trouvé
AND
  - Toute tentative de transmission d’un keyword en clair déclenche ERR-BE-05 (voir TC-ERR-05)
TEST-ID: TC-INV-02
Référence spec: INV-02

GIVEN
  - Deux tokens distincts T1 et T2
  - Un index I contenant des associations pour T1 et aucune pour T2
WHEN
  - Une recherche est exécutée avec T1 puis avec T2
THEN
  - Les résultats de T1 correspondent exactement aux associations persistées
AND
  - Les résultats de T2 sont vides (ou "aucun résultat")
AND
  - Aucun mécanisme de recherche partielle/similarité n’affecte le résultat (absence de résultats non exacts)
TEST-ID: TC-INV-03
Référence spec: INV-03

GIVEN
  - Un index I avec métadonnées attendues M_I fixées selon §5.0
  - Un lot d’indexation L contenant des métadonnées M_L
WHEN
  - L est soumis au backend
THEN
  - L est accepté si et seulement si M_L == M_I
AND
  - Toute tentative d’introduire une seconde configuration de métadonnées pour I est rejetée (voir TC-INV-04)
TEST-ID: TC-INV-04
Référence spec: INV-04

GIVEN
  - Un index I avec métadonnées attendues M_I
  - Une requête (indexation ou recherche) utilisant M_req != M_I
WHEN
  - La requête est soumise
THEN
  - Le backend rejette explicitement la requête
AND
  - Aucune modification d’état n’est observée
TEST-ID: TC-INV-05
Référence spec: INV-05

STATUT: NON TESTABLE
Justification:
  - "Ne déduire aucune information sémantique" n’a pas d’observable contractuel : l’absence d’inférence ne peut pas être prouvée par des tests boîte noire.
  - Seuls des éléments indirects (absence de champs sémantiques, absence de logs contenant du clair) sont vérifiables et couverts par INV-01.

6. Tests de non-régression

Test ID Objet Observable Commentaire
TC-NR-01 Ajout de ressources n’altère pas l’index existant Résultats identiques avant/après CA-05
TC-NR-02 Ajout de nouveaux tokens n’altère pas les tokens existants Résultats existants inchangés Non-interférence
TEST-ID: TC-NR-01
Référence spec: CA-05

GIVEN
  - Un index I avec un état initial S0
  - Un ensemble de requêtes de recherche Q couvrant plusieurs T_kw existants
WHEN
  - De nouvelles associations (T_kw_new, resource_id_new) sont indexées
THEN
  - Pour tout T_kw existant dans Q, les résultats de recherche restent identiques entre S0 et S1
TEST-ID: TC-NR-02
Référence spec: CA-05

GIVEN
  - Un index I alimenté avec des tokens existants
  - Un ensemble de requêtes Q_exist
WHEN
  - Un nouveau token T_kw_new est introduit avec des associations
THEN
  - Les résultats des requêtes Q_exist ne changent pas

7. Tests négatifs et adversariaux

Test ID Entrée invalide / abus Résultat attendu Observable
TC-NEG-01 Requête de recherche sans métadonnées Rejet ERR-BE-03
TC-NEG-02 Tentative de mismatch de scope (k_search_scope) Rejet ERR-BE-04
TC-NEG-03 Tentative d’injection de keyword en clair dans un champ inattendu Rejet + audit ERR-BE-05
TEST-ID: TC-NEG-01
Référence spec: ERR-BE-03

GIVEN
  - Une requête de recherche contenant T_kw mais sans métadonnées PD-42
WHEN
  - La requête est soumise
THEN
  - Rejet explicite
AND
  - Aucun effet de bord
TEST-ID: TC-NEG-02
Référence spec: ERR-BE-04

GIVEN
  - Un index I dont k_search_scope attendu est S
  - Une requête de recherche utilisant k_search_scope S' ≠ S
WHEN
  - La requête est soumise
THEN
  - Rejet explicite (mismatch)
AND
  - Aucun effet de bord
TEST-ID: TC-NEG-03
Référence spec: ERR-BE-05

GIVEN
  - Une requête d’indexation contenant un champ non prévu incluant un keyword en clair
WHEN
  - La requête est soumise
THEN
  - Rejet explicite
AND
  - Trace d’audit enregistrée/émise

8. Observabilité requise pour les tests

  • Réponses d’API : statut de succès/échec, codes d’erreur contractuels (ERR-BE-01..05), raison de rejet.
  • État système : présence des associations (T_kw, resource_id) et absence de champs "keyword" en clair.
  • Journal d’audit : enregistrement/émission d’un événement en cas de tentative d’injection de keyword en clair (ERR-BE-05).
  • Capacité d’inspection probatoire : export ou lecture contrôlée des données persistées pertinentes à l’index.

9. Règles non testables

Règle Raison Impact
INV-05 « Le backend ne déduit aucune information sémantique à partir de T_kw » Non démontrable par tests boîte noire ; absence d’inférence interne non observable Majeur (doit rester un principe, non une preuve)

10. Verdict QA

Testable partiellement (avec réserves listées)

  • Tous les invariants INV-01..INV-04 et critères CA-01..CA-05 sont testables via des scénarios déterministes.
  • INV-05 est NON TESTABLE en boîte noire ; seules des garanties indirectes (absence de clair) sont vérifiables via INV-01.