aurora / internal /prooftoken /prooftoken_test.go
qwen2api's picture
Upload 113 files
6bc074c verified
Raw
History Blame Contribute Delete
2.48 kB
package prooftoken
import (
"strings"
"testing"
)
// TestSolveProofOfWork_FallbackFormat 验证 fallback 格式对齐 SDK:
// "gAAAAAB" + ErrorPrefix + base64(JSON.stringify("e")) + "~S"
//
// 期望 token 形如: gAAAAABwQ8Lk5FbGpA2NcR9dShT6gYjU7VxZ4DImUi~S
// - gAAAAAB PrefixProof
// - wQ8Lk5FbGpA2NcR9dShT6gYjU7VxZ4D ErrorPrefix (32 chars)
// - ImUi base64(JSON.stringify("e")) = base64("\"e\"")
// - ~S Suffix
func TestSolveProofOfWork_FallbackFormat(t *testing.T) {
// 用空 seed/empty difficulty 走短路,不应进 fallback
tok := (&Config{}).SolveProofOfWork("", "")
if tok != PrefixProof+Suffix {
t.Fatalf("empty inputs should short-circuit to %q, got %q", PrefixProof+Suffix, tok)
}
// 真正触发 500k 循环 + fallback — 用极难 difficulty 强制 fallback
// (5e5 次循环在不命中条件下大约几秒;这里测 BuildFailToken 直接验证格式)
tok = BuildFailToken("")
if !strings.HasPrefix(tok, PrefixProof+ErrorPrefix) {
t.Fatalf("BuildFailToken prefix wrong: %q", tok)
}
if !strings.HasSuffix(tok, Suffix) {
t.Fatalf("BuildFailToken suffix wrong: %q", tok)
}
// 中间段应该是 DefaultErrorPayload
mid := tok[len(PrefixProof+ErrorPrefix) : len(tok)-len(Suffix)]
if mid != DefaultErrorPayload {
t.Fatalf("BuildFailToken middle = %q, want %q (= base64(JSON.stringify(\"e\")))", mid, DefaultErrorPayload)
}
// 显式错误信息:应该 base64(JSON.stringify(message))
tok = BuildFailToken("hash error")
if !strings.HasPrefix(tok, PrefixProof+ErrorPrefix) {
t.Fatalf("BuildFailToken(err) prefix wrong: %q", tok)
}
if !strings.HasSuffix(tok, Suffix) {
t.Fatalf("BuildFailToken(err) suffix wrong: %q", tok)
}
mid = tok[len(PrefixProof+ErrorPrefix) : len(tok)-len(Suffix)]
wantMid := EncodeString("hash error")
if mid != wantMid {
t.Fatalf("BuildFailToken(err) middle = %q, want %q", mid, wantMid)
}
}
// TestEncodeString 验证 EncodeString 行为 = base64(JSON.stringify(s))。
// JSON.stringify("e") = `"e"` (含引号) → base64 = "ImUi"
// JSON.stringify("hello") = `"hello"` (含引号) → base64 = "ImhlbGxvIg=="
func TestEncodeString(t *testing.T) {
if got := EncodeString("e"); got != "ImUi" {
t.Fatalf("EncodeString(\"e\") = %q, want %q", got, "ImUi")
}
if got := EncodeString("hello"); got != "ImhlbGxvIg==" {
t.Fatalf("EncodeString(\"hello\") = %q, want %q", got, "ImhlbGxvIg==")
}
}