server_spec_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package protocol_test
  2. import (
  3. "testing"
  4. "time"
  5. "v2ray.com/core/common"
  6. "v2ray.com/core/common/net"
  7. . "v2ray.com/core/common/protocol"
  8. "v2ray.com/core/common/uuid"
  9. "v2ray.com/core/proxy/vmess"
  10. . "v2ray.com/ext/assert"
  11. )
  12. func TestAlwaysValidStrategy(t *testing.T) {
  13. assert := With(t)
  14. strategy := AlwaysValid()
  15. assert(strategy.IsValid(), IsTrue)
  16. strategy.Invalidate()
  17. assert(strategy.IsValid(), IsTrue)
  18. }
  19. func TestTimeoutValidStrategy(t *testing.T) {
  20. assert := With(t)
  21. strategy := BeforeTime(time.Now().Add(2 * time.Second))
  22. assert(strategy.IsValid(), IsTrue)
  23. time.Sleep(3 * time.Second)
  24. assert(strategy.IsValid(), IsFalse)
  25. strategy = BeforeTime(time.Now().Add(2 * time.Second))
  26. strategy.Invalidate()
  27. assert(strategy.IsValid(), IsFalse)
  28. }
  29. func TestUserInServerSpec(t *testing.T) {
  30. assert := With(t)
  31. uuid1 := uuid.New()
  32. uuid2 := uuid.New()
  33. toAccount := func(a *vmess.Account) Account {
  34. account, err := a.AsAccount()
  35. common.Must(err)
  36. return account
  37. }
  38. spec := NewServerSpec(net.Destination{}, AlwaysValid(), &MemoryUser{
  39. Email: "test1@v2ray.com",
  40. Account: toAccount(&vmess.Account{Id: uuid1.String()}),
  41. })
  42. assert(spec.HasUser(&MemoryUser{
  43. Email: "test1@v2ray.com",
  44. Account: toAccount(&vmess.Account{Id: uuid2.String()}),
  45. }), IsFalse)
  46. spec.AddUser(&MemoryUser{Email: "test2@v2ray.com"})
  47. assert(spec.HasUser(&MemoryUser{
  48. Email: "test1@v2ray.com",
  49. Account: toAccount(&vmess.Account{Id: uuid1.String()}),
  50. }), IsTrue)
  51. }
  52. func TestPickUser(t *testing.T) {
  53. assert := With(t)
  54. spec := NewServerSpec(net.Destination{}, AlwaysValid(), &MemoryUser{Email: "test1@v2ray.com"}, &MemoryUser{Email: "test2@v2ray.com"}, &MemoryUser{Email: "test3@v2ray.com"})
  55. user := spec.PickUser()
  56. assert(user.Email, HasSuffix, "@v2ray.com")
  57. }