Le TCK officiel MicroProfile Fault Tolerance 4.1 valide qu’une implémentation respecte les sémantiques §2.5 (composition), §4 (Retry), §5 (CircuitBreaker), §6 (Asynchronous), §7 (Timeout), §8 (Fallback), §9 (Bulkhead), §10 (Metrics) et §11 (OpenTelemetry) sur un ensemble d’applications de référence. Heisenberg le passe à 463 / 463 sur la version 4.1 (mai 2026).

Statut

Métrique Valeur

Tests exécutés

463

Réussis

463 ✅

Échoués

0

Erreurs

0

Ignorés

0

Dernier run reproductible : 2026-05-28T09:05:59Z, via ./run-official-tck-mp-fault-tolerance-4.1.sh all. Tout écart ultérieur est journalisé dans TCK.md du dépôt avec : nom de test, motif, plan de correction.

Prérequis

L’artefact org.eclipse.microprofile.fault-tolerance:microprofile-fault-tolerance-tck:4.1 doit être disponible sur Maven Central ou installé manuellement dans le M2 local. Procédure détaillée dans heisenberg-tck/README.md.

sdk env                              # Java 25 + Maven 3.9.16
./mvnw -ntp install -DskipTests     # installe heisenberg-api, heisenberg-core, heisenberg-cdi-vauban

Exécution du runner principal

Le script run-official-tck-mp-fault-tolerance-4.1.sh à la racine du dépôt orchestre toutes les variantes.

# Smoke test — un test rapide hors Arquillian pour valider l'installation
./run-official-tck-mp-fault-tolerance-4.1.sh

# Suite complète — équivalent du TCK officiel à 463 tests
./run-official-tck-mp-fault-tolerance-4.1.sh all

# Test ciblé via -Dtest=
./run-official-tck-mp-fault-tolerance-4.1.sh -Dtest=RetryTest
./run-official-tck-mp-fault-tolerance-4.1.sh -Dtest=CircuitBreakerTest#testCircuitClosesAfterDelay

Le runner exécute Arquillian + TestNG. Le rapport Surefire atterrit dans heisenberg-tck/target/surefire-reports/, et un résumé tck-report.txt est généré par le script avec le nombre de tests PASS / FAIL / ERROR / SKIP.

Mode no-observability

Le script run-tck-no-observability.sh est un wrapper du runner principal qui exclut tous les tests dépendant de MP Metrics §9 et de OpenTelemetry §10 :

# Smoke test sans observabilité
./run-tck-no-observability.sh

# Suite complète sans observabilité
./run-tck-no-observability.sh all

# Test ciblé sans observabilité
./run-tck-no-observability.sh -Dtest=RetryTest

Pourquoi ce mode existe : il valide que la tolérance aux pannes fonctionne même quand aucune dépendance d’observabilité n’est présente au classpath. Heisenberg déclare OpenTelemetry en requires static (Java module statique) ; si OTel est absent, CDI ignore silencieusement OtelFtMetricsRecorder, et le NoopFtMetricsRecorder est utilisé. Ce mode prouve que cette absence n’affecte pas les politiques Retry, Timeout, CircuitBreaker, Bulkhead, Fallback, Asynchronous.

Exclusions appliquées par le wrapper :

**/metric/**, **/metrics/**, **/*Metric*Test.class,
**/telemetry/**, **/*Telemetry*Test.class,
**/opentelemetry/**, **/*OpenTelemetry*Test.class

Si -Dsurefire.excludes=…​ est déjà fourni en ligne de commande, les exclusions sont fusionnées.

Architecture du runner

heisenberg-tck est volontairement hors reactor : son pom.xml est en modelVersion 4.0.0 standalone, sans <parent>.

Ce détachement est imposé par ShrinkWrap Maven Resolver 3.3 transitif au TCK officiel, qui ne sait pas parser les POMs Model 4.1.0 et crashe sur le reactor Vidocq. La règle est documentée dans la racine du workspace : ne pas réintégrer heisenberg-tck aux <subprojects> de heisenberg-parent, ne pas leur ajouter de <parent>, ne pas les builder via mvn -pl.

Stack assemblée par le runner :

Couche Composant

Spec

microprofile-fault-tolerance-api 4.1, jakarta.enterprise.cdi-api 4.1, jakarta.interceptor-api 2.2, microprofile-config-api 3.1

Implémentation Fault Tolerance

heisenberg-core + heisenberg-cdi-vauban

Container CDI

Vauban (io.vidocq.vauban.core) en mode embedded

Container Arquillian

HeisenbergDeployableContainer — déploie l’archive de test, instancie le BeanManager

Transport HTTP (si nécessaire)

Chappe — pour les tests qui exercent un client HTTP

Cadre de test

TestNG (contrainte upstream — pas JUnit)

Propriétés de tuning

Propriété Effet

org.eclipse.microprofile.fault.tolerance.tck.timeout.multiplier

Multiplicateur des timeouts du TCK. Défaut 1.0. Passer à 2.0 ou 3.0 sur les CI lentes.

-Dtest=NomDuTest

Cible un test ou une méthode précise.

-Dsurefire.excludes=…​

Exclusions Surefire — utiles pour isoler une régression.

Exclusions documentées

Aucune exclusion permanente à ce jour : la suite est exécutée intégralement et passe à 463/463 en mode complet. Le mode no-observability est une variante d’exécution, pas une exclusion structurelle — les tests exclus passent aussi en mode complet.

Si une exclusion permanente devait être ajoutée, elle serait listée dans le fichier suite TestNG (heisenberg-tck/src/test/resources/tck-suite.xml) et tracée dans TCK.md.

Contrat qualité

Toute modification structurelle de heisenberg-core ou heisenberg-cdi-vauban doit préserver le score 463/463 avant merge. Une régression TCK est bloquante au sens CI : la PR ne passe pas. Ce contrat est explicitement listé dans le CLAUDE.md du dépôt.

Pour aller plus loin

  • Fonctionnement interne — comprendre ce que le TCK valide (pipeline, moteurs, observabilité).

  • Référence — annotations et clés couvertes par les tests.

  • BUG.md — bugs reproductibles tracés.