Files
agents_and_robots/e2e/README.md
T
egutierrez fc86edd94c chore: auto-commit (27 archivos)
- .claude/CLAUDE.md
- .claude/rules/create_agent.md
- agents/_specials/father-bot/prompts/system.md
- agents/_template/config.yaml
- agents/_template_robot/config.yaml
- cmd/agentctl/autoavatar.go
- cmd/launcher/sqlite.go
- dev-scripts/_common.sh
- dev-scripts/agent/create-full.sh
- dev-scripts/agent/delete-full.sh
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 19:38:16 +02:00

197 lines
6.8 KiB
Markdown

# E2E Tests — agents_and_robots
Tests end-to-end con Playwright para verificar que los agentes Matrix responden correctamente via Element Web.
## Requisitos
- Node.js v18+
- Agentes corriendo contra el homeserver (`./dev-scripts/server/start.sh`)
- Credenciales de un usuario de test en el homeserver
## Instalacion
```bash
./dev-scripts/e2e/install.sh
```
Esto instala dependencias npm y Chromium para Playwright.
## Configuracion
```bash
cp e2e/.env.example e2e/.env
```
Editar `e2e/.env` con las credenciales del usuario de test:
| Variable | Descripcion |
|----------|-------------|
| `ELEMENT_URL` | URL de Element Web local (default: `http://localhost:8090`) |
| `MATRIX_HOMESERVER` | URL del homeserver Matrix |
| `MATRIX_USER` | MXID del usuario de test (`@user:server`) |
| `MATRIX_PASSWORD` | Password del usuario de test |
| `MATRIX_RECOVERY_KEY` | Recovery key para cross-signing/E2EE |
## Ejecucion
```bash
# Ejecutar todos los tests (headless)
./dev-scripts/e2e/run.sh
# Con browser visible (requiere DISPLAY)
./dev-scripts/e2e/run.sh --headed
# Ejecutar un spec especifico
./dev-scripts/e2e/run.sh assistant-bot
# Directamente con Playwright
cd e2e && npx playwright test
cd e2e && npx playwright test --headed
cd e2e && npx playwright test assistant-bot.spec.ts
```
El script `run.sh` se encarga de:
1. Verificar que los agentes estan corriendo
2. Levantar Element Web si no esta activo
3. Ejecutar los tests
4. Generar reporte en caso de fallos
5. Teardown de Element Web (si lo levanto)
## Estructura
```
e2e/
├── package.json dependencias (Playwright, dotenv)
├── playwright.config.ts configuracion de Playwright
├── global-setup.ts login unico antes de todos los tests
├── .env.example template de credenciales
├── fixtures/
│ ├── element-auth.ts login y verificacion E2EE
│ └── matrix-room.ts helpers: goToRoom, sendMessage, waitForBotReply
├── tests/
│ ├── login.spec.ts smoke test: sesion y E2EE
│ ├── assistant-bot.spec.ts tests del assistant-bot
│ └── asistente-2.spec.ts tests del asistente-2 (con tools)
├── scripts/
│ └── setup-element.sh descarga y sirve Element Web local
└── element-web/ Element Web descargado (gitignored)
dev-scripts/e2e/
├── install.sh instalacion de dependencias
└── run.sh orquestacion completa de tests
```
## Debug de fallos
### Screenshots
Cuando un test falla, Playwright captura screenshot automaticamente en `e2e/test-results/`. Revisarlos para entender el estado de la UI al momento del fallo.
### Reporte HTML
Si hay fallos, `run.sh` genera un reporte HTML:
```bash
cd e2e && npx playwright show-report
```
### Modo headed
Para ver el browser en tiempo real (requiere entorno grafico):
```bash
./dev-scripts/e2e/run.sh --headed
```
### Traces
En el primer retry, Playwright captura un trace completo. Verlo con:
```bash
cd e2e && npx playwright show-trace test-results/<test-name>/trace.zip
```
### Login cacheado
El global-setup cachea la sesion autenticada en `e2e/.auth/state.json` por 12 horas. Si hay problemas de autenticacion:
```bash
rm -rf e2e/.auth/
```
Y re-ejecutar los tests para forzar login fresco.
## Notas de diseno
- **Assertions flexibles para LLM**: las respuestas de los bots son no-deterministicas. Solo se verifica que responde, que no esta vacio, y longitud razonable.
- **Commands con assertions estrictas**: `!help` y `!ping` tienen respuestas deterministicas y se validan con mayor precision.
- **Tests secuenciales**: `fullyParallel: false` y `workers: 1` para evitar race conditions en el timeline de Matrix.
- **Timeouts generosos**: 60s por test, 30s para expect. Los LLMs pueden tardar 5-20s en responder.
- **Retry en CI**: 1 retry en CI para manejar timeouts ocasionales.
---
## agent-wsl-lucas (issue 0144 / flow 0009)
Tests con cobertura DoD Quality Triada (registry rule `dod_quality.md`) que **no se fian de la respuesta visual del bot**: cruzan cada turno contra logs SSH del VPS y contra la audit DB local del `device_agent`.
### Que validan
| Capa | Tests | Por que |
|------|-------|---------|
| 1. Mecanica | `M1` bot alive, `M2` matrix sync, `M3` mesh tools >=14 | pre-requisito, NO es DoD |
| 2. Cobertura | `C1` exec golden, `C2` fs.list golden, `C3` shell.eval auto-approve, `C4` rm -rf bloqueado, `C5` tool no-en-manifest, `C6` device_agent down, `C7` hash chain | 1 golden + 2 edge + 1 error path por DoD |
| 3. Vida util | `V1` systemd uptime, `V2` tool ratio, `V3` latencia | sobrevivir uso real |
| Anti-criterios | `A1` no ERROR inesperado, `A2` chain intacta, `A3` claim sin audit = hallucination | invalidan DoD aunque otros pasen |
### Cross-checks (no fake passes)
- **A3 (anti-criterio clave)**: si el agent log VPS muestra `executing tool` para `exec` / `shell.eval` / `fs.*` pero `audit_log` no tiene entries, el test falla — captura LLM hallucinando ejecuciones sin tocar el device.
- **Hash chain**: `verifyHashChain` recomputa `sha256(prev|ts|req|cap|args_hash|exit)` y compara con `this_hash` de cada fila. Detecta tampering en `audit_log`.
### Prerequisitos
1. **device_agent corriendo en WSL** en `10.42.0.10:7474` con `--audit /tmp/device_audit.db`.
2. **`agents_and_robots.service` activo** en VPS `organic-machine.com`.
3. **SSH key-based** al VPS (`ssh organic-machine.com true` sin password). Override con `AGENT_LOG_SSH_TARGET`.
4. **claude CLI** instalado en el VPS para que `agent-wsl-lucas` pueda generar respuestas.
5. **`e2e/.env`** con `MATRIX_*` rellenado.
Ejecuta el preflight para verificarlo todo:
```bash
./scripts/setup-agent-wsl-lucas.sh
# o
npm run preflight:agent-wsl-lucas
```
### Run
```bash
cd e2e
npm install # instala better-sqlite3
npm run test:agent-wsl-lucas # ejecuta solo este spec
# o filtrando una capa
npx playwright test agent-wsl-lucas.spec.ts -g "Capa 2"
# o un test concreto
npx playwright test agent-wsl-lucas.spec.ts -g "C1: golden exec"
```
### Variables de entorno extra (todas opcionales)
| Variable | Default | Para que |
|----------|---------|----------|
| `AGENT_WSL_LUCAS_ROOM` | `Agent Wsl Lucas` | nombre del room en Element |
| `AGENT_WSL_LUCAS_DISPLAY` | `Agent Wsl Lucas` | display name del bot para filtrar replies |
| `AGENT_LOG_SSH_TARGET` | `organic-machine.com` | alias ssh del VPS |
| `AGENT_LOG_BASE_DIR` | `/home/ubuntu/CodeProyects/agents_and_robots/logs` | base de logs en VPS |
| `DEVICE_AUDIT_DB` | `/tmp/device_audit.db` | audit DB del device_agent |
| `AGENT_LATENCY_THRESHOLD_MS` | `20000` | umbral para V3 (claude-code puede ser lento) |
### Reports
Output por defecto en `e2e/test-results/`. HTML report con `npx playwright show-report`.
Los tests `C*` imprimen el `JSON.stringify` de las filas `audit_log` cuando fallan — facil de pegar en un issue para debugging.