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
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

telegram_internal_test.go 3.1KB

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