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.

init_test.go 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package doppel
  2. import (
  3. "context"
  4. "crypto/tls"
  5. "net"
  6. "net/http"
  7. "net/http/httptest"
  8. "time"
  9. "github.com/9seconds/mtg/v2/essentials"
  10. "github.com/stretchr/testify/mock"
  11. "github.com/stretchr/testify/suite"
  12. )
  13. type SimpleNetwork struct{}
  14. func (s SimpleNetwork) Dial(network, address string) (essentials.Conn, error) {
  15. return s.DialContext(context.Background(), network, address)
  16. }
  17. func (s SimpleNetwork) DialContext(ctx context.Context, network, address string) (essentials.Conn, error) {
  18. d := &net.Dialer{}
  19. conn, err := d.DialContext(ctx, network, address)
  20. if err != nil {
  21. return nil, err
  22. }
  23. return conn.(*net.TCPConn), nil
  24. }
  25. func (s SimpleNetwork) MakeHTTPClient(dialFunc func(ctx context.Context, network, address string) (essentials.Conn, error)) *http.Client {
  26. if dialFunc == nil {
  27. dialFunc = s.DialContext
  28. }
  29. return &http.Client{
  30. Transport: &http.Transport{
  31. TLSClientConfig: &tls.Config{
  32. InsecureSkipVerify: true, //nolint: gosec
  33. },
  34. DialContext: func(ctx context.Context, network, address string) (net.Conn, error) {
  35. return dialFunc(ctx, network, address)
  36. },
  37. },
  38. }
  39. }
  40. type TLSServerTestSuite struct {
  41. suite.Suite
  42. tlsServer *httptest.Server
  43. ctx context.Context
  44. ctxCancel context.CancelFunc
  45. network SimpleNetwork
  46. urls []string
  47. }
  48. func (suite *TLSServerTestSuite) SetupSuite() {
  49. suite.tlsServer = httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
  50. w.WriteHeader(http.StatusOK)
  51. w.Header().Add("Hello", "how long")
  52. if _, err := w.Write([]byte{1, 2, 3}); err != nil {
  53. panic(err)
  54. }
  55. time.Sleep(5 * time.Millisecond)
  56. if _, err := w.Write([]byte{1, 2, 3}); err != nil {
  57. panic(err)
  58. }
  59. }))
  60. suite.urls = []string{suite.tlsServer.URL}
  61. }
  62. func (suite *TLSServerTestSuite) SetupTest() {
  63. ctx, cancel := context.WithCancel(context.Background())
  64. suite.ctx = ctx
  65. suite.ctxCancel = cancel
  66. }
  67. func (suite *TLSServerTestSuite) TearDownTest() {
  68. suite.ctxCancel()
  69. suite.tlsServer.CloseClientConnections()
  70. }
  71. func (suite *TLSServerTestSuite) TearDownSuite() {
  72. suite.tlsServer.Close()
  73. }
  74. type LoggerMock struct {
  75. mock.Mock
  76. }
  77. func (l *LoggerMock) Info(msg string) {
  78. l.Called(msg)
  79. }
  80. func (l *LoggerMock) WarningError(msg string, err error) {
  81. l.Called(msg, err)
  82. }