-
Notifications
You must be signed in to change notification settings - Fork 0
/
protocol_test.go
105 lines (89 loc) · 2.38 KB
/
protocol_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package event
import (
"bytes"
"encoding/gob"
"net"
"net/netip"
"testing"
"github.com/stretchr/testify/assert"
)
func TestSerializedStream(t *testing.T) {
message := "Heelo world!\n"
server, client := net.Pipe()
serverConn := NewSerializedConn(server)
clientConn := NewSerializedConn(client)
go func() {
err := clientConn.Write(&message)
if err != nil {
t.Errorf("Error when sending the message: %s", err.Error())
}
}()
rec := ""
err := serverConn.Read(&rec)
assert.NoError(t, err, "Unexpected error.")
assert.Equal(t, message, rec, "Invalid message.")
}
func TestSerialize(t *testing.T) {
s := NewSerializer()
d := testData{
Author: "BS",
Message: "Hello from BS",
}
e := Event{Type: 1}
err := Serialize(&d, &e, s)
assert.NoError(t, err, "Unexpected error")
assert.NotEmpty(t, e.AppData, "The encoded data is not present")
}
func TestDeserialize(t *testing.T) {
s := NewSerializer()
d := testData{
Author: "BS",
Message: "Hello from BS",
}
buf := new(bytes.Buffer)
gob.NewEncoder(buf).Encode(d)
e := Event{1, buf.Bytes()}
res := new(testData)
err := Deserialize(e, res, s)
assert.NoError(t, err, "Unexpected error occured")
assert.Equal(t, d.Author, res.Author, "Deserialized data was corrupted")
assert.Equal(t, d.Message, res.Message, "Deserialized data was corrupted")
}
type testData struct {
Author string
Message string
}
func TestTypeEncodedOnlyOnce(t *testing.T) {
s := NewSerializer()
td := testData{
Author: "BS",
Message: "Hello from BS",
}
e1 := Event{Type: 1}
e2 := Event{Type: 1}
Serialize(&td, &e1, s)
Serialize(&td, &e2, s)
assert.Less(t, len(e2.AppData), len(e1.AppData), "Second encoding should be shorter (type definition skipped)")
}
func TestSerializerRegister(t *testing.T) {
s := NewSerializer()
td := testData{}
s.Register([]any{&td})
e1 := Event{Type: 1}
e2 := Event{Type: 1}
Serialize(&td, &e1, s)
Serialize(&td, &e2, s)
assert.Equal(t, len(e1.AppData), len(e2.AppData), "")
}
func TestHash(t *testing.T) {
addrPort, err := netip.ParseAddrPort("127.0.0.1:3000")
hash := Hash(addrPort)
assert.NoError(t, err, "Unexpected error")
assert.EqualValues(t, 4055534008, hash, "Incorrect hash")
}
func TestHashAddr(t *testing.T) {
addr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:3000")
hash, err := HashAddr(addr)
assert.NoError(t, err, "Unexpected error")
assert.EqualValues(t, 4055534008, hash, "Incorrect hash")
}