http_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package http_test
  2. import (
  3. "context"
  4. "crypto/rand"
  5. "testing"
  6. "time"
  7. "v2ray.com/core/common"
  8. "v2ray.com/core/common/buf"
  9. "v2ray.com/core/common/net"
  10. "v2ray.com/core/testing/servers/tcp"
  11. tlsgen "v2ray.com/core/testing/tls"
  12. "v2ray.com/core/transport/internet"
  13. . "v2ray.com/core/transport/internet/http"
  14. "v2ray.com/core/transport/internet/tls"
  15. . "v2ray.com/ext/assert"
  16. )
  17. func TestHTTPConnection(t *testing.T) {
  18. assert := With(t)
  19. port := tcp.PickPort()
  20. lctx := context.Background()
  21. lctx = internet.ContextWithSecuritySettings(lctx, &tls.Config{
  22. Certificate: []*tls.Certificate{tlsgen.GenerateCertificateForTest()},
  23. })
  24. lctx = internet.ContextWithTransportSettings(lctx, &Config{})
  25. listener, err := Listen(lctx, net.LocalHostIP, port, func(conn internet.Connection) {
  26. go func() {
  27. defer conn.Close()
  28. b := buf.New()
  29. defer b.Release()
  30. for {
  31. if err := b.Reset(buf.ReadFrom(conn)); err != nil {
  32. return
  33. }
  34. nBytes, err := conn.Write(b.Bytes())
  35. assert(err, IsNil)
  36. assert(int32(nBytes), Equals, b.Len())
  37. }
  38. }()
  39. })
  40. assert(err, IsNil)
  41. defer listener.Close()
  42. time.Sleep(time.Second)
  43. dctx := context.Background()
  44. dctx = internet.ContextWithSecuritySettings(dctx, &tls.Config{
  45. ServerName: "www.v2ray.com",
  46. AllowInsecure: true,
  47. })
  48. dctx = internet.ContextWithTransportSettings(dctx, &Config{})
  49. conn, err := Dial(dctx, net.TCPDestination(net.LocalHostIP, port))
  50. assert(err, IsNil)
  51. defer conn.Close()
  52. const N = 1024
  53. b1 := make([]byte, N)
  54. common.Must2(rand.Read(b1))
  55. b2 := buf.New()
  56. nBytes, err := conn.Write(b1)
  57. assert(nBytes, Equals, N)
  58. assert(err, IsNil)
  59. assert(b2.Reset(buf.ReadFullFrom(conn, N)), IsNil)
  60. assert(b2.Bytes(), Equals, b1)
  61. nBytes, err = conn.Write(b1)
  62. assert(nBytes, Equals, N)
  63. assert(err, IsNil)
  64. assert(b2.Reset(buf.ReadFullFrom(conn, N)), IsNil)
  65. assert(b2.Bytes(), Equals, b1)
  66. }