server_picker_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package protocol_test
  2. import (
  3. "testing"
  4. "time"
  5. "v2ray.com/core/common/net"
  6. . "v2ray.com/core/common/protocol"
  7. "v2ray.com/core/testing/assert"
  8. )
  9. func TestServerList(t *testing.T) {
  10. assert := assert.On(t)
  11. list := NewServerList()
  12. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(1)), AlwaysValid()))
  13. assert.Uint32(list.Size()).Equals(1)
  14. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(2)), BeforeTime(time.Now().Add(time.Second))))
  15. assert.Uint32(list.Size()).Equals(2)
  16. server := list.GetServer(1)
  17. assert.Port(server.Destination().Port).Equals(2)
  18. time.Sleep(2 * time.Second)
  19. server = list.GetServer(1)
  20. assert.Pointer(server).IsNil()
  21. server = list.GetServer(0)
  22. assert.Port(server.Destination().Port).Equals(1)
  23. }
  24. func TestServerPicker(t *testing.T) {
  25. assert := assert.On(t)
  26. list := NewServerList()
  27. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(1)), AlwaysValid()))
  28. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(2)), BeforeTime(time.Now().Add(time.Second))))
  29. list.AddServer(NewServerSpec(net.TCPDestination(net.LocalHostIP, net.Port(3)), BeforeTime(time.Now().Add(time.Second))))
  30. picker := NewRoundRobinServerPicker(list)
  31. server := picker.PickServer()
  32. assert.Port(server.Destination().Port).Equals(1)
  33. server = picker.PickServer()
  34. assert.Port(server.Destination().Port).Equals(2)
  35. server = picker.PickServer()
  36. assert.Port(server.Destination().Port).Equals(3)
  37. server = picker.PickServer()
  38. assert.Port(server.Destination().Port).Equals(1)
  39. time.Sleep(2 * time.Second)
  40. server = picker.PickServer()
  41. assert.Port(server.Destination().Port).Equals(1)
  42. server = picker.PickServer()
  43. assert.Port(server.Destination().Port).Equals(1)
  44. }