Files

125 lines
3.0 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
set -u
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
VERIFY_DB_NAME="${VERIFY_DB_NAME:-llm_intelligence}"
PASS_COUNT=0
FAIL_COUNT=0
WARN_COUNT=0
pass() {
echo "[PASS] $1"
PASS_COUNT=$((PASS_COUNT + 1))
}
fail() {
echo "[FAIL] $1"
FAIL_COUNT=$((FAIL_COUNT + 1))
}
warn() {
echo "[WARN] $1"
WARN_COUNT=$((WARN_COUNT + 1))
}
sql_scalar() {
local sql="$1"
psql -d "$VERIFY_DB_NAME" -Atqc "$sql"
}
check_file() {
local path="$1"
local desc="$2"
if [ -f "$PROJECT_ROOT/$path" ]; then
pass "$desc"
else
fail "$desc (缺少文件: $path)"
fi
}
check_executable() {
local path="$1"
local desc="$2"
if [ -x "$PROJECT_ROOT/$path" ]; then
pass "$desc"
else
fail "$desc (不可执行: $path)"
fi
}
check_shell() {
local desc="$1"
local cmd="$2"
if bash -lc "cd \"$PROJECT_ROOT\" && $cmd" >/tmp/llm_verify_cmd.out 2>/tmp/llm_verify_cmd.err; then
pass "$desc"
else
local details=""
if [ -s /tmp/llm_verify_cmd.err ]; then
details="$(tr '\n' ' ' </tmp/llm_verify_cmd.err | sed 's/[[:space:]]\+/ /g' | sed 's/ $//')"
elif [ -s /tmp/llm_verify_cmd.out ]; then
details="$(tr '\n' ' ' </tmp/llm_verify_cmd.out | sed 's/[[:space:]]\+/ /g' | sed 's/ $//')"
fi
if [ -n "$details" ]; then
fail "$desc ($details)"
else
fail "$desc"
fi
fi
}
check_sql_int_ge() {
local desc="$1"
local sql="$2"
local expected="$3"
local actual rc details
set +e
actual="$(sql_scalar "$sql" 2>/tmp/llm_verify_sql.err | tr -d '[:space:]')"
rc=$?
set -e
if [ "$rc" -ne 0 ]; then
details="$(tr '\n' ' ' </tmp/llm_verify_sql.err | sed 's/[[:space:]]\+/ /g' | sed 's/ $//')"
fail "$desc (SQL执行失败: ${details:-unknown error})"
return
fi
if [[ "$actual" =~ ^-?[0-9]+$ ]] && [ "$actual" -ge "$expected" ]; then
pass "$desc (当前: $actual, 期望 >= $expected)"
else
fail "$desc (当前: ${actual:-N/A}, 期望 >= $expected)"
fi
}
check_sql_int_eq() {
local desc="$1"
local sql="$2"
local expected="$3"
local actual rc details
set +e
actual="$(sql_scalar "$sql" 2>/tmp/llm_verify_sql.err | tr -d '[:space:]')"
rc=$?
set -e
if [ "$rc" -ne 0 ]; then
details="$(tr '\n' ' ' </tmp/llm_verify_sql.err | sed 's/[[:space:]]\+/ /g' | sed 's/ $//')"
fail "$desc (SQL执行失败: ${details:-unknown error})"
return
fi
if [[ "$actual" =~ ^-?[0-9]+$ ]] && [ "$actual" -eq "$expected" ]; then
pass "$desc (当前: $actual)"
else
fail "$desc (当前: ${actual:-N/A}, 期望 = $expected)"
fi
}
finish_phase() {
echo
echo "SUMMARY pass=$PASS_COUNT fail=$FAIL_COUNT warn=$WARN_COUNT"
if [ "$FAIL_COUNT" -eq 0 ]; then
echo "PHASE_RESULT: PASS"
exit 0
fi
echo "PHASE_RESULT: FAIL"
exit 1
}