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  }