Files
workphone-sdk/sdk/scripts/run_wireless_wechat_full_suite.sh

91 lines
4.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 无线无 USB 微信全功能验收(纯 WS · adb_count 须为 0
# 用法:
# bash sdk/scripts/run_wireless_wechat_full_suite.sh
# WORKPHONE_SDK_URL=http://192.168.3.1:8899 DEVICE_ID=xgfe65eimrrofyws bash ...
set -uo pipefail
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
SDK="${WORKPHONE_SDK_URL:-http://127.0.0.1:8899}"
if [[ -f "$REPO_ROOT/sdk/config/active_sdk.env" ]]; then
# shellcheck disable=SC1091
source "$REPO_ROOT/sdk/config/active_sdk.env"
SDK="${WORKPHONE_SDK_URL:-$SDK}"
fi
DEVICE_ID="${DEVICE_ID:-xgfe65eimrrofyws}"
TS="$(date +%Y%m%d_%H%M%S)"
EVID="${EVIDENCE_DIR:-$REPO_ROOT/开发文档/8、部署/05-测试验收/${TS%_*}_无线无USB全功能}"
mkdir -p "$EVID"
echo "==> 无线全量验收 SDK=$SDK device=$DEVICE_ID"
echo "==> 证据: $EVID"
bash "$REPO_ROOT/sdk/scripts/wait_ws_agent.sh" -d "$DEVICE_ID" -b "$SDK" -t "${WAIT_WS_SEC:-300}" -i 5
ADB_COUNT="$(curl -s -m 8 "$SDK/api/v3/connection/status" | python3 -c "import sys,json; print(json.load(sys.stdin)['data'].get('adb_count',-1))" 2>/dev/null || echo -1)"
WS_COUNT="$(curl -s -m 8 "$SDK/api/v3/connection/status" | python3 -c "import sys,json; print(json.load(sys.stdin)['data'].get('online_ws_count',0))" 2>/dev/null || echo 0)"
echo "transport: ws=$WS_COUNT adb=$ADB_COUNT" | tee "$EVID/00_transport.txt"
if [[ "${WS_COUNT:-0}" -lt 1 ]]; then
echo "ABORT: WS 未在线" >&2; exit 2
fi
echo "==> Frida 无线 reload"
curl -s -m 35 -X POST "$SDK/api/v3/devices/$DEVICE_ID/modules/reload" \
-H 'Content-Type: application/json' \
-d '{"module_ids":["wechat"],"force":true}' | tee "$EVID/frida_reload.json" >/dev/null
sleep 8
EXIT=0
WORKPHONE_SDK_URL="$SDK" DEVICE_ID="$DEVICE_ID" INCLUDE_FORWARD=1 EVIDENCE_DIR="$EVID/realdevice" \
bash "$REPO_ROOT/sdk/scripts/run_wechat_realdevice_acceptance.sh" 2>&1 | tee "$EVID/01_realdevice.log" || EXIT=1
cd "$REPO_ROOT/../cunkebao_v3/Server" 2>/dev/null || cd "$REPO_ROOT/../../cunkebao_v3/Server"
CKB_PASSWORD="${CKB_PASSWORD:-zhiqun1984}" DEVICE_ID="$DEVICE_ID" TIMEOUT_SEC="${TIMEOUT_SEC:-90}" \
bash scripts/workphone_bff_acceptance.sh 2>&1 | tee "$EVID/02_bff.log" || EXIT=1
SDK_BASE_URL="$SDK" SDK_DEVICE_ID="$DEVICE_ID" \
python3 "$REPO_ROOT/sdk/scripts/matrix_hook_catalog_verify.py" -d "$DEVICE_ID" 2>&1 | tee "$EVID/03_hook_catalog.log" || true
export WORKPHONE_SDK_URL="$SDK"
python3 <<'PY' | tee "$EVID/04_revoke_e2e.json"
import json, urllib.request, time, os
SDK=os.environ["WORKPHONE_SDK_URL"]
BFF="http://127.0.0.1:8082"
DEV=os.environ.get("DEVICE_ID","xgfe65eimrrofyws")
out={"wireless_only": True, "results": []}
def req(url, data=None, token=None, timeout=120):
h={"Content-Type":"application/json"}
if token: h["Authorization"]="Bearer "+token
r=urllib.request.Request(url, (json.dumps(data).encode() if data is not None else None), headers=h, method=("POST" if data is not None else "GET"))
with urllib.request.urlopen(r, timeout=timeout) as resp:
return json.loads(resp.read())
token=req(BFF+"/v1/auth/login", {"account":"karuo","password":"zhiqun1984","typeId":1})["data"]["token"]
send=req(BFF+"/v1/workphone/message/send", {"device_id":DEV,"platform":"wechat","to_id":"filehelper","content":f"[无线撤回] {time.strftime('%H:%M:%S')}","msg_type":"text"}, token)
sd=(send.get("data") or {}).get("data", send.get("data"))
mid=str(sd.get("message_id")) if isinstance(sd,dict) and sd.get("message_id") else None
out["results"].append({"test":"send","ok":send.get("code")==200 and sd.get("verified"),"message_id":mid})
if mid:
time.sleep(2)
body={"device_id":DEV,"action":"revoke_message","params":{"msg_svr_id":mid,"talker":"filehelper"}}
r=urllib.request.Request(SDK+"/api/v3/wechat/execute", json.dumps(body).encode(), headers={"Content-Type":"application/json"}, method="POST")
rv=json.loads(urllib.request.urlopen(r, timeout=120).read())
d=rv.get("data") or {}
out["results"].append({"test":"revoke_message","ok":bool(d.get("verified") or d.get("success") or d.get("revoked")),"data":d})
time.sleep(3)
msgs=req(BFF+f"/v1/workphone/messages?device_id={DEV}&platform=wechat&limit=8&talker=filehelper", token=token)
items=(msgs.get("data") or {}).get("items") or (msgs.get("data") or {}).get("messages") or []
out["results"].append({"test":"revoke_in_history","ok":any("撤回" in str(m.get("content","")) or str(m.get("type"))=="10000" for m in items if isinstance(m,dict))})
out["pass"]=sum(1 for x in out["results"] if x.get("ok"))
out["total"]=len(out["results"])
print(json.dumps(out, ensure_ascii=False, indent=2))
PY
if command -v docker >/dev/null && docker ps --format '{{.Names}}' | grep -q cunkebao-server; then
docker exec cunkebao-server php tests/four_end_device_wechat_chain_test.php 2>&1 | tee "$EVID/05_four_end_chain.log" || EXIT=1
fi
echo "==> 汇总见 $EVID"
exit "$EXIT"