Files
huya-go/internal/huya/diagnose_test.go
T

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("普通错误不该被判定为协议错误")
}
}