44 lines
1.4 KiB
Go
44 lines
1.4 KiB
Go
package huya
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"huya-go/internal/wup"
|
|
)
|
|
|
|
// TestProtocolResponseErrorCarriesDiagnostics 验证「缺少 tRsp/tResp」错误会带上 WUP 诊断信息,
|
|
// 并且可以用 errors.Is 判定——上层据此把它单独归类(sniper.CategoryProtocol),
|
|
// 而不是混进普通失败里(2026-10-16 pc-3 同一账号连续 13 次命中该错误)。
|
|
func TestProtocolResponseErrorCarriesDiagnostics(t *testing.T) {
|
|
resp := &wup.Response{
|
|
Message: -1,
|
|
Status: map[string]string{"STATUS_RESULT_CODE": "-1"},
|
|
NewData: map[string][]byte{"tErr": {0x0c}},
|
|
}
|
|
err := protocolResponseError(ServantWebActUI, FuncExchangePrize, resp)
|
|
if !errors.Is(err, ErrProtocolResponse) {
|
|
t.Fatalf("错误应可用 errors.Is(ErrProtocolResponse) 判定: %v", err)
|
|
}
|
|
text := err.Error()
|
|
for _, want := range []string{
|
|
"响应缺少 tRsp/tResp",
|
|
"iRet=-1",
|
|
"STATUS_RESULT_CODE=-1",
|
|
"keys={tErr(1B)}",
|
|
} {
|
|
if !strings.Contains(text, want) {
|
|
t.Fatalf("错误信息 %q 缺少 %q", text, want)
|
|
}
|
|
}
|
|
|
|
empty := protocolResponseError(ServantWebActUI, FuncExchangePrize, nil)
|
|
if !errors.Is(empty, ErrProtocolResponse) || !strings.Contains(empty.Error(), "响应缺少 tRsp/tResp") {
|
|
t.Fatalf("空响应错误=%v", empty)
|
|
}
|
|
if errors.Is(errors.New("timeout"), ErrProtocolResponse) {
|
|
t.Fatal("普通错误不该被判定为协议错误")
|
|
}
|
|
}
|