Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

stream_context_internal_test.go 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package mtglib
  2. import (
  3. "context"
  4. "net"
  5. "testing"
  6. "github.com/9seconds/mtg/v2/internal/testlib"
  7. "github.com/stretchr/testify/suite"
  8. )
  9. type StreamContextTestSuite struct {
  10. suite.Suite
  11. connMock *testlib.NetConnMock
  12. logger NoopLogger
  13. ctx *streamContext
  14. ctxCancel context.CancelFunc
  15. }
  16. func (suite *StreamContextTestSuite) SetupSuite() {
  17. suite.logger = NoopLogger{}
  18. }
  19. func (suite *StreamContextTestSuite) SetupTest() {
  20. ctx, cancel := context.WithCancel(context.Background())
  21. ctx = context.WithValue(ctx, "key", "value") // nolint: golint, revive, staticcheck
  22. suite.ctxCancel = cancel
  23. suite.connMock = &testlib.NetConnMock{}
  24. addr := &net.TCPAddr{
  25. IP: net.ParseIP("10.0.0.10"),
  26. Port: 6676,
  27. }
  28. suite.connMock.On("RemoteAddr").Return(addr)
  29. suite.ctx = newStreamContext(ctx, suite.logger, suite.connMock)
  30. }
  31. func (suite *StreamContextTestSuite) TearDownTest() {
  32. suite.ctxCancel()
  33. suite.connMock.AssertExpectations(suite.T())
  34. }
  35. func (suite *StreamContextTestSuite) TestContextInterface() {
  36. _, ok := suite.ctx.Deadline()
  37. suite.False(ok)
  38. select {
  39. case <-suite.ctx.Done():
  40. suite.FailNow("unexpectedly done")
  41. default:
  42. }
  43. suite.NoError(suite.ctx.Err())
  44. suite.Equal("value", suite.ctx.Value("key"))
  45. suite.ctxCancel()
  46. select {
  47. case <-suite.ctx.Done():
  48. suite.Error(suite.ctx.Err())
  49. default:
  50. suite.FailNow("unexpectedly not done")
  51. }
  52. }
  53. func (suite *StreamContextTestSuite) TestClientIP() {
  54. suite.Equal("10.0.0.10", suite.ctx.ClientIP().String())
  55. }
  56. func (suite *StreamContextTestSuite) TestClose() {
  57. suite.connMock.On("Close").Once().Return(nil)
  58. tgConnMock := &testlib.NetConnMock{}
  59. tgConnMock.On("Close").Once().Return(nil)
  60. suite.ctx.telegramConn = tgConnMock
  61. suite.ctx.Close()
  62. select {
  63. case <-suite.ctx.Done():
  64. suite.Error(suite.ctx.Err())
  65. default:
  66. suite.FailNow("unexpectedly not done")
  67. }
  68. tgConnMock.AssertExpectations(suite.T())
  69. }
  70. func TestStreamContext(t *testing.T) {
  71. t.Parallel()
  72. suite.Run(t, &StreamContextTestSuite{})
  73. }