Sfoglia il codice sorgente

test case for http header

Darien Raymond 9 anni fa
parent
commit
b17f06bb4e
1 ha cambiato i file con 53 aggiunte e 2 eliminazioni
  1. 53 2
      transport/internet/headers/http/http_test.go

+ 53 - 2
transport/internet/headers/http/http_test.go

@@ -1,8 +1,11 @@
 package http_test
 
 import (
+	"net"
 	"testing"
 
+	"time"
+
 	"v2ray.com/core/common/buf"
 	"v2ray.com/core/common/serial"
 	"v2ray.com/core/testing/assert"
@@ -16,8 +19,11 @@ func TestReaderWriter(t *testing.T) {
 	b := buf.NewLocal(256)
 	b.AppendSupplier(serial.WriteString("abcd" + ENDING))
 	writer := NewHeaderWriter(b)
-	writer.Write(cache)
-	cache.Write([]byte{'e', 'f', 'g'})
+	err := writer.Write(cache)
+	assert.Error(err).IsNil()
+	assert.Int(cache.Len()).Equals(8)
+	_, err = cache.Write([]byte{'e', 'f', 'g'})
+	assert.Error(err).IsNil()
 
 	reader := &HeaderReader{}
 	buffer, err := reader.Read(cache)
@@ -47,3 +53,48 @@ func TestRequestHeader(t *testing.T) {
 
 	assert.String(cache.String()).Equals("GET / HTTP/1.1\r\nTest: Value\r\n\r\n")
 }
+
+func TestConnection(t *testing.T) {
+	assert := assert.On(t)
+
+	factory := HttpAuthenticatorFactory{}
+	auth := factory.Create(new(Config))
+
+	listener, err := net.Listen("tcp", "127.0.0.1:0")
+	assert.Error(err).IsNil()
+
+	go func() {
+		conn, err := listener.Accept()
+		assert.Error(err).IsNil()
+		authConn := auth.Server(conn)
+		b := make([]byte, 256)
+		for {
+			n, err := authConn.Read(b)
+			assert.Error(err).IsNil()
+			_, err = authConn.Write(b[:n])
+			assert.Error(err).IsNil()
+		}
+	}()
+
+	conn, err := net.DialTCP("tcp", nil, listener.Addr().(*net.TCPAddr))
+	assert.Error(err).IsNil()
+
+	authConn := auth.Client(conn)
+	authConn.Write([]byte("Test payload"))
+	authConn.Write([]byte("Test payload 2"))
+
+	expectedResponse := "Test payloadTest payload 2"
+	actualResponse := make([]byte, 256)
+	deadline := time.Now().Add(time.Second * 5)
+	totalBytes := 0
+	for {
+		n, err := authConn.Read(actualResponse[totalBytes:])
+		assert.Error(err).IsNil()
+		totalBytes += n
+		if totalBytes >= len(expectedResponse) || time.Now().After(deadline) {
+			break
+		}
+	}
+
+	assert.String(string(actualResponse[:totalBytes])).Equals(expectedResponse)
+}