Przeglądaj źródła

chore: add one-click test script with interactive storage selection

b 1 miesiąc temu
rodzic
commit
bf7d6579d1
1 zmienionych plików z 138 dodań i 0 usunięć
  1. 138 0
      test.sh

+ 138 - 0
test.sh

@@ -0,0 +1,138 @@
+#!/bin/bash
+# 订单服务一键测试脚本
+# 用法: bash test.sh          # 内存存储
+#       STORAGE=sqlite bash test.sh  # SQLite 存储
+
+PASS=0
+FAIL=0
+SERVER_PID=
+PORT=8080
+
+echo "选择存储后端:"
+echo "  1) memory(默认)"
+echo "  2) sqlite"
+read -p "请选择 [1/2]: " choice
+case "$choice" in
+  2|sqlite) STORAGE=sqlite ;;
+  *) STORAGE=memory ;;
+esac
+
+green() { echo -e "\033[32m$1\033[0m"; }
+red()   { echo -e "\033[31m$1\033[0m"; }
+
+cleanup() {
+  [ -n "$SERVER_PID" ] && kill $SERVER_PID 2>/dev/null || true
+  sleep 0.5
+  rm -f orders.db
+}
+trap cleanup EXIT
+
+# 先释放 8080 端口(处理上次残留)
+fuser -k ${PORT}/tcp >/dev/null 2>&1 || true
+sleep 1
+
+echo "========================================"
+echo "  订 单 服 务 — 一 键 测 试"
+echo "  存储: $STORAGE"
+echo "========================================"
+
+# 启动服务
+export STORAGE
+GIN_MODE=release go run main.go > /tmp/order_server.log 2>&1 &
+SERVER_PID=$!
+sleep 3
+
+# 检查进程
+if ! kill -0 $SERVER_PID 2>/dev/null; then
+  red "  ❌ 服务启动失败"
+  cat /tmp/order_server.log
+  exit 1
+fi
+
+assert() {
+  local desc="$1" exp="$2" act="$3" exp_body="$4" act_body="$5"
+  if echo "$act_body" | grep -qF "$exp_body" && [ "$act" = "$exp" ]; then
+    green "  ✅ PASS: $desc"
+    ((PASS++))
+  else
+    red "    ❌ FAIL: $desc"
+    echo "       HTTP $exp 期望, 实际 $act"
+    echo "       body 期望含: $exp_body"
+    echo "       body 实际: $act_body"
+    ((FAIL++))
+  fi
+}
+
+echo ""
+echo "1. 创建订单..."
+RESP=$(curl -s -w "\n%{http_code}" -X POST http://localhost:$PORT/orders \
+  -H "Content-Type: application/json" \
+  -d '{"service_time":"2025-08-01T14:00:00Z","duration":120,"address":"北京朝阳"}')
+BODY=$(echo "$RESP" | sed '$d')
+CODE=$(echo "$RESP" | tail -1)
+ID=$(echo "$BODY" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
+assert "创建订单" 201 "$CODE" '"status":"pending"' "$BODY"
+
+echo ""
+echo "2. 接单(首次)..."
+RESP=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:$PORT/orders/$ID/accept" \
+  -H "Content-Type: application/json" \
+  -d '{"provider_id":"prov_001"}')
+BODY=$(echo "$RESP" | sed '$d')
+CODE=$(echo "$RESP" | tail -1)
+assert "首次接单成功" 200 "$CODE" "接单成功" "$BODY"
+
+echo ""
+echo "3. 重复接单(应拒绝)..."
+RESP=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:$PORT/orders/$ID/accept" \
+  -H "Content-Type: application/json" \
+  -d '{"provider_id":"prov_002"}')
+BODY=$(echo "$RESP" | sed '$d')
+CODE=$(echo "$RESP" | tail -1)
+assert "重复接单被拒" 409 "$CODE" "已被其他服务者接单" "$BODY"
+
+echo ""
+echo "4. 取消订单..."
+RESP=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:$PORT/orders/$ID/cancel" \
+  -H "Content-Type: application/json" \
+  -d '{}')
+BODY=$(echo "$RESP" | sed '$d')
+CODE=$(echo "$RESP" | tail -1)
+assert "取消成功" 200 "$CODE" "取消成功" "$BODY"
+
+echo ""
+echo "5. 取消后接单(应拒绝)..."
+RESP=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:$PORT/orders/$ID/accept" \
+  -H "Content-Type: application/json" \
+  -d '{"provider_id":"prov_003"}')
+BODY=$(echo "$RESP" | sed '$d')
+CODE=$(echo "$RESP" | tail -1)
+assert "取消后接单被拒" 400 "$CODE" "已取消" "$BODY"
+
+echo ""
+echo "6. 重复取消(应拒绝)..."
+RESP=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:$PORT/orders/$ID/cancel" \
+  -H "Content-Type: application/json" \
+  -d '{}')
+BODY=$(echo "$RESP" | sed '$d')
+CODE=$(echo "$RESP" | tail -1)
+assert "重复取消被拒" 400 "$CODE" "已取消" "$BODY"
+
+echo ""
+echo "7. 订单不存在..."
+RESP=$(curl -s -w "\n%{http_code}" -X PUT "http://localhost:$PORT/orders/nonexistent/accept" \
+  -H "Content-Type: application/json" \
+  -d '{"provider_id":"prov_001"}')
+BODY=$(echo "$RESP" | sed '$d')
+CODE=$(echo "$RESP" | tail -1)
+assert "订单不存在" 404 "$CODE" "订单不存在" "$BODY"
+
+echo ""
+echo "========================================"
+if [ $FAIL -eq 0 ]; then
+  green "  🎉 全部 $PASS 个测试通过!"
+else
+  red "    $PASS 通过, $FAIL 失败"
+fi
+echo "========================================"
+exit $FAIL