github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/proxy/ws/ws_test.go (about) 1 package ws 2 3 import ( 4 "fmt" 5 "io" 6 "net" 7 "testing" 8 ) 9 10 func TestProxy(t *testing.T) { 11 testListener, _ := net.Listen("tcp", ":0") 12 go func() { 13 for { 14 conn, err := testListener.Accept() 15 if err != nil { 16 break 17 } 18 go func(c net.Conn) { 19 defer c.Close() 20 io.Copy(c, c) 21 }(conn) 22 } 23 }() 24 testEcho := func(proxy, uri string) { 25 conn, err := Dial(proxy, uri) 26 if err != nil { 27 t.Error(err) 28 return 29 } 30 defer conn.Close() 31 fmt.Fprintf(conn, "abc") 32 buffer := make([]byte, 1024) 33 n, err := conn.Read(buffer) 34 if err != nil { 35 t.Error(err) 36 return 37 } 38 if string(buffer[0:n]) != "abc" { 39 t.Error("error") 40 return 41 } 42 } 43 server := NewServer() 44 go func() { 45 server.Run(":0") 46 }() 47 listener, _ := server.Start("tcp", ":0") 48 defer server.Stop() 49 proxyServer := fmt.Sprintf("ws://%v", listener.Addr()) 50 testEcho(proxyServer, testListener.Addr().String()) 51 testEcho(proxyServer+"?abc=1", testListener.Addr().String()) 52 _, err := Dial(proxyServer, "") 53 if err == nil { 54 t.Error(err) 55 return 56 } 57 _, err = Dial(proxyServer, "127.0.0.1:2") 58 if err == nil { 59 t.Error(err) 60 return 61 } 62 }