server_picker_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package protocol_test
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/xtls/xray-core/common/net"
  6. . "github.com/xtls/xray-core/common/protocol"
  7. )
  8. func TestServerList(t *testing.T) {
  9. list := NewServerList()
  10. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(1)), AlwaysValid()))
  11. if list.Size() != 1 {
  12. t.Error("list size: ", list.Size())
  13. }
  14. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(2)), BeforeTime(time.Now().Add(time.Second))))
  15. if list.Size() != 2 {
  16. t.Error("list.size: ", list.Size())
  17. }
  18. server := list.GetServer(1)
  19. if server.Destination().Port != 2 {
  20. t.Error("server: ", server.Destination())
  21. }
  22. time.Sleep(2 * time.Second)
  23. server = list.GetServer(1)
  24. if server != nil {
  25. t.Error("server: ", server)
  26. }
  27. server = list.GetServer(0)
  28. if server.Destination().Port != 1 {
  29. t.Error("server: ", server.Destination())
  30. }
  31. }
  32. func TestServerPicker(t *testing.T) {
  33. list := NewServerList()
  34. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(1)), AlwaysValid()))
  35. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(2)), BeforeTime(time.Now().Add(time.Second))))
  36. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(3)), BeforeTime(time.Now().Add(time.Second))))
  37. picker := NewRoundRobinServerPicker(list)
  38. server := picker.PickServer()
  39. if server.Destination().Port != 1 {
  40. t.Error("server: ", server.Destination())
  41. }
  42. server = picker.PickServer()
  43. if server.Destination().Port != 2 {
  44. t.Error("server: ", server.Destination())
  45. }
  46. server = picker.PickServer()
  47. if server.Destination().Port != 3 {
  48. t.Error("server: ", server.Destination())
  49. }
  50. server = picker.PickServer()
  51. if server.Destination().Port != 1 {
  52. t.Error("server: ", server.Destination())
  53. }
  54. time.Sleep(2 * time.Second)
  55. server = picker.PickServer()
  56. if server.Destination().Port != 1 {
  57. t.Error("server: ", server.Destination())
  58. }
  59. server = picker.PickServer()
  60. if server.Destination().Port != 1 {
  61. t.Error("server: ", server.Destination())
  62. }
  63. }