Files
fission-console/scripts/test_auth.sh

108 lines
4.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# test_auth.sh — тестирует аутентификацию:
# - POST /console/api/auth (login endpoint)
# - X-Auth-Token header (authMiddleware)
# - Authorization: Bearer header
# - DemoAuth: любая строка ≥6 символов
set -uo pipefail
ROOT_DIR=$(cd "$(dirname "$0")" && pwd)
source "${ROOT_DIR}/lib.sh"
NS_CLEANUP_SCRIPT="${ROOT_DIR}/cleanup_test_namespaces.sh"
RUN_ID=$(mk_run_id)
SUB="test-auth-${RUN_ID}@test.local"
cleanup() {
if [ -x "$NS_CLEANUP_SCRIPT" ]; then
KUBECTL_DIRECT=1 "$NS_CLEANUP_SCRIPT" "$SUB" >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
echo ""
echo "========================================"
echo " test_auth.sh run=$RUN_ID"
echo "========================================"
# ── POST /auth ──────────────────────────────────────────────────────────────
echo ""
echo ">>> POST /auth: пустой токен → 400"
R=$(curl -s -w "\n%{http_code}" -X POST "${BASE}/auth" \
-H "Content-Type: application/json" -d '{"token":""}')
check_http "$(echo "$R" | tail -1)" "400" "POST /auth пустой token → 400"
echo ""
echo ">>> POST /auth: токен < 6 символов → 401"
R=$(curl -s -w "\n%{http_code}" -X POST "${BASE}/auth" \
-H "Content-Type: application/json" -d '{"token":"ab"}')
check_http "$(echo "$R" | tail -1)" "401" "POST /auth токен 2 символа → 401"
R=$(curl -s -w "\n%{http_code}" -X POST "${BASE}/auth" \
-H "Content-Type: application/json" -d '{"token":"abcde"}')
check_http "$(echo "$R" | tail -1)" "401" "POST /auth токен 5 символов → 401"
echo ""
echo ">>> POST /auth: токен ≥6 символов → 200"
R=$(curl -s -w "\n%{http_code}" -X POST "${BASE}/auth" \
-H "Content-Type: application/json" -d "{\"token\":\"${SUB}\"}")
CODE=$(echo "$R" | tail -1)
BODY=$(echo "$R" | sed '$d')
check_http "$CODE" "200" "POST /auth валидный токен → 200"
NS=$(json_field "$BODY" namespace)
printf '%s' "$NS" | grep -q '^fission-' && pass "POST /auth namespace=fission-..." || fail "POST /auth namespace format: $NS"
OK=$(json_field "$BODY" ok)
[ "$OK" = "True" ] || [ "$OK" = "true" ] && pass "POST /auth ok=true" || fail "POST /auth ok=$OK"
echo ""
echo ">>> POST /auth: невалидный JSON → 400"
R=$(curl -s -w "\n%{http_code}" -X POST "${BASE}/auth" \
-H "Content-Type: application/json" -d 'not-json')
CODE=$(echo "$R" | tail -1)
[ "$CODE" = "400" ] && pass "POST /auth невалидный JSON → 400" || fail "POST /auth невалидный JSON → $CODE"
echo ""
echo ">>> POST /auth: GET метод → 405"
R=$(curl -s -w "\n%{http_code}" "${BASE}/auth")
CODE=$(echo "$R" | tail -1)
[ "$CODE" = "405" ] && pass "GET /auth → 405" || fail "GET /auth → $CODE"
# ── X-Auth-Token header ──────────────────────────────────────────────────────
echo ""
echo ">>> X-Auth-Token: отсутствует → 401"
R=$(curl -s -w "\n%{http_code}" "${BASE}/functions")
check_http "$(echo "$R" | tail -1)" "401" "GET /functions без токена → 401"
echo ""
echo ">>> X-Auth-Token: токен < 6 символов → 401"
R=$(curl -s -w "\n%{http_code}" "${BASE}/functions" -H "X-Auth-Token: ab")
check_http "$(echo "$R" | tail -1)" "401" "GET /functions токен 2 символа → 401"
R=$(curl -s -w "\n%{http_code}" "${BASE}/functions" -H "X-Auth-Token: abcde")
check_http "$(echo "$R" | tail -1)" "401" "GET /functions токен 5 символов → 401"
echo ""
echo ">>> X-Auth-Token: токен ≥6 символов → 200"
R=$(curl -s -w "\n%{http_code}" "${BASE}/functions" -H "X-Auth-Token: ${SUB}")
check_http "$(echo "$R" | tail -1)" "200" "GET /functions валидный X-Auth-Token → 200"
echo ""
echo ">>> Authorization: Bearer → 200"
R=$(curl -s -w "\n%{http_code}" "${BASE}/functions" \
-H "Authorization: Bearer ${SUB}")
check_http "$(echo "$R" | tail -1)" "200" "GET /functions Authorization: Bearer → 200"
# ── Namespace детерминирован ─────────────────────────────────────────────────
echo ""
echo ">>> Namespace детерминирован (одинаковый токен → одинаковый NS)"
R1=$(curl -s -X POST "${BASE}/auth" -H "Content-Type: application/json" -d "{\"token\":\"${SUB}\"}")
R2=$(curl -s -X POST "${BASE}/auth" -H "Content-Type: application/json" -d "{\"token\":\"${SUB}\"}")
NS1=$(json_field "$R1" namespace)
NS2=$(json_field "$R2" namespace)
[ "$NS1" = "$NS2" ] && [ -n "$NS1" ] && pass "Namespace детерминирован: $NS1" || fail "Namespace не детерминирован: '$NS1' vs '$NS2'"
print_summary