- lib.sh: утилиты (json_field, wait_invoke, print_summary) - run_all.sh: запуск всех скриптов + финальная сводка - pre_cleanup.sh: очистка тест-namespace-ов перед прогоном - test_auth.sh: 14/14 PASS — авторизация, namespace детерминизм - test_functions_crud.sh: 29/29 PASS — CRUD, валидация, >1MB - test_ttl.sh: 10/10 PASS — TTL=15m/1h/2d, невалидные - test_isolation.sh: 11/11 PASS — изоляция пользователей - test_update.sh: 10/10 PASS — PUT /code v1→v2→v3 (livetest) - test_invoke.sh: 9/9 PASS — NodeJS/Python invoke (livetest) - test_stress.sh: 3/3 PASS — 8 пользователей параллельно (livetest) - test_linters.sh: 31/31 PASS — синтаксис 5 языков
108 lines
4.8 KiB
Bash
Executable File
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="auth-test-${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
|