1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package rafthttp
16
17 import (
18 "bytes"
19 "reflect"
20 "testing"
21
22 "go.etcd.io/etcd/raft/v3/raftpb"
23 )
24
25 func TestMessage(t *testing.T) {
26
27 originalLimit := readBytesLimit
28 readBytesLimit = 1000
29 defer func() {
30 readBytesLimit = originalLimit
31 }()
32 tests := []struct {
33 msg raftpb.Message
34 encodeErr error
35 decodeErr error
36 }{
37 {
38 raftpb.Message{
39 Type: raftpb.MsgApp,
40 From: 1,
41 To: 2,
42 Term: 1,
43 LogTerm: 1,
44 Index: 3,
45 Entries: []raftpb.Entry{{Term: 1, Index: 4}},
46 },
47 nil,
48 nil,
49 },
50 {
51 raftpb.Message{
52 Type: raftpb.MsgProp,
53 From: 1,
54 To: 2,
55 Entries: []raftpb.Entry{
56 {Data: []byte("some data")},
57 {Data: []byte("some data")},
58 {Data: []byte("some data")},
59 },
60 },
61 nil,
62 nil,
63 },
64 {
65 raftpb.Message{
66 Type: raftpb.MsgProp,
67 From: 1,
68 To: 2,
69 Entries: []raftpb.Entry{
70 {Data: bytes.Repeat([]byte("a"), int(readBytesLimit+10))},
71 },
72 },
73 nil,
74 ErrExceedSizeLimit,
75 },
76 }
77 for i, tt := range tests {
78 b := &bytes.Buffer{}
79 enc := &messageEncoder{w: b}
80 if err := enc.encode(&tt.msg); err != tt.encodeErr {
81 t.Errorf("#%d: encode message error expected %v, got %v", i, tt.encodeErr, err)
82 continue
83 }
84 dec := &messageDecoder{r: b}
85 m, err := dec.decode()
86 if err != tt.decodeErr {
87 t.Errorf("#%d: decode message error expected %v, got %v", i, tt.decodeErr, err)
88 continue
89 }
90 if err == nil {
91 if !reflect.DeepEqual(m, tt.msg) {
92 t.Errorf("#%d: message = %+v, want %+v", i, m, tt.msg)
93 }
94 }
95 }
96 }
97
View as plain text