Skip to content

test: subir cobertura de tests en lambda-core (11.3% -> 87.6%) - #4

Open
marcoslozina wants to merge 1 commit into
mainfrom
test/increase-lambda-core-coverage
Open

marcoslozina wants to merge 1 commit into
mainfrom
test/increase-lambda-core-coverage

Conversation

@marcoslozina

@marcoslozina marcoslozina commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Resumen

Agrega tests reales (no infladores de métrica) para las clases de lambda-core que estaban sin cobertura, y recalibra el gate de JaCoCo con el nuevo baseline medido.

Clases y casos cubiertos

  • FunctionConfig (0% → 99.5%): el bean hello() — echo de path/pathParams/queryParams/body, resolución de nombre desde query params, fallback reactivo a "Hello, World!" cuando HelloHandler falla de forma asíncrona (onErrorResume), delegación a GlobalExceptionHandler cuando falla de forma síncrona (excepción lanzada directamente al invocar processGreeting), resolución de X-Request-Id con y sin requestContext. El bean pong().
  • HelloController (0% → 99.1%): helloGet/helloPost, precedencia de query param sobre body para el nombre, inclusión condicional de name/body en la respuesta, fallback a saludo por defecto cuando el handler falla.
  • GlobalExceptionHandler (0% → 70.6%): mapeo de excepción a status HTTP (IllegalArgumentException/ValidationException → 400, SecurityException → 403, RuntimeException y excepciones checked → 500), sanitización del mensaje de error (no filtra detalles internos), mensaje genérico cuando el throwable no tiene mensaje, headers de tracing, ausencia de stack trace por defecto. (El branch de INCLUDE_STACK_TRACE=true no se cubrió — requiere mockear variables de entorno del proceso, no vale la pena la complejidad extra para este proyecto educativo.)
  • RequestValidator (0% → 100%): validación exitosa, ValidationException con el mensaje de la violación cuando falla una constraint, caso null.

No se agregaron tests para LambdaApplication (solo SpringApplication.run, boilerplate sin lógica) ni tests triviales tipo "el getter devuelve lo que se seteó".

Cobertura

Antes Después
Instrucciones cubiertas 72/639 (11.27%) 560/639 (87.64%)

Gate de JaCoCo

lambda-core/build.gradle.ktsjacocoTestCoverageVerification.violationRules pasó de 6% a 82% (mismo criterio que la calibración anterior: baseline medido menos 5 puntos de buffer). Confirmé que el gate dispara de verdad: lo subí temporalmente a 95%, corrí jacocoTestCoverageVerification --rerun-tasks y falló con instructions covered ratio is 0.87, but expected minimum is 0.95; después lo volví a bajar a 82%.

Validación

./gradlew build --rerun-tasks completo (incluye lambda-tests, tests de integración vía SAM local) pasa limpio.

Test plan

  • ./gradlew :lambda-core:test :lambda-core:jacocoTestReport --rerun-tasks — 30 tests, todos verdes
  • Gate confirmado que falla con umbral inflado y pasa con el umbral calibrado
  • ./gradlew build --rerun-tasks completo pasa

…onHandler and RequestValidator

Adds real behavioral tests for the previously-untested classes in
lambda-core: FunctionConfig's hello()/pong() beans, HelloController's
reactive request handling, GlobalExceptionHandler's status-mapping and
message-sanitization branches, and RequestValidator's Bean Validation
integration. Covers edge cases (blank/missing names, error fallbacks,
synchronous vs reactive failures, null constraint violations) rather
than trivial getter-style assertions.

Instruction coverage on lambda-core went from ~11.3% to ~87.6%
(560/639 instructions), so the jacocoTestCoverageVerification gate in
lambda-core/build.gradle.kts is recalibrated from 6% to 82% (5-point
buffer below the new measured baseline, same methodology used to set
the original threshold).
@marcoslozina
marcoslozina force-pushed the test/increase-lambda-core-coverage branch from f13f9bc to 715d656 Compare September 8, 2026 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant