http_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package http_test
  2. import (
  3. "net"
  4. "testing"
  5. "time"
  6. "v2ray.com/core/common/buf"
  7. "v2ray.com/core/common/serial"
  8. "v2ray.com/core/testing/assert"
  9. . "v2ray.com/core/transport/internet/headers/http"
  10. )
  11. func TestReaderWriter(t *testing.T) {
  12. assert := assert.On(t)
  13. cache := buf.New()
  14. b := buf.NewLocal(256)
  15. b.AppendSupplier(serial.WriteString("abcd" + ENDING))
  16. writer := NewHeaderWriter(b)
  17. err := writer.Write(cache)
  18. assert.Error(err).IsNil()
  19. assert.Int(cache.Len()).Equals(8)
  20. _, err = cache.Write([]byte{'e', 'f', 'g'})
  21. assert.Error(err).IsNil()
  22. reader := &HeaderReader{}
  23. buffer, err := reader.Read(cache)
  24. assert.Error(err).IsNil()
  25. assert.Bytes(buffer.Bytes()).Equals([]byte{'e', 'f', 'g'})
  26. }
  27. func TestRequestHeader(t *testing.T) {
  28. assert := assert.On(t)
  29. factory := HttpAuthenticatorFactory{}
  30. auth := factory.Create(&Config{
  31. Request: &RequestConfig{
  32. Uri: []string{"/"},
  33. Header: []*Header{
  34. {
  35. Name: "Test",
  36. Value: []string{"Value"},
  37. },
  38. },
  39. },
  40. }).(HttpAuthenticator)
  41. cache := buf.New()
  42. err := auth.GetClientWriter().Write(cache)
  43. assert.Error(err).IsNil()
  44. assert.String(cache.String()).Equals("GET / HTTP/1.1\r\nTest: Value\r\n\r\n")
  45. }
  46. func TestConnection(t *testing.T) {
  47. assert := assert.On(t)
  48. factory := HttpAuthenticatorFactory{}
  49. auth := factory.Create(new(Config))
  50. listener, err := net.Listen("tcp", "127.0.0.1:0")
  51. assert.Error(err).IsNil()
  52. go func() {
  53. conn, err := listener.Accept()
  54. assert.Error(err).IsNil()
  55. authConn := auth.Server(conn)
  56. b := make([]byte, 256)
  57. for {
  58. n, err := authConn.Read(b)
  59. assert.Error(err).IsNil()
  60. _, err = authConn.Write(b[:n])
  61. assert.Error(err).IsNil()
  62. }
  63. }()
  64. conn, err := net.DialTCP("tcp", nil, listener.Addr().(*net.TCPAddr))
  65. assert.Error(err).IsNil()
  66. authConn := auth.Client(conn)
  67. authConn.Write([]byte("Test payload"))
  68. authConn.Write([]byte("Test payload 2"))
  69. expectedResponse := "Test payloadTest payload 2"
  70. actualResponse := make([]byte, 256)
  71. deadline := time.Now().Add(time.Second * 5)
  72. totalBytes := 0
  73. for {
  74. n, err := authConn.Read(actualResponse[totalBytes:])
  75. assert.Error(err).IsNil()
  76. totalBytes += n
  77. if totalBytes >= len(expectedResponse) || time.Now().After(deadline) {
  78. break
  79. }
  80. }
  81. assert.String(string(actualResponse[:totalBytes])).Equals(expectedResponse)
  82. }