orquestador/demo/providers-mock/README.md

143 lines
6.6 KiB
Markdown

# Proveedores de prueba configurables
Servicio Java 21 independiente, sin dependencias Maven ni base de datos. Responde
por HTTP y permite cambiar desde Postman cuerpo, código HTTP y demora sin
reiniciar. Solo datos sintéticos. No consulta ningún proveedor real.
## Levantar en server02
Desde la raíz del repositorio, agregar a `.env`:
```dotenv
MOCK_ADMIN_TOKEN=elige-un-token-para-administrar-el-mock
MOCK_BIND_ADDRESS=0.0.0.0
MOCK_PORT=8788
```
El token administra el mock y se reutiliza por defecto en el orquestador de POC
(ver POC_AUTH.md). No es un JWT de Keycloak. La publicación del
puerto en 0.0.0.0 permite acceso desde Postman en tu red de demo.
```bash
docker compose -f compose.yaml -f compose.mock.yaml up -d --build providers-mock
docker compose -f compose.yaml -f compose.mock.yaml ps
```
Esperar estado **healthy**. Esta POC usa HTTP: no requiere certificados ni cambios
en la validación SSL de Postman.
Importar [Providers-Mock.postman_collection.json](Providers-Mock.postman_collection.json).
Configurar `mockAdminToken` con el mismo valor de `.env`. La variable `mockUrl`
ya apunta a `http://server02:8788`. Ejecutar las peticiones individualmente:
cada configuración reemplaza a la anterior, no son escenarios en secuencia.
## Configurar manualmente
Ejemplo: cliente inexistente.
```http
PUT http://server02:8788/__admin/clientes_consulta
Authorization: Bearer TU_TOKEN_DEL_MOCK
X-Mock-Status: 200
X-Mock-Delay-Ms: 0
Content-Type: application/json
{"found": false}
```
Después, `POST /clientes_consulta` devolverá ese JSON. Los valores iniciales son:
| Proveedor | Ruta | Respuesta inicial |
|---|---|---|
| CLIENTES_CONSULTA | /clientes_consulta | 200, found=true, customerId sintético |
| BURO_CONSULTA | /buro_consulta | 200, score=71, consultationId sintético |
| DOCUMENTO_VALIDA | /documento_valida | 200, status=VALID, reasonCodes=[] |
| DOCUMENTS_METADATA | /documents_metadata | 404 hasta configurar los metadatos |
Para cada ruta, `PUT /__admin/<nombre>` configura y `GET /__admin/<nombre>`
consulta. GET administrativo devuelve 200 y el cuerpo configurado; sus cabeceras
`X-Mock-Status`, `X-Mock-Delay-Ms` y `X-Mock-Calls` muestran el código del proveedor,
la demora y el contador de llamadas. Las consultas administrativas no incrementan
el contador ni sufren la demora. Los endpoints de proveedor son POST sin JWT.
- Para fallo técnico: X-Mock-Status=503 y un cuerpo de error sintético.
- Para timeout: X-Mock-Delay-Ms=7000; las rutas de demo tienen timeout de 5000 ms.
- Para restaurar: volver a enviar PUT con status=200 y delay=0.
- Para scoring: editar el número score (71, 70, 61 o 60).
- Para documento inválido: `{"status":"INVALID","reasonCodes":["EXPIRED"]}`.
- También acepta texto/JSON incorrecto deliberadamente para comprobar el rechazo
por contrato del orquestador. No aplica validación de negocio al cuerpo ficticio.
Los PUT devuelven `{"saved":true}` con HTTP 200, aunque el proveedor se haya
configurado con 503. Status admite 200..599 excepto 204/205/304; demora 0..60000 ms;
cuerpos de hasta 256 KiB. Omisión de cabeceras restablece status=200 y delay=0.
## Conectar el orquestador
El archivo base `compose.yaml` conserva un solo servicio. La combinación con
`compose.mock.yaml` añade el mock a `microsipNet` y selecciona catálogo/rutas
sin sobrescribir `config/`. Activa los perfiles `demo-mock` y `demo-token` junto al perfil configurado
(por defecto postgres96). Ese perfil permite HTTP únicamente hacia el nombre
`providers-mock` y puerto 8788. Sin ese perfil se mantiene el requisito HTTPS
normal; local/test conserva su excepción previa para loopback.
Antes de habilitar la demo, configurar en `.env` REQUEST_API_ENABLED=true,
WORKER_ENABLED=true y, para administrar flujos, FLOW_ADMIN_ENABLED=true y
ADMIN_BUSINESS_SCOPES. Se requieren el usuario DB de runtime restringido y las
credenciales separadas de migración descritos en [SECURITY.md](../../specs/SECURITY.md).
El orquestador usa un token fijo en la POC, sin Keycloak. En Postman colocar
MOCK_ADMIN_TOKEN en accessToken, o el valor de ORCHESTRATOR_DEMO_TOKEN si lo
configuraste por separado. Ver [POC_AUTH.md](../../specs/POC_AUTH.md). No se crean
tipos, flujos, solicitudes o documentos automáticamente.
Aplicar en el entorno de demo:
```bash
docker compose -f compose.yaml -f compose.mock.yaml up -d --build
```
El orquestador espera a que el mock esté healthy. No se cambian JAVA_TOOL_OPTIONS
ni truststores. Si ya habías levantado la versión HTTPS, reconstruir y recrear
ambos servicios con el comando anterior y reimportar la colección Postman.
Los antiguos volúmenes de certificados quedan sin uso; mock-data conserva las
respuestas. No se borran volúmenes automáticamente.
Para COMPRA: configurar cliente encontrado, crear/activar el flujo de compra,
crear solicitud, enviar ASIGNAR_CLIENTE, consultar ejecución hasta SUCCEEDED,
refrescar revisión y enviar CONFIRMAR_COMPRA. Para probar cliente no encontrado,
usar otra solicitud o la que sigue CREADA, con una clave de evento nueva.
Repetir la misma clave reproduce la aceptación anterior, no fuerza otra consulta.
## Metadatos documentales y límites
La colección incluye un PUT de metadatos: completar documentId, requestId,
businessScope y documentType con los de la solicitud. Los campos de propiedad,
MIME, tamaño, checksum y scanStatus=CLEAN son respuestas sintéticas, no un análisis
real de archivos. No hay carga ni almacenamiento de documentos personales.
La respuesta es global por endpoint: no se selecciona por cliente, documento,
perfil ni clave idempotente. Todos los perfiles DOCUMENTO_VALIDA comparten la
respuesta. Para probar varios documentos, configurar el correspondiente antes
de cada evento y esperar a que termine antes de cambiarlo. Una llamada en curso
conserva la respuesta que leyó al comenzar; las siguientes usan la configuración
nueva. Esto incluye reintentos automáticos del worker.
Las respuestas sobreviven a reinicios en el volumen mock-data; los contadores
se reinician. El token administrativo se conserva, pero esta POC usa HTTP sin
cifrado dentro de la red de pruebas. No se registran cuerpos ni tokens. No se
simulan efectos externos de escritura ni deduplicación de un proveedor: las
integraciones de esta demo son READ_ONLY.
## Validación local sin Docker
Con Python 3 y JAVA_HOME apuntando a JDK 21:
```bash
python demo/providers-mock/test_mock.py
```
Compila el servidor y prueba HTTP real,
autorización administrativa, cliente encontrado/no encontrado, status/demora,
persistencia tras reinicio, scoring, documentos y respuestas malformadas. No usa
PostgreSQL ni proveedores externos. No equivale a ejecutar el Compose ni cerrar T16.