This commit is contained in:
124
scripts/verify_common.sh
Executable file
124
scripts/verify_common.sh
Executable file
@@ -0,0 +1,124 @@
|
||||
#!/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
|
||||
}
|
||||
Reference in New Issue
Block a user