节点在线、应用在线、配置在线使用令牌查询
|
# Checklist
## 实现完整性
- [x] UploadPackageAsync 方法ç¾åä¿æŒä¸å˜ï¼Œè°ƒç”¨æ–¹ OnCompile æ— éœ€ä¿®æ”¹
- [x] 新增 PostUploadAsync 方法å°è£…啿¬¡ä¸Šä¼ 逻辑,支æŒé‡è¯•å¤ç”¨
- [x] 新增 EnsureLoginAsync 方法,调用 _client.Login 刷新 token
- [x] UploadResult 类能æ£ç¡®è§£æž code==401 作为é‡è®¤è¯ä¿¡å·ï¼ˆIsUnauthorizedBody 辅助方法)
## é‡è¯•逻辑
- [x] 最多é‡è¯• 3 次,第 N 次失败åŽå»¶è¿Ÿ (2^(N-1)) 秒(1s → 2s → 4s)
- [x] æ¯æ¬¡é‡è¯•打å°"第 N 次é‡è¯•ï¼ŒåŽŸå› ï¼šxxx,ç‰å¾… N ç§’"日志
- [x] æ•获 HttpRequestExceptionã€IOExceptionã€SocketExceptionã€TaskCanceledException ç‰ç½‘络异常触å‘é‡è¯•
- [x] æ•获æœåŠ¡ç«¯ 5xx 状æ€ç (500/502/503/504)触å‘é‡è¯•
- [x] 所有é‡è¯•è€—å°½åŽæŠ›å‡ºå«æœ€åŽä¸€æ¬¡å¤±è´¥åŽŸå› çš„å¼‚å¸¸
## 401 é‡è®¤è¯é€»è¾‘
- [x] 检测 HTTP 401 状æ€ç 或å“应体 code==401 触å‘釿–°ç™»å½•
- [x] 调用 _client.Login("ä¸Šä¼ è®¤è¯å¤±æ•ˆé‡è¯•") èŽ·å–æ–° token
- [x] 用新 token 更新 HttpClient 的 X-Token 请求头
- [x] 401 触å‘çš„é‡è¯•䏿¶ˆè€—é‡è¯•次数é…é¢
- [x] 釿–°ç™»å½•失败时抛出异常终æ¢ç¼–译任务
- [x] 记录"Token å¤±æ•ˆï¼Œé‡æ–°ç™»å½•"å’Œ"釿–°ç™»å½•失败"日志
## 文件æµå®‰å…¨
- [x] æ¯æ¬¡é‡è¯•釿–° new FileStream(packagePath, ...) 创建新æµ
- [x] 上一次失败的文件æµè¢« await using æ£ç¡®é‡Šæ”¾
- [x] 文件æµä½ç½®ä»Ž 0 开始,确ä¿å®Œæ•´é‡ä¼
## å•元测试
- [x] 新增测试:模拟 401 åŽé‡æ–°ç™»å½•å¹¶é‡è¯•æˆåŠŸ
- [x] 新增测试:模拟连ç»ç½‘络异常åŽå¤±è´¥
- [x] 新增测试:模拟 401 åŽå“应体 code=401 被æ£ç¡®è¯†åˆ«
- [x] 所有原有 DeployControllerTests 测试ä»é€šè¿‡ï¼ˆå›žå½’,10/10)
## 编译与集æˆ
- [x] DeployAgent é¡¹ç›®ç¼–è¯‘æ— é”™è¯¯
- [x] ServerTest é¡¹ç›®ç¼–è¯‘æ— é”™è¯¯
- [x] dotnet test --filter "FullyQualifiedName~DeployControllerTests" 全部通过(10/10)
|