#!/usr/bin/env bash # tests/edge-cases.sh — Краевые случаи валидации CIDR # Запуск: TOKEN=eyJ... bash tests/edge-cases.sh [BASE_URL] set -euo pipefail BASE="${1:-https://italo.kube5s.ru}" TOKEN="${TOKEN:-}" PASS=0; FAIL=0 api() { curl -s --http2 -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" -w "\n%{http_code}" "$@"; } check() { local n="$1" e="$2" a="$3"; if echo "$a" | grep -q "$e"; then echo "✅ $n"; PASS=$((PASS+1)); else echo "❌ $n (expected: $e, got: $(echo $a | tail -1 | head -c 80))"; FAIL=$((FAIL+1)); fi; } echo "=== CIDR EDGE CASES ===" # ── Валидные ── check "1. /32" "201" "$(api -X POST -d '{"value":"8.8.8.8"}' "$BASE/api/v1/entries")" check "2. /22" "201" "$(api -X POST -d '{"value":"8.8.8.0/22"}' "$BASE/api/v1/entries")" check "3. нормализация хоста" "wasNormalized" "$(api -X POST -d '{"value":"8.8.8.10/24"}' "$BASE/api/v1/entries")" # ── Невалидные маски ── check "4. /21 слишком широко" "400" "$(api -X POST -d '{"value":"1.0.0.0/21"}' "$BASE/api/v1/entries")" check "5. /33 невалидно" "400" "$(api -X POST -d '{"value":"1.1.1.1/33"}' "$BASE/api/v1/entries")" check "6. /0" "400" "$(api -X POST -d '{"value":"0.0.0.0/0"}' "$BASE/api/v1/entries")" # ── Серые адреса ── check "7. 10.x" "400" "$(api -X POST -d '{"value":"10.0.0.1"}' "$BASE/api/v1/entries")" check "8. 192.168.x" "400" "$(api -X POST -d '{"value":"192.168.1.1"}' "$BASE/api/v1/entries")" check "9. 172.16.x" "400" "$(api -X POST -d '{"value":"172.16.0.1"}' "$BASE/api/v1/entries")" check "10. 127.x loopback" "400" "$(api -X POST -d '{"value":"127.0.0.1"}' "$BASE/api/v1/entries")" # ── IPv6 ── check "11. IPv6" "400" "$(api -X POST -d '{"value":"::1"}' "$BASE/api/v1/entries")" check "12. IPv6 full" "400" "$(api -X POST -d '{"value":"2001:db8::1"}' "$BASE/api/v1/entries")" # ── Мусор ── check "13. домен" "400" "$(api -X POST -d '{"value":"example.com"}' "$BASE/api/v1/entries")" check "14. пусто" "400" "$(api -X POST -d '{"value":""}' "$BASE/api/v1/entries")" check "15. пробелы" "400" "$(api -X POST -d '{"value":" "}' "$BASE/api/v1/entries")" # ── Специальные ── check "16. multicast" "400" "$(api -X POST -d '{"value":"224.0.0.1"}' "$BASE/api/v1/entries")" check "17. broadcast" "400" "$(api -X POST -d '{"value":"255.255.255.255"}' "$BASE/api/v1/entries")" check "18. 0.0.0.0" "400" "$(api -X POST -d '{"value":"0.0.0.0"}' "$BASE/api/v1/entries")" echo "" echo "=== Edge cases: $PASS/$((PASS+FAIL)) ==="