mux_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package splithttp_test
  2. import (
  3. "context"
  4. "testing"
  5. . "github.com/xtls/xray-core/transport/internet/splithttp"
  6. )
  7. type fakeRoundTripper struct{}
  8. func (f *fakeRoundTripper) IsClosed() bool {
  9. return false
  10. }
  11. func TestMaxConnections(t *testing.T) {
  12. xmuxConfig := XmuxConfig{
  13. MaxConnections: &RangeConfig{From: 4, To: 4},
  14. }
  15. xmuxManager := NewXmuxManager(xmuxConfig, func() XmuxConn {
  16. return &fakeRoundTripper{}
  17. })
  18. xmuxClients := make(map[interface{}]struct{})
  19. for i := 0; i < 8; i++ {
  20. xmuxClients[xmuxManager.GetXmuxClient(context.Background())] = struct{}{}
  21. }
  22. if len(xmuxClients) != 4 {
  23. t.Error("did not get 4 distinct clients, got ", len(xmuxClients))
  24. }
  25. }
  26. func TestCMaxReuseTimes(t *testing.T) {
  27. xmuxConfig := XmuxConfig{
  28. CMaxReuseTimes: &RangeConfig{From: 2, To: 2},
  29. }
  30. xmuxManager := NewXmuxManager(xmuxConfig, func() XmuxConn {
  31. return &fakeRoundTripper{}
  32. })
  33. xmuxClients := make(map[interface{}]struct{})
  34. for i := 0; i < 64; i++ {
  35. xmuxClients[xmuxManager.GetXmuxClient(context.Background())] = struct{}{}
  36. }
  37. if len(xmuxClients) != 32 {
  38. t.Error("did not get 32 distinct clients, got ", len(xmuxClients))
  39. }
  40. }
  41. func TestMaxConcurrency(t *testing.T) {
  42. xmuxConfig := XmuxConfig{
  43. MaxConcurrency: &RangeConfig{From: 2, To: 2},
  44. }
  45. xmuxManager := NewXmuxManager(xmuxConfig, func() XmuxConn {
  46. return &fakeRoundTripper{}
  47. })
  48. xmuxClients := make(map[interface{}]struct{})
  49. for i := 0; i < 64; i++ {
  50. xmuxClient := xmuxManager.GetXmuxClient(context.Background())
  51. xmuxClient.OpenUsage.Add(1)
  52. xmuxClients[xmuxClient] = struct{}{}
  53. }
  54. if len(xmuxClients) != 32 {
  55. t.Error("did not get 32 distinct clients, got ", len(xmuxClients))
  56. }
  57. }
  58. func TestDefault(t *testing.T) {
  59. xmuxConfig := XmuxConfig{}
  60. xmuxManager := NewXmuxManager(xmuxConfig, func() XmuxConn {
  61. return &fakeRoundTripper{}
  62. })
  63. xmuxClients := make(map[interface{}]struct{})
  64. for i := 0; i < 64; i++ {
  65. xmuxClient := xmuxManager.GetXmuxClient(context.Background())
  66. xmuxClient.OpenUsage.Add(1)
  67. xmuxClients[xmuxClient] = struct{}{}
  68. }
  69. if len(xmuxClients) != 1 {
  70. t.Error("did not get 1 distinct clients, got ", len(xmuxClients))
  71. }
  72. }