Browse Source

升级 Spring Boot 3.2.5 → 3.5.16,回归全部通过

- pom 父版本改为 3.5.16(Java 21 不变,Jackson 2 不变,代码零改动)
- 3.2.x 已停止开源维护,先落到 3.x 最后维护线收安全补丁
- 回归结果:api 四批 52+97+99+77、admin 45、store 登录态 20,全部 0 失败
- 新增 tools/seed_store_user.py:建/删 camel_test_admin 临时账号
- test_token_user.py 去掉写死的 storeUserId(改取登录返回的 userId),
  避免重建账号后 ID 漂移导致误报
tanlie 10 hours ago
parent
commit
147bbe6e50
3 changed files with 37 additions and 4 deletions
  1. 30 0
      tools/seed_store_user.py
  2. 6 3
      tools/test_token_user.py
  3. 1 1
      yoshop-java/pom.xml

+ 30 - 0
tools/seed_store_user.py

@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+"""创建/删除 store 端临时测试账号(配合 test_token_user.py 使用)。
+
+用法:
+    python tools/seed_store_user.py add      # 建账号 camel_test_admin / 123456
+    python tools/seed_store_user.py remove   # 跑完清理
+"""
+import re
+import sys
+
+import pymysql
+
+YML = r"F:/shop/java-rewrite/yoshop-java/src/main/resources/application.yml"
+PWD = re.findall(r"password:\s*(.+)", open(YML, encoding="utf-8").read())[0].strip().strip("\"'")
+HASH = "$2a$10$sh3uRv6KiZaab8973cVxXex533fU5oYUQlOMy97k1YmrM.YO3sJDK"  # 123456
+NAME = "camel_test_admin"
+
+conn = pymysql.connect(host="192.168.1.177", user="root", password=PWD,
+                       database="shop", charset="utf8mb4", autocommit=True)
+cur = conn.cursor()
+cur.execute("delete from yoshop_store_user where user_name=%s", (NAME,))
+if sys.argv[1] == "add":
+    cur.execute(
+        "insert into yoshop_store_user (user_name,password,real_name,is_super,is_delete,"
+        "sort,store_id,create_time,update_time) values (%s,%s,%s,0,0,100,10001,"
+        "unix_timestamp(),unix_timestamp())", (NAME, HASH, "temp"))
+    print("seeded", NAME, cur.lastrowid)
+else:
+    print("removed", NAME)
+conn.close()

+ 6 - 3
tools/test_token_user.py

@@ -9,7 +9,8 @@
   5. /store/store.user/renew 改资料后缓存被刷新,且不延长登录时长
   6. 登出后 key 删除,旧 token 再访问 401
 
-前置:Java 服务运行在 18080(yoshop.auth.mode=redis),库内有临时账号 camel_test_admin / 123456。
+前置:Java 服务运行在 18080(yoshop.auth.mode=redis),库内有临时账号 camel_test_admin / 123456
+      (先跑 `python tools/seed_store_user.py add` 创建,跑完 `remove` 清理)。
 """
 import json
 import socket
@@ -123,6 +124,8 @@ def main():
         res = login()
         check("登录成功", res.get("status") == 200, json.dumps(res, ensure_ascii=False))
         token = (res.get("data") or {}).get("token")
+        # 账号 ID 随库内自增变化,不写死(原为 10992,重建账号后会漂移)
+        uid = (res.get("data") or {}).get("userId")
         check("返回 token", isinstance(token, str) and len(token) == 32, str(token))
         if not token:
             return 1
@@ -139,7 +142,7 @@ def main():
             val = {}
         if isinstance(val, str):
             val = json.loads(val)
-        check("value 顶层就是用户字段", val.get("storeUserId") == 10992 and val.get("userName") == USER_NAME,
+        check("value 顶层就是用户字段", val.get("storeUserId") == uid and val.get("userName") == USER_NAME,
               json.dumps(val, ensure_ascii=False)[:200])
         check("不再有 user / store_id / is_login 包裹",
               not ({"user", "store_id", "is_login"} & set(val.keys())), sorted(val.keys()))
@@ -152,7 +155,7 @@ def main():
         info = get("/store/store.user/info", token)
         user_info = (info.get("data") or {}).get("userInfo") or {}
         check("info 返回 200", info.get("status") == 200, json.dumps(info, ensure_ascii=False)[:160])
-        check("userInfo 为当前登录用户", user_info.get("storeUserId") == 10992 and user_info.get("userName") == USER_NAME,
+        check("userInfo 为当前登录用户", user_info.get("storeUserId") == uid and user_info.get("userName") == USER_NAME,
               json.dumps(user_info, ensure_ascii=False)[:200])
         check("roles.isSuper = 0", ((info.get("data") or {}).get("roles") or {}).get("isSuper") == 0,
               json.dumps(info.get("data"), ensure_ascii=False)[:160])

+ 1 - 1
yoshop-java/pom.xml

@@ -7,7 +7,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>3.2.5</version>
+        <version>3.5.16</version>
         <relativePath/>
     </parent>