package service import ( "strings" "testing" "unicode/utf8" ) // TestTruncateCallbackRaw 回调报文截断:短报文原样保留,长报文按上限截断且不产生非法 UTF-8 // (退款流水 callback_raw 为 utf8mb4 列,写入非法字节会直接报错)。 func TestTruncateCallbackRaw(t *testing.T) { short := `{"Event":"xpay_refund_notify","MchOrderId":"OD1"}` if got := truncateCallbackRaw(short); got != short { t.Fatalf("short raw should be kept as-is, got %q", got) } // 构造跨越截断边界的多字节报文:4KB 边界前后都是中文字符。 long := strings.Repeat("退", 3000) got := truncateCallbackRaw(long) if len(got) > 4096 { t.Fatalf("truncated length = %d, want <= 4096", len(got)) } if !utf8.ValidString(got) { t.Fatal("truncated raw must be valid UTF-8") } if got == "" || !strings.HasPrefix(long, got) { t.Fatalf("truncated raw should be a prefix of the original, got prefix=%q", got[:min(8, len(got))]) } }