box_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "context"
  4. "net"
  5. "testing"
  6. "time"
  7. "github.com/sagernet/sing-box"
  8. "github.com/sagernet/sing-box/option"
  9. M "github.com/sagernet/sing/common/metadata"
  10. N "github.com/sagernet/sing/common/network"
  11. "github.com/sagernet/sing/protocol/socks"
  12. "github.com/stretchr/testify/require"
  13. )
  14. func startInstance(t *testing.T, options option.Options) {
  15. var instance *box.Box
  16. var err error
  17. for retry := 0; retry < 3; retry++ {
  18. instance, err = box.New(context.Background(), options)
  19. require.NoError(t, err)
  20. err = instance.Start()
  21. if err != nil {
  22. time.Sleep(5 * time.Millisecond)
  23. continue
  24. }
  25. break
  26. }
  27. require.NoError(t, err)
  28. t.Cleanup(func() {
  29. time.Sleep(500 * time.Millisecond)
  30. instance.Close()
  31. })
  32. }
  33. func testTCP(t *testing.T, clientPort uint16, testPort uint16) {
  34. dialer := socks.NewClient(N.SystemDialer, M.ParseSocksaddrHostPort("127.0.0.1", clientPort), socks.Version5, "", "")
  35. dialTCP := func() (net.Conn, error) {
  36. return dialer.DialContext(context.Background(), "tcp", M.ParseSocksaddrHostPort("127.0.0.1", testPort))
  37. }
  38. require.NoError(t, testPingPongWithConn(t, testPort, dialTCP))
  39. }
  40. func testSuit(t *testing.T, clientPort uint16, testPort uint16) {
  41. dialer := socks.NewClient(N.SystemDialer, M.ParseSocksaddrHostPort("127.0.0.1", clientPort), socks.Version5, "", "")
  42. dialTCP := func() (net.Conn, error) {
  43. return dialer.DialContext(context.Background(), "tcp", M.ParseSocksaddrHostPort("127.0.0.1", testPort))
  44. }
  45. dialUDP := func() (net.PacketConn, error) {
  46. return dialer.ListenPacket(context.Background(), M.ParseSocksaddrHostPort("127.0.0.1", testPort))
  47. }
  48. /*t.Run("tcp", func(t *testing.T) {
  49. t.Parallel()
  50. var err error
  51. for retry := 0; retry < 3; retry++ {
  52. err = testLargeDataWithConn(t, testPort, dialTCP)
  53. if err == nil {
  54. break
  55. }
  56. }
  57. require.NoError(t, err)
  58. })
  59. t.Run("udp", func(t *testing.T) {
  60. t.Parallel()
  61. var err error
  62. for retry := 0; retry < 3; retry++ {
  63. err = testLargeDataWithPacketConn(t, testPort, dialUDP)
  64. if err == nil {
  65. break
  66. }
  67. }
  68. require.NoError(t, err)
  69. })*/
  70. require.NoError(t, testLargeDataWithConn(t, testPort, dialTCP))
  71. require.NoError(t, testLargeDataWithPacketConn(t, testPort, dialUDP))
  72. // require.NoError(t, testPingPongWithConn(t, testPort, dialTCP))
  73. // require.NoError(t, testPingPongWithPacketConn(t, testPort, dialUDP))
  74. // require.NoError(t, testPacketConnTimeout(t, dialUDP))
  75. }