github.com/ipfans/trojan-go@v0.11.0/redirector/redirector_test.go (about) 1 package redirector 2 3 import ( 4 "context" 5 "fmt" 6 "net" 7 "net/http" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/ipfans/trojan-go/common" 13 "github.com/ipfans/trojan-go/test/util" 14 ) 15 16 func TestRedirector(t *testing.T) { 17 ctx, cancel := context.WithCancel(context.Background()) 18 redir := NewRedirector(ctx) 19 redir.Redirect(&Redirection{ 20 Dial: nil, 21 RedirectTo: nil, 22 InboundConn: nil, 23 }) 24 var fakeAddr net.Addr 25 var fakeConn net.Conn 26 redir.Redirect(&Redirection{ 27 Dial: nil, 28 RedirectTo: fakeAddr, 29 InboundConn: fakeConn, 30 }) 31 redir.Redirect(&Redirection{ 32 Dial: nil, 33 RedirectTo: nil, 34 InboundConn: fakeConn, 35 }) 36 redir.Redirect(&Redirection{ 37 Dial: nil, 38 RedirectTo: fakeAddr, 39 InboundConn: nil, 40 }) 41 l, err := net.Listen("tcp", "127.0.0.1:0") 42 common.Must(err) 43 conn1, err := net.Dial("tcp", l.Addr().String()) 44 common.Must(err) 45 conn2, err := l.Accept() 46 common.Must(err) 47 redirAddr, err := net.ResolveTCPAddr("tcp", util.HTTPAddr) 48 common.Must(err) 49 redir.Redirect(&Redirection{ 50 Dial: nil, 51 RedirectTo: redirAddr, 52 InboundConn: conn2, 53 }) 54 time.Sleep(time.Second) 55 req, err := http.NewRequest("GET", "http://localhost/", nil) 56 common.Must(err) 57 req.Write(conn1) 58 buf := make([]byte, 1024) 59 conn1.Read(buf) 60 fmt.Println(string(buf)) 61 if !strings.HasPrefix(string(buf), "HTTP/1.1 200 OK") { 62 t.Fail() 63 } 64 cancel() 65 conn1.Close() 66 conn2.Close() 67 }