connection_test.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package kcp_test
  2. import (
  3. "crypto/rand"
  4. "io"
  5. "net"
  6. "testing"
  7. "time"
  8. v2net "github.com/v2ray/v2ray-core/common/net"
  9. "github.com/v2ray/v2ray-core/testing/assert"
  10. . "github.com/v2ray/v2ray-core/transport/internet/kcp"
  11. )
  12. type NoOpWriteCloser struct{}
  13. func (this *NoOpWriteCloser) Write(b []byte) (int, error) {
  14. return len(b), nil
  15. }
  16. func (this *NoOpWriteCloser) Close() error {
  17. return nil
  18. }
  19. func TestConnectionReadTimeout(t *testing.T) {
  20. assert := assert.On(t)
  21. conn := NewConnection(1, &NoOpWriteCloser{}, nil, nil, NewSimpleAuthenticator())
  22. conn.SetReadDeadline(time.Now().Add(time.Second))
  23. b := make([]byte, 1024)
  24. nBytes, err := conn.Read(b)
  25. assert.Int(nBytes).Equals(0)
  26. assert.Error(err).IsNotNil()
  27. }
  28. func TestConnectionReadWrite(t *testing.T) {
  29. assert := assert.On(t)
  30. upReader, upWriter := io.Pipe()
  31. downReader, downWriter := io.Pipe()
  32. connClient := NewConnection(1, upWriter, &net.UDPAddr{IP: v2net.LocalHostIP.IP(), Port: 1}, &net.UDPAddr{IP: v2net.LocalHostIP.IP(), Port: 2}, NewSimpleAuthenticator())
  33. go connClient.FetchInputFrom(downReader)
  34. connServer := NewConnection(1, downWriter, &net.UDPAddr{IP: v2net.LocalHostIP.IP(), Port: 2}, &net.UDPAddr{IP: v2net.LocalHostIP.IP(), Port: 1}, NewSimpleAuthenticator())
  35. go connServer.FetchInputFrom(upReader)
  36. totalWritten := 1024 * 1024
  37. clientSend := make([]byte, totalWritten)
  38. rand.Read(clientSend)
  39. nBytes, err := connClient.Write(clientSend)
  40. assert.Int(nBytes).Equals(totalWritten)
  41. assert.Error(err).IsNil()
  42. serverReceived := make([]byte, totalWritten)
  43. totalRead := 0
  44. for totalRead < totalWritten {
  45. nBytes, err = connServer.Read(serverReceived[totalRead:])
  46. assert.Error(err).IsNil()
  47. totalRead += nBytes
  48. }
  49. assert.Bytes(serverReceived).Equals(clientSend)
  50. }