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
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

firehol_test.go 3.2KB

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