pool_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package internal_test
  2. import (
  3. "net"
  4. "testing"
  5. "time"
  6. v2net "v2ray.com/core/common/net"
  7. "v2ray.com/core/testing/assert"
  8. . "v2ray.com/core/transport/internet/internal"
  9. )
  10. type TestConnection struct {
  11. id string
  12. closed bool
  13. }
  14. func (o *TestConnection) Read([]byte) (int, error) {
  15. return 0, nil
  16. }
  17. func (o *TestConnection) Write([]byte) (int, error) {
  18. return 0, nil
  19. }
  20. func (o *TestConnection) Close() error {
  21. o.closed = true
  22. return nil
  23. }
  24. func (o *TestConnection) LocalAddr() net.Addr {
  25. return nil
  26. }
  27. func (o *TestConnection) RemoteAddr() net.Addr {
  28. return nil
  29. }
  30. func (o *TestConnection) SetDeadline(t time.Time) error {
  31. return nil
  32. }
  33. func (o *TestConnection) SetReadDeadline(t time.Time) error {
  34. return nil
  35. }
  36. func (o *TestConnection) SetWriteDeadline(t time.Time) error {
  37. return nil
  38. }
  39. func TestConnectionCache(t *testing.T) {
  40. assert := assert.On(t)
  41. pool := NewConnectionPool()
  42. conn := pool.Get(NewConnectionID(v2net.LocalHostIP, v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(80))))
  43. assert.Pointer(conn).IsNil()
  44. pool.Put(NewConnectionID(v2net.LocalHostIP, v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(80))), &TestConnection{id: "test"})
  45. conn = pool.Get(NewConnectionID(v2net.LocalHostIP, v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(80))))
  46. assert.String(conn.(*TestConnection).id).Equals("test")
  47. }
  48. func TestConnectionRecycle(t *testing.T) {
  49. assert := assert.On(t)
  50. pool := NewConnectionPool()
  51. c := &TestConnection{id: "test"}
  52. pool.Put(NewConnectionID(v2net.LocalHostIP, v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(80))), c)
  53. time.Sleep(6 * time.Second)
  54. assert.Bool(c.closed).IsTrue()
  55. conn := pool.Get(NewConnectionID(v2net.LocalHostIP, v2net.TCPDestination(v2net.LocalHostIP, v2net.Port(80))))
  56. assert.Pointer(conn).IsNil()
  57. }