diff --git a/mtglib/init_internal_test.go b/mtglib/init_internal_test.go new file mode 100644 index 0000000..a35b663 --- /dev/null +++ b/mtglib/init_internal_test.go @@ -0,0 +1,14 @@ +package mtglib + +type NoopLogger struct{} + +func (n NoopLogger) Named(_ string) Logger { return n } +func (n NoopLogger) BindInt(_ string, _ int) Logger { return n } +func (n NoopLogger) BindStr(_, _ string) Logger { return n } +func (n NoopLogger) Printf(_ string, _ ...interface{}) {} +func (n NoopLogger) Info(_ string) {} +func (n NoopLogger) Warning(_ string) {} +func (n NoopLogger) Debug(_ string) {} +func (n NoopLogger) InfoError(_ string, _ error) {} +func (n NoopLogger) WarningError(_ string, _ error) {} +func (n NoopLogger) DebugError(_ string, _ error) {} diff --git a/mtglib/stream_context_internal_test.go b/mtglib/stream_context_internal_test.go new file mode 100644 index 0000000..6d447cc --- /dev/null +++ b/mtglib/stream_context_internal_test.go @@ -0,0 +1,95 @@ +package mtglib + +import ( + "context" + "net" + "testing" + + "github.com/9seconds/mtg/v2/testlib" + "github.com/stretchr/testify/suite" +) + +type StreamContextTestSuite struct { + suite.Suite + + connMock *testlib.NetConnMock + logger NoopLogger + ctx *streamContext + ctxCancel context.CancelFunc +} + +func (suite *StreamContextTestSuite) SetupSuite() { + suite.logger = NoopLogger{} +} + +func (suite *StreamContextTestSuite) SetupTest() { + ctx, cancel := context.WithCancel(context.Background()) + ctx = context.WithValue(ctx, "key", "value") // nolint: golint, revive, staticcheck + + suite.ctxCancel = cancel + suite.connMock = &testlib.NetConnMock{} + + addr := &net.TCPAddr{ + IP: net.ParseIP("10.0.0.10"), + Port: 6676, + } + suite.connMock.On("RemoteAddr").Return(addr) + + suite.ctx = newStreamContext(ctx, suite.logger, suite.connMock) +} + +func (suite *StreamContextTestSuite) TearDownTest() { + suite.ctxCancel() + suite.connMock.AssertExpectations(suite.T()) +} + +func (suite *StreamContextTestSuite) TestContextInterface() { + _, ok := suite.ctx.Deadline() + suite.False(ok) + + select { + case <-suite.ctx.Done(): + suite.FailNow("unexpectedly done") + default: + } + + suite.NoError(suite.ctx.Err()) + suite.Equal("value", suite.ctx.Value("key")) + + suite.ctxCancel() + + select { + case <-suite.ctx.Done(): + suite.Error(suite.ctx.Err()) + default: + suite.FailNow("unexpectedly not done") + } +} + +func (suite *StreamContextTestSuite) TestClientIP() { + suite.Equal("10.0.0.10", suite.ctx.ClientIP().String()) +} + +func (suite *StreamContextTestSuite) TestClose() { + suite.connMock.On("Close").Once().Return(nil) + + tgConnMock := &testlib.NetConnMock{} + tgConnMock.On("Close").Once().Return(nil) + + suite.ctx.telegramConn = tgConnMock + suite.ctx.Close() + + select { + case <-suite.ctx.Done(): + suite.Error(suite.ctx.Err()) + default: + suite.FailNow("unexpectedly not done") + } + + tgConnMock.AssertExpectations(suite.T()) +} + +func TestStreamContext(t *testing.T) { + t.Parallel() + suite.Run(t, &StreamContextTestSuite{}) +}