Files
zima-apps/Apps/docker-ip-addr-manager/HOW_TO_VERIFY.md
T

195 lines
3.6 KiB
Markdown

# HOW_TO_VERIFY
Detta dokument verifierar att `docker-ip-addr-manager` fungerar säkert i ZimaOS.
## 1) Förutsättningar
- ZimaOS-host med minst ett interface (ex `eth0`).
- Docker körs på hosten.
- Appen är installerad och startad.
- Webb-UI/API nås på `${APP_PORT:-31810}`.
Kontrollera att appen är uppe:
```bash
curl -fsS http://127.0.0.1:31810/healthz
```
Förväntat resultat:
- JSON med `{"ok":true}`.
## 2) Positiva testfall
### Test A: Skapa och enable IP-post
Skapa post:
```bash
curl -fsS -X POST http://127.0.0.1:31810/api/entries \
-H 'Content-Type: application/json' \
-d '{"name":"lan-test","ip":"10.0.4.2","cidr":16,"device":"eth0"}'
```
Hämta `id` från svaret och enable:
```bash
ENTRY_ID="<id-fran-svaret>"
curl -fsS -X POST "http://127.0.0.1:31810/api/entries/${ENTRY_ID}/enable"
```
Verifiera på host:
```bash
ip -4 -o addr show dev eth0 | rg '10\.0\.4\.2/16'
```
Förväntat resultat:
- IP-adressen finns på `eth0`.
### Test B: Used-detektion via Docker port binding
Starta testcontainer bunden till IP:n:
```bash
docker run -d --rm --name ip-verify-nginx -p 10.0.4.2:18080:80 nginx:1.27.5
```
Refresh appdata:
```bash
curl -fsS -X POST http://127.0.0.1:31810/api/refresh
```
Förväntat resultat:
- posten med `10.0.4.2` har `used=true`.
- `containers` innehåller `ip-verify-nginx`.
### Test C: Disable/Delete efter frigöring
Stoppa testcontainer:
```bash
docker stop ip-verify-nginx
```
Disable posten:
```bash
curl -fsS -X POST "http://127.0.0.1:31810/api/entries/${ENTRY_ID}/disable"
```
Verifiera borttagen IP:
```bash
ip -4 -o addr show dev eth0 | rg '10\.0\.4\.2/16' || true
```
Förväntat resultat:
- ingen träff för `10.0.4.2/16`.
Ta bort posten:
```bash
curl -fsS -X DELETE "http://127.0.0.1:31810/api/entries/${ENTRY_ID}"
```
Förväntat resultat:
- svar med `{"deleted":true}`.
## 3) Negativt / fail-closed testfall
### Test D: Blockera disable när IP används
1. Skapa + enable som i Test A.
2. Starta container som i Test B.
3. Försök disable:
```bash
curl -sS -o /tmp/disable.out -w '%{http_code}\n' \
-X POST "http://127.0.0.1:31810/api/entries/${ENTRY_ID}/disable"
cat /tmp/disable.out
```
Förväntat resultat:
- HTTP `409`.
- feltext som anger att posten används av container.
## 4) DNS / nät / TLS verifiering
### DNS (om hostname används i LAN)
```bash
DNS_SERVER="<dns-server-ip>"
HOSTNAME_TO_TEST="<hostname-i-lan>"
dig +short "${HOSTNAME_TO_TEST}" @"${DNS_SERVER}"
```
Förväntat resultat:
- returnerar avsedd LAN-IP.
### Nätverk (lyssning och routning)
```bash
ss -ltnp | rg ':31810'
ip route get 10.0.4.2
```
Förväntat resultat:
- appen lyssnar på `31810`.
- route lookup fungerar mot rätt interface.
### TLS
Appens UI/API i v1 kör HTTP, inte HTTPS.
Verifiera att HTTP fungerar:
```bash
curl -fsS http://127.0.0.1:31810/healthz
```
Verifiera att HTTPS mot app-porten inte ska användas:
```bash
curl -k https://127.0.0.1:31810/healthz || true
```
Förväntat resultat:
- HTTP fungerar.
- HTTPS-anrop misslyckas eller ger ogiltigt TLS-handslag.
## 5) Data att samla (för snabb felsökning)
- Versions-/buildinfo:
- app-id: `docker-ip-addr-manager`
- branch/commit eller zip + checksum.
- Relevant konfiguration (maska secrets):
```bash
docker inspect docker-ip-addr-manager | jq '.[0].Config.Env'
```
- Loggar från berörda containers:
```bash
docker logs --tail 200 docker-ip-addr-manager
docker logs --tail 200 docker-ip-addr-manager-proxy
```
- Konkreta felobservationer:
- hostname/IP,
- exakt tidpunkt,
- förväntat beteende,
- faktiskt beteende,
- exakta kommandon som kördes.