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
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

public_config_updater_test.go 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package dc
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "sync"
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/require"
  9. "github.com/stretchr/testify/suite"
  10. )
  11. type PublicConfigUpdaterTestSuite struct {
  12. UpdaterTestSuiteBase
  13. u PublicConfigUpdater
  14. lock sync.Mutex
  15. srv *httptest.Server
  16. responseHandler func(w http.ResponseWriter)
  17. }
  18. func (s *PublicConfigUpdaterTestSuite) SetupSuite() {
  19. s.srv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  20. s.lock.Lock()
  21. s.responseHandler(w)
  22. s.lock.Unlock()
  23. }))
  24. }
  25. func (s *PublicConfigUpdaterTestSuite) TearDownSuite() {
  26. s.srv.Close()
  27. }
  28. func (s *PublicConfigUpdaterTestSuite) SetupTest() {
  29. s.UpdaterTestSuiteBase.SetupTest()
  30. tg, err := New("prefer-ipv4")
  31. require.NoError(s.T(), err)
  32. s.u = NewPublicConfigUpdater(tg, s.loggerMock, s.srv.Client())
  33. }
  34. func (s *PublicConfigUpdaterTestSuite) Test502StatusCode() {
  35. done := false
  36. s.responseHandler = func(w http.ResponseWriter) {
  37. w.WriteHeader(http.StatusBadGateway)
  38. done = true
  39. }
  40. go s.u.Run(s.ctx, s.srv.URL, "tcp4")
  41. s.Eventually(func() bool {
  42. s.lock.Lock()
  43. defer s.lock.Unlock()
  44. return done
  45. }, time.Second, 10*time.Millisecond)
  46. s.Len(s.u.tg.view.publicConfigs.v4, 0)
  47. }
  48. func (s *PublicConfigUpdaterTestSuite) TestEmptyFile() {
  49. done := false
  50. s.responseHandler = func(w http.ResponseWriter) {
  51. done = true
  52. w.WriteHeader(http.StatusOK)
  53. }
  54. go s.u.Run(s.ctx, s.srv.URL, "tcp4")
  55. s.Eventually(func() bool {
  56. s.lock.Lock()
  57. defer s.lock.Unlock()
  58. return done
  59. }, time.Second, 10*time.Millisecond)
  60. s.Len(s.u.tg.view.publicConfigs.v4, 0)
  61. }
  62. func (s *PublicConfigUpdaterTestSuite) TestGarbage() {
  63. result := `
  64. proxy_for -1 -1;
  65. proxy_for 100 100.10.0.0:3333;
  66. lala 0 0
  67. `
  68. done := false
  69. s.responseHandler = func(w http.ResponseWriter) {
  70. done = true
  71. w.WriteHeader(http.StatusOK)
  72. w.Write([]byte(result)) //nolint: errcheck
  73. }
  74. go s.u.Run(s.ctx, s.srv.URL, "tcp4")
  75. s.Eventually(func() bool {
  76. s.lock.Lock()
  77. defer s.lock.Unlock()
  78. return done
  79. }, time.Second, 10*time.Millisecond)
  80. s.Len(s.u.tg.view.publicConfigs.v4, 0)
  81. }
  82. func (s *PublicConfigUpdaterTestSuite) TestOk() {
  83. result := `
  84. proxy_for 203 100.10.0.0:3333;
  85. proxy_for -100 101.10.0.0:3333;
  86. `
  87. done := false
  88. s.responseHandler = func(w http.ResponseWriter) {
  89. done = true
  90. w.WriteHeader(http.StatusOK)
  91. w.Write([]byte(result)) //nolint: errcheck
  92. }
  93. go s.u.Run(s.ctx, s.srv.URL, "tcp4")
  94. s.Eventually(func() bool {
  95. s.lock.Lock()
  96. defer s.lock.Unlock()
  97. return done
  98. }, time.Second, 10*time.Millisecond)
  99. s.Len(s.u.tg.view.publicConfigs.v4, 1)
  100. s.Len(s.u.tg.view.publicConfigs.v4[203], 1)
  101. s.Equal("100.10.0.0:3333", s.u.tg.view.publicConfigs.v4[203][0].Address)
  102. }
  103. func TestPublicConfigUpdater(t *testing.T) {
  104. suite.Run(t, &PublicConfigUpdaterTestSuite{})
  105. }