|
|
@@ -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
|