feat(gomsg): pymsg/libmsg 协议的 Go 实现,waf logclient 抽取接入
- 新增 gomsg/:帧协议(4B 大端长度 + UTF-8,64MiB 上限)、MsgClient/MsgServer、 RpcClient/RpcServer(_route 分发、错误脱敏、panic 恢复、json.Number 保精度)、 AsyncQueue[T]、LogClient(集中式日志,级别过滤 + fail-safe),线协议与 Python/C++ 字节级兼容 - waf/internal/logclient 改为 gomsg 薄适配层(336→20 行),main/engine/proxy 零改动 - gomsg 26 项单测全绿(-race);waf 编译通过
This commit is contained in:
1 parent
0ed03ac095
commit
c4154d4db9
16 files changed
+1624
-317
No files matched your search
@@ -0,0 +1,66 @@
|
||||
package gomsg
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"io"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestEncodeRoundTrip(t *testing.T) {
|
||||
payload := []byte(`{"hello":"世界"}`)
|
||||
frame, err := Encode(payload)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(frame) != 4+len(payload) {
|
||||
t.Fatalf("frame length = %d, want %d", len(frame), 4+len(payload))
|
||||
}
|
||||
if got := binary.BigEndian.Uint32(frame[:4]); got != uint32(len(payload)) {
|
||||
t.Fatalf("header = %d, want %d", got, len(payload))
|
||||
}
|
||||
got, err := ReadFrame(bytes.NewReader(frame), 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !bytes.Equal(got, payload) {
|
||||
t.Fatalf("payload mismatch: %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEncodeTooLarge(t *testing.T) {
|
||||
payload := make([]byte, MaxMsgSize+1)
|
||||
if _, err := Encode(payload); err == nil {
|
||||
t.Fatal("expected error for oversized payload")
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadFrameTooLarge(t *testing.T) {
|
||||
header := make([]byte, 4)
|
||||
binary.BigEndian.PutUint32(header, MaxMsgSize+1)
|
||||
_, err := ReadFrame(bytes.NewReader(header), 0)
|
||||
if err == nil {
|
||||
t.Fatal("expected error for oversized header")
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadFrameTruncated(t *testing.T) {
|
||||
frame, _ := Encode([]byte("abcdef"))
|
||||
if _, err := ReadFrame(bytes.NewReader(frame[:len(frame)-3]), 0); err == nil {
|
||||
t.Fatal("expected error for truncated payload")
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadFrameMaxParam(t *testing.T) {
|
||||
frame, _ := Encode([]byte("hello"))
|
||||
if _, err := ReadFrame(bytes.NewReader(frame), 4); err == nil {
|
||||
t.Fatal("expected error when max < payload length")
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadFrameEOF(t *testing.T) {
|
||||
if _, err := ReadFrame(bytes.NewReader(nil), 0); !errors.Is(err, io.EOF) {
|
||||
t.Fatalf("expected EOF, got %v", err)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user