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
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

socks5_test.go 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package network_test
  2. import (
  3. "net"
  4. "net/http"
  5. "net/url"
  6. "testing"
  7. "github.com/9seconds/mtg/v2/mtglib/network"
  8. socks5 "github.com/armon/go-socks5"
  9. "github.com/stretchr/testify/suite"
  10. )
  11. type Socks5TestSuite struct {
  12. HTTPServerTestSuite
  13. socksListener net.Listener
  14. socksProxy *socks5.Server
  15. }
  16. func (suite *Socks5TestSuite) SetupSuite() {
  17. suite.HTTPServerTestSuite.SetupSuite()
  18. socksConf := socks5.Config{
  19. Credentials: socks5.StaticCredentials{
  20. "user": "password",
  21. },
  22. }
  23. suite.socksProxy, _ = socks5.New(&socksConf)
  24. suite.socksListener, _ = net.Listen("tcp", "127.0.0.1:0")
  25. go suite.socksProxy.Serve(suite.socksListener)
  26. }
  27. func (suite *Socks5TestSuite) TearDownSuite() {
  28. suite.socksListener.Close()
  29. suite.HTTPServerTestSuite.TearDownSuite()
  30. }
  31. func (suite *Socks5TestSuite) TestRequestFailed() {
  32. proxyURL := &url.URL{
  33. Scheme: "socks5",
  34. User: url.UserPassword("user2", "password"),
  35. Host: suite.socksListener.Addr().String(),
  36. }
  37. dialer, _ := network.NewSocks5Dialer(proxyURL, 0, 0)
  38. httpClient := http.Client{
  39. Transport: &http.Transport{
  40. DialContext: dialer.DialContext,
  41. },
  42. }
  43. _, err := httpClient.Get(suite.httpServer.URL + "/get")
  44. suite.Error(err)
  45. }
  46. func (suite *Socks5TestSuite) TestRequestOk() {
  47. proxyURL := &url.URL{
  48. Scheme: "socks5",
  49. User: url.UserPassword("user", "password"),
  50. Host: suite.socksListener.Addr().String(),
  51. }
  52. dialer, _ := network.NewSocks5Dialer(proxyURL, 0, 0)
  53. httpClient := http.Client{
  54. Transport: &http.Transport{
  55. DialContext: dialer.DialContext,
  56. },
  57. }
  58. resp, err := httpClient.Get(suite.httpServer.URL + "/get")
  59. suite.NoError(err)
  60. resp.Body.Close()
  61. }
  62. func TestSocks5TestSuite(t *testing.T) {
  63. suite.Run(t, &Socks5TestSuite{})
  64. }