Переглянути джерело

add test case for http proxy

v2ray 9 роки тому
батько
коміт
b60f491cec
2 змінених файлів з 33 додано та 5 видалено
  1. 3 2
      proxy/http/http.go
  2. 30 3
      proxy/http/http_test.go

+ 3 - 2
proxy/http/http.go

@@ -165,7 +165,8 @@ func (this *HttpProxyServer) transport(input io.Reader, output io.Writer, ray ra
 	}()
 }
 
-func stripHopByHopHeaders(request *http.Request) {
+// @VisibleForTesting
+func StripHopByHopHeaders(request *http.Request) {
 	// Strip hop-by-hop header basaed on RFC:
 	// http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.5.1
 	// https://www.mnot.net/blog/2011/07/11/what_proxies_must_do
@@ -213,7 +214,7 @@ func (this *HttpProxyServer) handlePlainHTTP(request *http.Request, dest v2net.D
 	}
 
 	request.Host = request.URL.Host
-	stripHopByHopHeaders(request)
+	StripHopByHopHeaders(request)
 
 	requestBuffer := alloc.NewBuffer().Clear() // Don't release this buffer as it is passed into a Packet.
 	request.Write(requestBuffer)

+ 30 - 3
proxy/http/http_test.go

@@ -1,14 +1,22 @@
-package http
+package http_test
 
 import (
 	"bufio"
-	"github.com/v2ray/v2ray-core/testing/assert"
 	"net/http"
 	"strings"
 	"testing"
+
+	testdispatcher "github.com/v2ray/v2ray-core/app/dispatcher/testing"
+	v2nettesting "github.com/v2ray/v2ray-core/common/net/testing"
+	netassert "github.com/v2ray/v2ray-core/common/net/testing/assert"
+	. "github.com/v2ray/v2ray-core/proxy/http"
+	v2testing "github.com/v2ray/v2ray-core/testing"
+	"github.com/v2ray/v2ray-core/testing/assert"
 )
 
 func TestHopByHopHeadersStrip(t *testing.T) {
+	v2testing.Current(t)
+
 	rawRequest := `GET /pkg/net/http/ HTTP/1.1
 Host: golang.org
 Connection: keep-alive,Foo, Bar
@@ -32,10 +40,29 @@ Accept-Language: de,en;q=0.7,en-us;q=0.3
 	assert.StringLiteral(req.Header.Get("Proxy-Connection")).Equals("keep-alive")
 	assert.StringLiteral(req.Header.Get("Proxy-Authenticate")).Equals("abc")
 
-	stripHopByHopHeaders(req)
+	StripHopByHopHeaders(req)
 	assert.StringLiteral(req.Header.Get("Connection")).Equals("close")
 	assert.StringLiteral(req.Header.Get("Foo")).Equals("")
 	assert.StringLiteral(req.Header.Get("Bar")).Equals("")
 	assert.StringLiteral(req.Header.Get("Proxy-Connection")).Equals("")
 	assert.StringLiteral(req.Header.Get("Proxy-Authenticate")).Equals("")
 }
+
+func TestNormalGetRequest(t *testing.T) {
+	v2testing.Current(t)
+
+	testPacketDispatcher := testdispatcher.NewTestPacketDispatcher(nil)
+
+	httpProxy := NewHttpProxyServer(&Config{}, testPacketDispatcher)
+	defer httpProxy.Close()
+
+	port := v2nettesting.PickPort()
+	err := httpProxy.Listen(port)
+	assert.Error(err).IsNil()
+	netassert.Port(port).Equals(httpProxy.Port())
+
+	httpClient := &http.Client{}
+	resp, err := httpClient.Get("http://127.0.0.1:" + port.String() + "/")
+	assert.Error(err).IsNil()
+	assert.Int(resp.StatusCode).Equals(400)
+}