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 |
Stack assemblée par le runner :
| Couche | Composant |
|---|---|
Spec |
|
Implémentation Fault Tolerance |
|
Container CDI |
Vauban ( |
Container Arquillian |
|
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 |
|---|---|
|
Multiplicateur des timeouts du TCK. Défaut 1.0. Passer à 2.0 ou 3.0 sur les CI lentes. |
|
Cible un test ou une méthode précise. |
|
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.