# 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="" 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="" HOSTNAME_TO_TEST="" 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.