From 7e7823118ec91c1389f968408653887ca26d4a03 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Fri, 2 Apr 2021 12:40:22 +0300 Subject: [PATCH] Add test conntraffic --- mtglib/conns_internal_test.go | 150 ++++++++++++++++++++++++++++++++++ mtglib/init_internal_test.go | 14 ++++ 2 files changed, 164 insertions(+) create mode 100644 mtglib/conns_internal_test.go diff --git a/mtglib/conns_internal_test.go b/mtglib/conns_internal_test.go new file mode 100644 index 0000000..12fecb4 --- /dev/null +++ b/mtglib/conns_internal_test.go @@ -0,0 +1,150 @@ +package mtglib + +import ( + "context" + "errors" + "io" + "testing" + "time" + + "github.com/9seconds/mtg/v2/testlib" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" +) + +type ConnTrafficTestSuite struct { + suite.Suite + + eventStreamMock *EventStreamMock + connMock *testlib.NetConnMock + conn io.ReadWriter +} + +func (suite *ConnTrafficTestSuite) SetupTest() { + suite.eventStreamMock = &EventStreamMock{} + suite.connMock = &testlib.NetConnMock{} + suite.conn = connTraffic{ + Conn: suite.connMock, + connID: "CONNID", + ctx: context.Background(), + stream: suite.eventStreamMock, + } +} + +func (suite *ConnTrafficTestSuite) TearDownTest() { + suite.eventStreamMock.AssertExpectations(suite.T()) + suite.connMock.AssertExpectations(suite.T()) +} + +func (suite *ConnTrafficTestSuite) TestReadOk() { + suite.eventStreamMock. + On("Send", mock.Anything, mock.Anything). + Once(). + Run(func(args mock.Arguments) { + evt := args.Get(1).(EventTraffic) + + suite.Equal("CONNID", evt.StreamID()) + suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second) + suite.EqualValues(10, evt.Traffic) + suite.True(evt.IsRead) + }) + suite.connMock.On("Read", mock.Anything).Once().Return(10, nil) + + n, err := suite.conn.Read(make([]byte, 10)) + suite.NoError(err) + suite.Equal(10, n) +} + +func (suite *ConnTrafficTestSuite) TestReadErr() { + suite.eventStreamMock. + On("Send", mock.Anything, mock.Anything). + Once(). + Run(func(args mock.Arguments) { + evt := args.Get(1).(EventTraffic) + + suite.Equal("CONNID", evt.StreamID()) + suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second) + suite.EqualValues(10, evt.Traffic) + suite.True(evt.IsRead) + }) + suite.connMock.On("Read", mock.Anything).Once().Return(10, io.EOF) + + n, err := suite.conn.Read(make([]byte, 10)) + suite.True(errors.Is(err, io.EOF)) + suite.Equal(10, n) +} + +func (suite *ConnTrafficTestSuite) TestReadNothingOk() { + suite.connMock.On("Read", mock.Anything).Once().Return(0, nil) + + n, err := suite.conn.Read(make([]byte, 10)) + suite.NoError(err) + suite.Equal(0, n) +} + +func (suite *ConnTrafficTestSuite) TestReadNothingErr() { + suite.connMock.On("Read", mock.Anything).Once().Return(0, io.EOF) + + n, err := suite.conn.Read(make([]byte, 10)) + suite.True(errors.Is(err, io.EOF)) + suite.Equal(0, n) +} + +func (suite *ConnTrafficTestSuite) TestWriteOk() { + suite.eventStreamMock. + On("Send", mock.Anything, mock.Anything). + Once(). + Run(func(args mock.Arguments) { + evt := args.Get(1).(EventTraffic) + + suite.Equal("CONNID", evt.StreamID()) + suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second) + suite.EqualValues(10, evt.Traffic) + suite.False(evt.IsRead) + }) + suite.connMock.On("Write", mock.Anything).Once().Return(10, nil) + + n, err := suite.conn.Write(make([]byte, 10)) + suite.NoError(err) + suite.Equal(10, n) +} + +func (suite *ConnTrafficTestSuite) TestWriteErr() { + suite.eventStreamMock. + On("Send", mock.Anything, mock.Anything). + Once(). + Run(func(args mock.Arguments) { + evt := args.Get(1).(EventTraffic) + + suite.Equal("CONNID", evt.StreamID()) + suite.WithinDuration(time.Now(), evt.Timestamp(), time.Second) + suite.EqualValues(10, evt.Traffic) + suite.False(evt.IsRead) + }) + suite.connMock.On("Write", mock.Anything).Once().Return(10, io.EOF) + + n, err := suite.conn.Write(make([]byte, 10)) + suite.True(errors.Is(err, io.EOF)) + suite.Equal(10, n) +} + +func (suite *ConnTrafficTestSuite) TestWriteNothingOk() { + suite.connMock.On("Write", mock.Anything).Once().Return(0, nil) + + n, err := suite.conn.Write(make([]byte, 10)) + suite.NoError(err) + suite.Equal(0, n) +} + +func (suite *ConnTrafficTestSuite) TestWriteNothingErr() { + suite.connMock.On("Write", mock.Anything).Once().Return(0, io.EOF) + + n, err := suite.conn.Write(make([]byte, 10)) + suite.True(errors.Is(err, io.EOF)) + suite.Equal(0, n) +} + +func TestConnTraffic(t *testing.T) { + t.Parallel() + suite.Run(t, &ConnTrafficTestSuite{}) +} diff --git a/mtglib/init_internal_test.go b/mtglib/init_internal_test.go index a35b663..98127dd 100644 --- a/mtglib/init_internal_test.go +++ b/mtglib/init_internal_test.go @@ -1,5 +1,11 @@ package mtglib +import ( + "context" + + "github.com/stretchr/testify/mock" +) + type NoopLogger struct{} func (n NoopLogger) Named(_ string) Logger { return n } @@ -12,3 +18,11 @@ func (n NoopLogger) Debug(_ string) {} func (n NoopLogger) InfoError(_ string, _ error) {} func (n NoopLogger) WarningError(_ string, _ error) {} func (n NoopLogger) DebugError(_ string, _ error) {} + +type EventStreamMock struct { + mock.Mock +} + +func (e *EventStreamMock) Send(ctx context.Context, evt Event) { + e.Called(ctx, evt) +}