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文字以内のものにしてください。

ganger_test.go 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package doppel
  2. import (
  3. "bytes"
  4. "sync"
  5. "testing"
  6. "time"
  7. "github.com/9seconds/mtg/v2/internal/testlib"
  8. "github.com/stretchr/testify/mock"
  9. "github.com/stretchr/testify/suite"
  10. )
  11. type GangerTestSuite struct {
  12. TLSServerTestSuite
  13. log *LoggerMock
  14. g *Ganger
  15. }
  16. func (suite *GangerTestSuite) SetupTest() {
  17. suite.TLSServerTestSuite.SetupTest()
  18. suite.log = &LoggerMock{}
  19. suite.log.
  20. On("Info", mock.AnythingOfType("string")).
  21. Maybe()
  22. suite.log.
  23. On("WarningError", mock.AnythingOfType("string"), mock.Anything).
  24. Maybe()
  25. suite.g = NewGanger(suite.ctx, suite.network, suite.log, time.Hour, 1, suite.urls, true)
  26. suite.g.Run()
  27. }
  28. func (suite *GangerTestSuite) TearDownTest() {
  29. suite.g.Shutdown()
  30. suite.log.AssertExpectations(suite.T())
  31. suite.TLSServerTestSuite.TearDownTest()
  32. }
  33. func (suite *GangerTestSuite) TestNewConnAfterShutdown() {
  34. suite.g.Shutdown()
  35. connMock := &testlib.EssentialsConnMock{}
  36. _, err := suite.g.NewConn(connMock)
  37. suite.Error(err)
  38. }
  39. func (suite *GangerTestSuite) TestNewConnWhileRunning() {
  40. connMock := &testlib.EssentialsConnMock{}
  41. connMock.
  42. On("Write", mock.AnythingOfType("[]uint8")).
  43. Return(0, nil).
  44. Maybe()
  45. connMock.On("Close").
  46. Return(nil).
  47. Maybe()
  48. conn, err := suite.g.NewConn(connMock)
  49. suite.NoError(err)
  50. conn.Stop()
  51. }
  52. func (suite *GangerTestSuite) TestNewConnWriteProducesTLSRecords() {
  53. var (
  54. mu sync.Mutex
  55. buf bytes.Buffer
  56. )
  57. connMock := &testlib.EssentialsConnMock{}
  58. connMock.On("Write", mock.AnythingOfType("[]uint8")).
  59. Run(func(args mock.Arguments) {
  60. mu.Lock()
  61. buf.Write(args.Get(0).([]byte))
  62. mu.Unlock()
  63. }).
  64. Return(0, nil).
  65. Maybe()
  66. connMock.On("Close").
  67. Return(nil).
  68. Maybe()
  69. conn, err := suite.g.NewConn(connMock)
  70. suite.NoError(err)
  71. payload := bytes.Repeat([]byte("x"), 512)
  72. _, err = conn.Write(payload)
  73. suite.NoError(err)
  74. time.Sleep(500 * time.Millisecond)
  75. conn.Stop()
  76. mu.Lock()
  77. written := buf.Bytes()
  78. mu.Unlock()
  79. suite.NotEmpty(written)
  80. }
  81. func TestGanger(t *testing.T) {
  82. t.Parallel()
  83. suite.Run(t, &GangerTestSuite{})
  84. }