| | |
| | | #!/bin/bash |
| | | # 端到端验证(对标 spec 测试计划第 2 节) |
| | | set -e |
| | | set -o pipefail # 防止管道末端(tail/head)掩盖真实命令失败 |
| | | export CGO_CFLAGS="-DSQLITE_ENABLE_FTS5" |
| | | export CGO_LDFLAGS="-lm" |
| | | FAILS=0 |
| | | VAULT="${1:-$HOME/rag-lpg-obsidian}" |
| | | cd "$(dirname "$0")/.." |
| | | go build -o /tmp/kb-cli-e2e . |
| | |
| | | mkdir -p "$VAULT/笔记" |
| | | TESTFILE="$VAULT/笔记/e2e-test-$(date +%s).md" |
| | | printf -- "---\ntitle: e2e测试\ntags: [补气]\n---\ne2e 补气测试内容\n" > "$TESTFILE" |
| | | /tmp/kb-cli-e2e search e2e --vault "$VAULT" --top 3 2>&1 | grep -q "e2e测试" && echo "PASS: 未commit编辑可见" || echo "FAIL: 未commit编辑不可见" |
| | | if /tmp/kb-cli-e2e search e2e --vault "$VAULT" --top 3 2>&1 | grep -q "e2e测试"; then |
| | | echo "PASS: 未commit编辑可见" |
| | | else |
| | | echo "FAIL: 未commit编辑不可见"; FAILS=$((FAILS+1)) |
| | | fi |
| | | rm -f "$TESTFILE" |
| | | /tmp/kb-cli-e2e index build --vault "$VAULT" 2>/dev/null |
| | | |
| | |
| | | # 故按「行首路径以 .md 结尾」计数(以实际输出为准的最小适配)。 |
| | | N=$(/tmp/kb-cli-e2e search 补气 --vault "$VAULT" --top 10 2>/dev/null | grep -cE '^[^[:space:]]+\.md[[:space:]]' || true) |
| | | echo "补气 命中 $N 条 (期望 >= 5)" |
| | | if [ "$N" -ge 5 ]; then echo "PASS: CJK 召回 >= 5"; else echo "FAIL: CJK 召回不足"; fi |
| | | if [ "$N" -ge 5 ]; then echo "PASS: CJK 召回 >= 5"; else echo "FAIL: CJK 召回不足"; FAILS=$((FAILS+1)); fi |
| | | |
| | | echo "=== 5. explore 预算内 ===" |
| | | BYTES=$(/tmp/kb-cli-e2e explore "电子秤补气失败" --vault "$VAULT" --top 3 2>/dev/null | wc -c) |
| | | echo "explore 输出 ${BYTES} 字节 (上限 32000+尾注)" |
| | | if [ "$BYTES" -le 32200 ]; then echo "PASS: explore 预算内"; else echo "FAIL: explore 超预算"; fi |
| | | if [ "$BYTES" -le 32200 ]; then echo "PASS: explore 预算内"; else echo "FAIL: explore 超预算"; FAILS=$((FAILS+1)); fi |
| | | |
| | | echo "=== 6. 悬空补全 ===" |
| | | /tmp/kb-cli-e2e graph stats --vault "$VAULT" 2>&1 | head -5 |
| | | |
| | | echo "=== e2e 验证完成 ===" |
| | | # CI 可凭退出码判定:任一检查 FAIL 则非 0 |
| | | [ "$FAILS" -eq 0 ] || exit "$FAILS" |