125 lines
3.0 KiB
Bash
Executable File
125 lines
3.0 KiB
Bash
Executable File
#!/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
|
|
}
|