#!/usr/bin/env bash # 切换后功能验证 v2(在 47 上跑) # ① 既有用户 guest:应留 ,且**工作区有历史数据**(文件在 47 的盘上) # ② 新用户:应落 ,且**建的文件真的出现在 106 的盘上**(文件面路由已修) # 判据:实例页必须带 /dev/null printf '%s' "$T" } owner() { PG "select u.username||' -> '||coalesce(i.host_id,'NULL')||' epoch='||i.epoch from users u left join dsh_instances i on i.user_id=u.id where u.username='$1'"; } agent() { curl -s -m 6 -H "x-dsh-agent-token: $2" "http://127.0.0.1:$1/healthz" | grep -o '"instances":[0-9]*'; } isapp() { grep -q '/dev/null | wc -l) 项(>0 = 数据在 47 ✓)" echo echo "############ ② 新用户(应落 "$DSH_PEER_HOST_ID" + 文件真的写到 106 盘) ############" NU="swtest$(date +%H%M%S)" AT=$(mksess admin); AC="sid=$AT" echo " register=$(curl -s -m 15 -X POST -H 'content-type: application/json' -d "{\"username\":\"$NU\",\"password\":\"SwitchTest123\"}" "$M/api/auth/register" -o /dev/null -w '%{http_code}')" NU_ID=$(PG "select id from users where username='$NU'") echo " approve=$(curl -s -m 15 -X POST -b "$AC" "$M/api/admin/users/$NU_ID/approve" -o /dev/null -w '%{http_code}')" NC=$(curl -s -m 15 -X POST -H 'content-type: application/json' -d "{\"username\":\"$NU\",\"password\":\"SwitchTest123\"}" -D - "$M/api/auth/login" -o /dev/null | grep -i '^set-cookie' | head -1 | grep -oP 'sid=[^;]+') echo " mkdir=$(curl -s -m 15 -X POST -b "$NC" -H 'content-type: application/json' -d '{"path":"proj"}' "$M/api/fs/mkdir" -o /dev/null -w '%{http_code}')" echo " upload=$(curl -s -m 20 -X POST -b "$NC" -H 'content-type: application/json' -d "{\"path\":\"proj\",\"name\":\"hello.txt\",\"data\":\"$(printf 'hi-from-switch' | base64 -w0)\"}" "$M/api/fs/upload" -o /dev/null -w '%{http_code}')" echo " launch=$(curl -s -m 60 -X POST -b "$NC" -H 'content-type: application/json' -d '{"folder":"proj"}' "$M/api/dsh/launch" -o /dev/null -w '%{http_code}')" sleep 4 echo " 归属: $(owner "$NU") ← 期望 "$DSH_PEER_HOST_ID"" echo " "$DSH_PEER_HOST_ID"=$(agent 19000 $T106) "$DSHS_CLUSTER_HOST_ID"=$(agent 19100 $T47)" echo " --- 文件落盘取证(这才是文件面路由修好的证据) ---" echo " 47 盘: $(ls "$DSHS_DATA_ROOT"/users/$NU_ID/ws/proj/hello.txt 2>/dev/null && echo 存在 || echo '不存在 ✓(不应在 47)')" echo " 106 盘: $(ssh -n -i /root/.ssh/dshworker_ed25519 -o BatchMode=yes -o StrictHostKeyChecking=accept-new root@"$DSH_PEER_PUBLIC_IP" "ls "$DSHS_DATA_ROOT"/users/$NU_ID/ws/proj/hello.txt 2>/dev/null" 2>/dev/null && echo 存在✓ || echo '不存在 ✗')" NU_PAGE=$(curl -s -m 25 -L -b "$NC" -H "Host: $NU.$DOMAIN" "$M/" | head -c 300) echo " 实例页(Host: $NU.$DOMAIN): $(isapp "$NU_PAGE")" echo echo "############ 收尾 ############" curl -s -m 40 -X POST -b "$GC" "$M/api/dsh/stop" -o /dev/null -w " guest stop=%{http_code}\n" curl -s -m 40 -X POST -b "$NC" "$M/api/dsh/stop" -o /dev/null -w " newuser stop=%{http_code}\n" PG "delete from sessions where user_agent='switch-verify'" >/dev/null echo " 残留临时 session: $(PG "select count(*) from sessions where user_agent='switch-verify'")(应 0)" echo " 新用户记录: $NU / $NU_ID"