-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconn_test.go
163 lines (136 loc) · 4.01 KB
/
conn_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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package gtcp
import (
"bytes"
"encoding/binary"
"testing"
)
var testChanData = [...]string{
"hello world!",
"12312u4h18yg4912g49",
"你好世界!",
"こんにちは世界",
`Contributing
To hack on this project:
Install as usual (go get -u github.com/firstrow/tcp_server)
Create your feature branch (git checkout -b my-new-feature)
Ensure everything works and the tests pass (go test)
Commit your changes (git commit -am 'Add some feature')
Contribute upstream:
Fork it on GitHub
Add your remote (git remote add fork git@github.com:firstrow/tcp_server.git)
Push to the branch (git push fork my-new-feature)
Create a new Pull Request on GitHub
Notice: Always use the original import path by installing with go get.`,
}
const (
Addr = "127.0.0.1:8005"
)
func assertEqual(t *testing.T, expect string, got string, msg string) {
if expect != got {
t.Errorf(`%s: expect %s(%d),\n but got %s(%d)`, msg, expect, len(expect), got, len(got))
}
}
func AddHeader(data []byte) string {
length := uint32(len(data))
head := make([]byte, 4)
binary.LittleEndian.PutUint32(head, length)
buf := bytes.NewBuffer(head)
buf.Write(data)
return buf.String()
}
func TestTCPConnInterface(t *testing.T) {
TCPChan := make(chan TCPConnInterface)
listener, err := NewTCPListener(Addr)
if err != nil {
t.Errorf("tcp listener err: %s", err.Error())
}
defer listener.Close()
go func() {
tcpConn, err := listener.Accept()
if err != nil {
t.Errorf("tcp listener err: %s", err.Error())
}
TCPChan <- tcpConn
}()
client, err := DialTCP(Addr)
if err != nil {
t.Errorf("tcp listener err: %s", err.Error())
}
client.Start()
var server TCPConnInterface
select {
case server = <-TCPChan:
break
}
server.Start()
for _, testStr := range testChanData {
_, _ = client.Write([]byte(testStr))
resultBytes := <-server.GetDataChan()
assertEqual(t, string(resultBytes), AddHeader([]byte(testStr)), "TCP add header data err (client -> server)")
}
for _, testStr := range testChanData {
_, _ = server.Write([]byte(testStr))
resultBytes := <-client.GetDataChan()
assertEqual(t, string(resultBytes), AddHeader([]byte(testStr)), "TCP add header data err (server -> client)")
}
for _, testStr := range testChanData {
_, _ = client.Write([]byte(testStr))
resultBytes := server.ReadData()
assertEqual(t, string(resultBytes), testStr, "TCP data err (client -> server)")
}
for _, testStr := range testChanData {
_, _ = server.Write([]byte(testStr))
resultBytes := client.ReadData()
assertEqual(t, string(resultBytes), testStr, "TCP data err (server -> client)")
}
server.CloseOnce()
}
func TestTCPConn(t *testing.T) {
OpenPool(10)
TestTCPConnInterface(t)
TCPChan := make(chan *TCPConn)
listener, err := NewTCPListener(Addr)
if err != nil {
t.Errorf("tcp listener err: %s", err.Error())
}
defer listener.Close()
go func() {
tcpConn, err := listener.AcceptTCP()
if err != nil {
t.Errorf("tcp listener err: %s", err.Error())
}
TCPChan <- tcpConn
}()
client, err := DialTCP(Addr)
if err != nil {
t.Errorf("tcp listener err: %s", err.Error())
}
client.Start()
var server TCPConnInterface
select {
case server = <-TCPChan:
break
}
server.Start()
for _, testStr := range testChanData {
_, _ = client.Write([]byte(testStr))
resultBytes := <-server.GetDataChan()
assertEqual(t, string(resultBytes), AddHeader([]byte(testStr)), "TCP add header data err (client -> server)")
}
for _, testStr := range testChanData {
_, _ = server.Write([]byte(testStr))
resultBytes := <-client.GetDataChan()
assertEqual(t, string(resultBytes), AddHeader([]byte(testStr)), "TCP add header data err (server -> client)")
}
for _, testStr := range testChanData {
_, _ = client.Write([]byte(testStr))
resultBytes := server.ReadData()
assertEqual(t, string(resultBytes), testStr, "TCP data err (client -> server)")
}
for _, testStr := range testChanData {
_, _ = server.Write([]byte(testStr))
resultBytes := client.ReadData()
assertEqual(t, string(resultBytes), testStr, "TCP data err (server -> client)")
}
server.Close()
}