fc86edd94c
- .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>
197 lines
6.8 KiB
Markdown
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.
|
|
|