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
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

telegram_internal_test.go 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package telegram
  2. import (
  3. "context"
  4. "errors"
  5. "io"
  6. "net"
  7. "strconv"
  8. "testing"
  9. "github.com/9seconds/mtg/v2/testlib"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/stretchr/testify/mock"
  12. "github.com/stretchr/testify/suite"
  13. )
  14. type TelegramTestSuite struct {
  15. suite.Suite
  16. dialerMock *testlib.MtglibNetworkMock
  17. t *Telegram
  18. }
  19. func (suite *TelegramTestSuite) SetupTest() {
  20. suite.dialerMock = &testlib.MtglibNetworkMock{}
  21. suite.t, _ = New(suite.dialerMock, "prefer-ipv4")
  22. }
  23. func (suite *TelegramTestSuite) TearDownTest() {
  24. suite.dialerMock.AssertExpectations(suite.T())
  25. }
  26. func (suite *TelegramTestSuite) TestUnknownDC() {
  27. testData := []int{
  28. -1,
  29. 5,
  30. 100,
  31. }
  32. for _, v := range testData {
  33. value := v
  34. suite.T().Run(strconv.Itoa(value), func(t *testing.T) {
  35. _, err := suite.t.Dial(context.Background(), value)
  36. assert.Error(t, err)
  37. })
  38. }
  39. }
  40. func (suite *TelegramTestSuite) TestDialToCorrectIPs() {
  41. testData := map[int][]tgAddr{}
  42. for i := 0; i < 5; i++ {
  43. testData[i] = []tgAddr{}
  44. testData[i] = append(testData[i], v4Addresses[i]...)
  45. testData[i] = append(testData[i], v6Addresses[i])
  46. }
  47. for i, v := range testData {
  48. idx := i
  49. addresses := v
  50. suite.T().Run(strconv.Itoa(idx), func(t *testing.T) {
  51. for _, addr := range addresses {
  52. suite.dialerMock.
  53. On("DialContext", mock.Anything, addr.network, addr.address).
  54. Once().
  55. Return((*net.TCPConn)(nil), io.EOF)
  56. }
  57. _, err := suite.t.Dial(context.Background(), idx)
  58. assert.True(t, errors.Is(err, io.EOF))
  59. })
  60. }
  61. }
  62. func (suite *TelegramTestSuite) TestDialPreferIPRange() {
  63. testData := map[string][]tgAddr{
  64. "prefer-ipv4": {v4Addresses[0][0], v6Addresses[0]},
  65. "prefer-ipv6": {v6Addresses[0], v4Addresses[0][0]},
  66. "only-ipv4": {v4Addresses[0][0]},
  67. "only-ipv6": {v6Addresses[0]},
  68. }
  69. for k, v := range testData {
  70. name := k
  71. addresses := v
  72. suite.T().Run(name, func(t *testing.T) {
  73. for _, addr := range addresses {
  74. suite.dialerMock.
  75. On("DialContext", mock.Anything, addr.network, addr.address).
  76. Once().
  77. Return((*net.TCPConn)(nil), io.EOF)
  78. }
  79. tg, _ := New(suite.dialerMock, name)
  80. _, err := tg.Dial(context.Background(), 0)
  81. assert.True(t, errors.Is(err, io.EOF))
  82. })
  83. }
  84. }
  85. func (suite *TelegramTestSuite) TestDialPreferIPPriority() {
  86. testData := map[string]tgAddr{
  87. "prefer-ipv4": v4Addresses[0][0],
  88. "prefer-ipv6": v6Addresses[0],
  89. }
  90. for k, v := range testData {
  91. name := k
  92. addr := v
  93. suite.T().Run(name, func(t *testing.T) {
  94. conn := &net.TCPConn{}
  95. suite.dialerMock.
  96. On("DialContext", mock.Anything, addr.network, addr.address).
  97. Once().
  98. Return(conn, nil)
  99. tg, _ := New(suite.dialerMock, name)
  100. res, err := tg.Dial(context.Background(), 0)
  101. assert.NoError(t, err)
  102. assert.Equal(t, conn, res)
  103. })
  104. }
  105. }
  106. func (suite *TelegramTestSuite) TestUnknownPreferIP() {
  107. _, err := New(suite.dialerMock, "xxx")
  108. suite.Error(err)
  109. }
  110. func TestTelegram(t *testing.T) {
  111. t.Parallel()
  112. suite.Run(t, &TelegramTestSuite{})
  113. }