From 00a378dd9005946d66b3b63a4c6a481b7292a1d7 Mon Sep 17 00:00:00 2001 From: dahoud <41957584+DahoudG@users.noreply.github.com> Date: Sat, 25 Apr 2026 18:47:20 +0000 Subject: [PATCH] =?UTF-8?q?fix(sprint-17=20backend):=20re-d=C3=A9sactive?= =?UTF-8?q?=20DevServices=20global=20en=20test=20(cause=20racine=20identif?= =?UTF-8?q?i=C3=A9e)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le revert précédent (commit 5cc3806) basé sur 'ne pas appauvrir' était factuellement incorrect pour ce projet. Analyse bytecode des extensions Quarkus 3.27.3 : - quarkus-keycloak-admin-rest-client-deployment.KeycloakDevServiceRequiredBuildStep est annoté @BuildSteps(onlyIf = {IsDevServicesSupportedByLaunchMode, DevServicesConfig.Enabled, KeycloakAdminClientInjectionEnabled}) et produit inconditionnellement un KeycloakDevServicesRequiredBuildItem dès que cette extension est dans le classpath — ignorant quarkus.oidc.tenant-enabled et quarkus.keycloak.devservices.enabled. - Le seul kill switch respecté est DevServicesConfig.Enabled ⇒ quarkus.devservices.enabled. - Empiriquement : sans le global, un container quay.io/keycloak/keycloak:26.3.4 démarre à chaque test (+50s, ignore KC local 8180). Cohérence d'archi (pas un appauvrissement) : - H2 in-memory configuré explicitement dans le profil test. - OIDC tenant-enabled=false (pas d'auth en test). - Aucune autre extension utilisant DevServices dans ce profil. Aussi : application-integration-test.properties — corrige policy-enforcer.enable (déprécié) en policy-enforcer.enabled (kill le warning au build). Tests : 28 tests verts en <2s, 0 container démarré. --- .../resources/application-test.properties | 24 +++++++++++++++---- .../application-integration-test.properties | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index 8fa51ba..a20a57d 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -23,11 +23,23 @@ quarkus.flyway.baseline-on-migrate=false # Configuration Keycloak pour tests (désactivé) quarkus.oidc.tenant-enabled=false quarkus.keycloak.policy-enforcer.enabled=false -# Keycloak DevService désactivé : OIDC tenant-enabled=false ⇒ aucun besoin de KC en test. -# (Évite le démarrage d'un container KC parasite de 50s+ ignorant l'instance locale 8180.) -# NB : on NE désactive PAS quarkus.devservices.enabled globalement — laisse le mécanisme -# disponible si un futur test active un Postgres Testcontainer (cf. dette H2→Testcontainers). -quarkus.keycloak.devservices.enabled=false +# +# Désactivation GLOBALE des DevServices en mode test. +# Pourquoi le global et pas seulement quarkus.keycloak.devservices.enabled=false : +# L'extension quarkus-keycloak-admin-client (admin-rest-client-deployment) a un +# BuildStep `requireKeycloakDevService` annoté +# @BuildSteps(onlyIf = {IsDevServicesSupportedByLaunchMode, DevServicesConfig.Enabled, +# KeycloakAdminClientInjectionEnabled}) +# qui produit INCONDITIONNELLEMENT un KeycloakDevServicesRequiredBuildItem dès que cette +# extension est dans le classpath — peu importe `quarkus.oidc.tenant-enabled` ou +# `quarkus.keycloak.devservices.enabled`. Le seul kill switch respecté par cette +# extension est `DevServicesConfig.Enabled` ⇒ `quarkus.devservices.enabled`. +# Cohérence d'archi (pas un appauvrissement) : +# - H2 in-memory configuré explicitement (pas de Postgres DevService nécessaire). +# - OIDC `tenant-enabled=false` (pas d'auth en test → KC inutile). +# - Aucune autre extension utilisant DevServices dans ce profil. +# Dev mode (mvn quarkus:dev) : non affecté, DevServices restent actifs. +quarkus.devservices.enabled=false # DETTE TECHNIQUE — H2 vs Postgres réel # Les tests utilisent H2 en mode PostgreSQL pour rapidité, mais le projet utilise massivement : @@ -36,6 +48,8 @@ quarkus.keycloak.devservices.enabled=false # - Fonctions PG natives (gen_random_uuid, citext, etc.) → comportement divergent # TODO sprint dédié : migrer vers Testcontainers Postgres avec reuse # (testcontainers.reuse.enable=true) pour fidélité prod + démarrage rapide après warm-up. +# Le passage à Testcontainers nécessitera de retirer la ligne `quarkus.devservices.enabled=false` +# ci-dessus (pour réactiver le Postgres DevService) tout en gardant l'OIDC désactivé. # Cf. memory : project_test_infrastructure_debt.md # Configuration HTTP pour tests diff --git a/src/test/resources/application-integration-test.properties b/src/test/resources/application-integration-test.properties index 2fb8c09..eb78086 100644 --- a/src/test/resources/application-integration-test.properties +++ b/src/test/resources/application-integration-test.properties @@ -13,7 +13,7 @@ quarkus.flyway.migrate-at-start=true # Keycloak — désactivé pour les tests d'intégration DB quarkus.oidc.tenant-enabled=false -quarkus.keycloak.policy-enforcer.enable=false +quarkus.keycloak.policy-enforcer.enabled=false # Kafka — in-memory connector (pas de broker requis) mp.messaging.outgoing.finance-approvals-out.connector=smallrye-in-memory