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 kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

firehol_test.go 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package ipblocklist_test
  2. import (
  3. "io"
  4. "net"
  5. "net/http"
  6. "net/http/httptest"
  7. "os"
  8. "path/filepath"
  9. "testing"
  10. "time"
  11. "github.com/9seconds/mtg/v2/internal/testlib"
  12. "github.com/9seconds/mtg/v2/ipblocklist"
  13. "github.com/9seconds/mtg/v2/logger"
  14. "github.com/9seconds/mtg/v2/network"
  15. "github.com/jarcoal/httpmock"
  16. "github.com/stretchr/testify/mock"
  17. "github.com/stretchr/testify/suite"
  18. )
  19. type FireholTestSuite struct {
  20. suite.Suite
  21. networkMock *testlib.MtglibNetworkMock
  22. httpServer *httptest.Server
  23. }
  24. func (suite *FireholTestSuite) SetupSuite() {
  25. mux := http.NewServeMux()
  26. mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
  27. filefp, err := os.Open(filepath.Join("testdata", "remote_ipset.ipset"))
  28. if err != nil {
  29. panic(err)
  30. }
  31. defer filefp.Close()
  32. io.Copy(w, filefp) // nolint: errcheck
  33. })
  34. suite.httpServer = httptest.NewServer(mux)
  35. }
  36. func (suite *FireholTestSuite) SetupTest() {
  37. httpClient := &http.Client{}
  38. suite.networkMock = &testlib.MtglibNetworkMock{}
  39. httpmock.ActivateNonDefault(httpClient)
  40. suite.networkMock.
  41. On("MakeHTTPClient", mock.Anything).
  42. Maybe().
  43. Return(httpClient)
  44. }
  45. func (suite *FireholTestSuite) TearDownTest() {
  46. suite.networkMock.AssertExpectations(suite.T())
  47. httpmock.DeactivateAndReset()
  48. }
  49. func (suite *FireholTestSuite) TearDownSuite() {
  50. suite.httpServer.Close()
  51. }
  52. func (suite *FireholTestSuite) TestLocalFail() {
  53. blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
  54. suite.networkMock, 2,
  55. nil, []string{filepath.Join("testdata", "broken_ipset.ipset")})
  56. suite.NoError(err)
  57. go blocklist.Run(time.Hour)
  58. time.Sleep(500 * time.Millisecond)
  59. suite.False(blocklist.Contains(net.ParseIP("10.0.0.10")))
  60. suite.False(blocklist.Contains(net.ParseIP("127.0.0.1")))
  61. blocklist.Shutdown()
  62. time.Sleep(500 * time.Millisecond)
  63. }
  64. func (suite *FireholTestSuite) TestLocalOk() {
  65. blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
  66. suite.networkMock, 2,
  67. nil, []string{filepath.Join("testdata", "good_ipset.ipset")})
  68. suite.NoError(err)
  69. go blocklist.Run(time.Hour)
  70. time.Sleep(500 * time.Millisecond)
  71. suite.True(blocklist.Contains(net.ParseIP("10.0.0.10")))
  72. suite.False(blocklist.Contains(net.ParseIP("127.0.0.1")))
  73. blocklist.Shutdown()
  74. time.Sleep(500 * time.Millisecond)
  75. }
  76. func (suite *FireholTestSuite) TestRemoteFail() {
  77. blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
  78. suite.networkMock, 2,
  79. []string{"https://google.com"}, nil)
  80. suite.NoError(err)
  81. go blocklist.Run(time.Hour)
  82. time.Sleep(500 * time.Millisecond)
  83. suite.False(blocklist.Contains(net.ParseIP("10.2.2.2")))
  84. blocklist.Shutdown()
  85. time.Sleep(500 * time.Millisecond)
  86. }
  87. func (suite *FireholTestSuite) TestMixed() {
  88. dialer, _ := network.NewDefaultDialer(0, 0)
  89. ntw, _ := network.NewNetwork(dialer, "mtg", "1.1.1.1", 0)
  90. blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
  91. ntw, 2,
  92. []string{
  93. suite.httpServer.URL,
  94. }, []string{
  95. filepath.Join("testdata", "good_ipset.ipset"),
  96. })
  97. suite.NoError(err)
  98. go blocklist.Run(time.Hour)
  99. time.Sleep(500 * time.Millisecond)
  100. suite.True(blocklist.Contains(net.ParseIP("10.2.2.2")))
  101. suite.True(blocklist.Contains(net.ParseIP("10.1.0.100")))
  102. blocklist.Shutdown()
  103. time.Sleep(500 * time.Millisecond)
  104. }
  105. func TestFirehol(t *testing.T) {
  106. t.Parallel()
  107. suite.Run(t, &FireholTestSuite{})
  108. }