ソースを参照

Add test conntraffic

tags/v2.0.0-rc1
9seconds 5年前
コミット
7e7823118e
2個のファイルの変更164行の追加0行の削除
  1. 150
    0
      mtglib/conns_internal_test.go
  2. 14
    0
      mtglib/init_internal_test.go

+ 150
- 0
mtglib/conns_internal_test.go ファイルの表示

@@ -0,0 +1,150 @@
1
+package mtglib
2
+
3
+import (
4
+	"context"
5
+	"errors"
6
+	"io"
7
+	"testing"
8
+	"time"
9
+
10
+	"github.com/9seconds/mtg/v2/testlib"
11
+	"github.com/stretchr/testify/mock"
12
+	"github.com/stretchr/testify/suite"
13
+)
14
+
15
+type ConnTrafficTestSuite struct {
16
+	suite.Suite
17
+
18
+	eventStreamMock *EventStreamMock
19
+	connMock        *testlib.NetConnMock
20
+	conn            io.ReadWriter
21
+}
22
+
23
+func (suite *ConnTrafficTestSuite) SetupTest() {
24
+	suite.eventStreamMock = &EventStreamMock{}
25
+	suite.connMock = &testlib.NetConnMock{}
26
+	suite.conn = connTraffic{
27
+		Conn:   suite.connMock,
28
+		connID: "CONNID",
29
+		ctx:    context.Background(),
30
+		stream: suite.eventStreamMock,
31
+	}
32
+}
33
+
34
+func (suite *ConnTrafficTestSuite) TearDownTest() {
35
+	suite.eventStreamMock.AssertExpectations(suite.T())
36
+	suite.connMock.AssertExpectations(suite.T())
37
+}
38
+
39
+func (suite *ConnTrafficTestSuite) TestReadOk() {
40
+	suite.eventStreamMock.
41
+		On("Send", mock.Anything, mock.Anything).
42
+		Once().
43
+		Run(func(args mock.Arguments) {
44
+			evt := args.Get(1).(EventTraffic)
45
+
46
+			suite.Equal("CONNID", evt.StreamID())
47
+			suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second)
48
+			suite.EqualValues(10, evt.Traffic)
49
+			suite.True(evt.IsRead)
50
+		})
51
+	suite.connMock.On("Read", mock.Anything).Once().Return(10, nil)
52
+
53
+	n, err := suite.conn.Read(make([]byte, 10))
54
+	suite.NoError(err)
55
+	suite.Equal(10, n)
56
+}
57
+
58
+func (suite *ConnTrafficTestSuite) TestReadErr() {
59
+	suite.eventStreamMock.
60
+		On("Send", mock.Anything, mock.Anything).
61
+		Once().
62
+		Run(func(args mock.Arguments) {
63
+			evt := args.Get(1).(EventTraffic)
64
+
65
+			suite.Equal("CONNID", evt.StreamID())
66
+			suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second)
67
+			suite.EqualValues(10, evt.Traffic)
68
+			suite.True(evt.IsRead)
69
+		})
70
+	suite.connMock.On("Read", mock.Anything).Once().Return(10, io.EOF)
71
+
72
+	n, err := suite.conn.Read(make([]byte, 10))
73
+	suite.True(errors.Is(err, io.EOF))
74
+	suite.Equal(10, n)
75
+}
76
+
77
+func (suite *ConnTrafficTestSuite) TestReadNothingOk() {
78
+	suite.connMock.On("Read", mock.Anything).Once().Return(0, nil)
79
+
80
+	n, err := suite.conn.Read(make([]byte, 10))
81
+	suite.NoError(err)
82
+	suite.Equal(0, n)
83
+}
84
+
85
+func (suite *ConnTrafficTestSuite) TestReadNothingErr() {
86
+	suite.connMock.On("Read", mock.Anything).Once().Return(0, io.EOF)
87
+
88
+	n, err := suite.conn.Read(make([]byte, 10))
89
+	suite.True(errors.Is(err, io.EOF))
90
+	suite.Equal(0, n)
91
+}
92
+
93
+func (suite *ConnTrafficTestSuite) TestWriteOk() {
94
+	suite.eventStreamMock.
95
+		On("Send", mock.Anything, mock.Anything).
96
+		Once().
97
+		Run(func(args mock.Arguments) {
98
+			evt := args.Get(1).(EventTraffic)
99
+
100
+			suite.Equal("CONNID", evt.StreamID())
101
+			suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second)
102
+			suite.EqualValues(10, evt.Traffic)
103
+			suite.False(evt.IsRead)
104
+		})
105
+	suite.connMock.On("Write", mock.Anything).Once().Return(10, nil)
106
+
107
+	n, err := suite.conn.Write(make([]byte, 10))
108
+	suite.NoError(err)
109
+	suite.Equal(10, n)
110
+}
111
+
112
+func (suite *ConnTrafficTestSuite) TestWriteErr() {
113
+	suite.eventStreamMock.
114
+		On("Send", mock.Anything, mock.Anything).
115
+		Once().
116
+		Run(func(args mock.Arguments) {
117
+			evt := args.Get(1).(EventTraffic)
118
+
119
+			suite.Equal("CONNID", evt.StreamID())
120
+			suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second)
121
+			suite.EqualValues(10, evt.Traffic)
122
+			suite.False(evt.IsRead)
123
+		})
124
+	suite.connMock.On("Write", mock.Anything).Once().Return(10, io.EOF)
125
+
126
+	n, err := suite.conn.Write(make([]byte, 10))
127
+	suite.True(errors.Is(err, io.EOF))
128
+	suite.Equal(10, n)
129
+}
130
+
131
+func (suite *ConnTrafficTestSuite) TestWriteNothingOk() {
132
+	suite.connMock.On("Write", mock.Anything).Once().Return(0, nil)
133
+
134
+	n, err := suite.conn.Write(make([]byte, 10))
135
+	suite.NoError(err)
136
+	suite.Equal(0, n)
137
+}
138
+
139
+func (suite *ConnTrafficTestSuite) TestWriteNothingErr() {
140
+	suite.connMock.On("Write", mock.Anything).Once().Return(0, io.EOF)
141
+
142
+	n, err := suite.conn.Write(make([]byte, 10))
143
+	suite.True(errors.Is(err, io.EOF))
144
+	suite.Equal(0, n)
145
+}
146
+
147
+func TestConnTraffic(t *testing.T) {
148
+	t.Parallel()
149
+	suite.Run(t, &ConnTrafficTestSuite{})
150
+}

+ 14
- 0
mtglib/init_internal_test.go ファイルの表示

@@ -1,5 +1,11 @@
1 1
 package mtglib
2 2
 
3
+import (
4
+	"context"
5
+
6
+	"github.com/stretchr/testify/mock"
7
+)
8
+
3 9
 type NoopLogger struct{}
4 10
 
5 11
 func (n NoopLogger) Named(_ string) Logger             { return n }
@@ -12,3 +18,11 @@ func (n NoopLogger) Debug(_ string)                    {}
12 18
 func (n NoopLogger) InfoError(_ string, _ error)       {}
13 19
 func (n NoopLogger) WarningError(_ string, _ error)    {}
14 20
 func (n NoopLogger) DebugError(_ string, _ error)      {}
21
+
22
+type EventStreamMock struct {
23
+	mock.Mock
24
+}
25
+
26
+func (e *EventStreamMock) Send(ctx context.Context, evt Event) {
27
+	e.Called(ctx, evt)
28
+}

読み込み中…
キャンセル
保存