|
|
@@ -1,6 +1,7 @@
|
|
1
|
1
|
package mtglib
|
|
2
|
2
|
|
|
3
|
3
|
import (
|
|
|
4
|
+ "bytes"
|
|
4
|
5
|
"context"
|
|
5
|
6
|
"errors"
|
|
6
|
7
|
"io"
|
|
|
@@ -12,6 +13,18 @@ import (
|
|
12
|
13
|
"github.com/stretchr/testify/suite"
|
|
13
|
14
|
)
|
|
14
|
15
|
|
|
|
16
|
+type ConnRewindBaseConn struct {
|
|
|
17
|
+ testlib.NetConnMock
|
|
|
18
|
+
|
|
|
19
|
+ readBuffer bytes.Buffer
|
|
|
20
|
+}
|
|
|
21
|
+
|
|
|
22
|
+func (c *ConnRewindBaseConn) Read(p []byte) (int, error) {
|
|
|
23
|
+ c.Called(p)
|
|
|
24
|
+
|
|
|
25
|
+ return c.readBuffer.Read(p)
|
|
|
26
|
+}
|
|
|
27
|
+
|
|
15
|
28
|
type ConnTrafficTestSuite struct {
|
|
16
|
29
|
suite.Suite
|
|
17
|
30
|
|
|
|
@@ -144,7 +157,51 @@ func (suite *ConnTrafficTestSuite) TestWriteNothingErr() {
|
|
144
|
157
|
suite.Equal(0, n)
|
|
145
|
158
|
}
|
|
146
|
159
|
|
|
|
160
|
+type ConnRewindTestSuite struct {
|
|
|
161
|
+ suite.Suite
|
|
|
162
|
+
|
|
|
163
|
+ connMock *ConnRewindBaseConn
|
|
|
164
|
+ conn *connRewind
|
|
|
165
|
+}
|
|
|
166
|
+
|
|
|
167
|
+func (suite *ConnRewindTestSuite) SetupTest() {
|
|
|
168
|
+ suite.connMock = &ConnRewindBaseConn{}
|
|
|
169
|
+ suite.conn = newConnRewind(suite.connMock)
|
|
|
170
|
+}
|
|
|
171
|
+
|
|
|
172
|
+func (suite *ConnRewindTestSuite) TearDownTest() {
|
|
|
173
|
+ suite.connMock.AssertExpectations(suite.T())
|
|
|
174
|
+}
|
|
|
175
|
+
|
|
|
176
|
+func (suite *ConnRewindTestSuite) TestRead() {
|
|
|
177
|
+ suite.connMock.On("Read", mock.Anything)
|
|
|
178
|
+ suite.connMock.readBuffer.Write([]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10})
|
|
|
179
|
+
|
|
|
180
|
+ buf := make([]byte, 2)
|
|
|
181
|
+
|
|
|
182
|
+ n, err := suite.conn.Read(buf)
|
|
|
183
|
+ suite.NoError(err)
|
|
|
184
|
+ suite.Equal(2, n)
|
|
|
185
|
+ suite.Equal([]byte{1, 2}, buf)
|
|
|
186
|
+
|
|
|
187
|
+ n, err = suite.conn.Read(buf)
|
|
|
188
|
+ suite.NoError(err)
|
|
|
189
|
+ suite.Equal(2, n)
|
|
|
190
|
+ suite.Equal([]byte{3, 4}, buf)
|
|
|
191
|
+
|
|
|
192
|
+ suite.conn.Rewind()
|
|
|
193
|
+
|
|
|
194
|
+ data, err := io.ReadAll(suite.conn)
|
|
|
195
|
+ suite.NoError(err)
|
|
|
196
|
+ suite.Equal([]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, data)
|
|
|
197
|
+}
|
|
|
198
|
+
|
|
147
|
199
|
func TestConnTraffic(t *testing.T) {
|
|
148
|
200
|
t.Parallel()
|
|
149
|
201
|
suite.Run(t, &ConnTrafficTestSuite{})
|
|
150
|
202
|
}
|
|
|
203
|
+
|
|
|
204
|
+func TestConnRewind(t *testing.T) {
|
|
|
205
|
+ t.Parallel()
|
|
|
206
|
+ suite.Run(t, &ConnRewindTestSuite{})
|
|
|
207
|
+}
|