github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/proxy/forward_test.go (about) 1 package proxy 2 3 import ( 4 "fmt" 5 "io" 6 "net" 7 "net/url" 8 "testing" 9 10 "github.com/codingeasygo/util/xio" 11 ) 12 13 func runEchoServer(addr string) { 14 ln, err := net.Listen("tcp", addr) 15 if err != nil { 16 panic(err) 17 } 18 for { 19 conn, err := ln.Accept() 20 if err != nil { 21 panic(err) 22 } 23 go io.Copy(conn, conn) 24 } 25 } 26 27 func TestForward(t *testing.T) { 28 go runEchoServer("127.0.0.1:13200") 29 forward := NewForward("Test") 30 { 31 listenURL, _ := url.Parse("socks://127.0.0.1:0") 32 _, err := forward.StartForward("socks", listenURL, "tcp://${HOST}") 33 if err != nil { 34 t.Error(err) 35 return 36 } 37 forward.StopForward("socks") 38 } 39 { 40 listenURL, _ := url.Parse("proxy://127.0.0.1:0") 41 _, err := forward.StartForward("proxy", listenURL, "tcp://${HOST}") 42 if err != nil { 43 t.Error(err) 44 return 45 } 46 forward.StopForward("proxy") 47 } 48 { 49 listenURL, _ := url.Parse("tcp://127.0.0.1:13300") 50 _, err := forward.StartForward("abc", listenURL, "tcp://127.0.0.1:13200") 51 if err != nil { 52 t.Error(err) 53 return 54 } 55 conn, err := net.Dial("tcp", "127.0.0.1:13300") 56 if err != nil { 57 t.Error(err) 58 return 59 } 60 fmt.Fprintf(conn, "abc") 61 buf := make([]byte, 1024) 62 n, err := conn.Read(buf) 63 if err != nil || string(buf[0:n]) != "abc" { 64 t.Error(err) 65 return 66 } 67 forward.StopForward("abc") 68 } 69 { //stop 70 listenURL, _ := url.Parse("proxy://127.0.0.1:0") 71 _, err := forward.StartForward("proxy", listenURL, "tcp://${HOST}") 72 if err != nil { 73 t.Error(err) 74 return 75 } 76 forward.Stop() 77 } 78 { //dial fail 79 listenURL, _ := url.Parse("tcp://127.0.0.1:13300") 80 _, err := forward.StartForward("abc", listenURL, "tcp://127.0.0.1:10") 81 if err != nil { 82 t.Error(err) 83 return 84 } 85 conn, err := net.Dial("tcp", "127.0.0.1:13300") 86 if err != nil { 87 t.Error(err) 88 return 89 } 90 buf := make([]byte, 1024) 91 _, err = conn.Read(buf) 92 if err == nil { 93 t.Error(err) 94 return 95 } 96 forward.StopForward("abc") 97 } 98 { //error 99 listenURL, _ := url.Parse("proxy://127.0.0.1:0") 100 l, err := forward.StartForward("proxy", listenURL, "tcp://${HOST}") 101 if err != nil { 102 t.Error(err) 103 return 104 } 105 _, err = forward.StartForward("proxy", listenURL, "tcp://${HOST}") 106 if err == nil { 107 t.Error(err) 108 return 109 } 110 forward.Stop() 111 forward.procForward(l, "", nil, nil, "") 112 } 113 { //dialer 114 dialer := RouterPiperDialer{ 115 Next: xio.PiperDialerF(func(uri string, bufferSize int) (raw xio.Piper, err error) { 116 return 117 }), 118 } 119 dialer.DialPiper("", 0) 120 } 121 }