MCPcopy
hub / github.com/gorilla/websocket / TestSocksProxyDial

Function TestSocksProxyDial

client_server_test.go:767–844  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

765}
766
767func TestSocksProxyDial(t *testing.T) {
768 s := newServer(t)
769 defer s.Close()
770
771 proxyListener, err := net.Listen("tcp", "127.0.0.1:0")
772 if err != nil {
773 t.Fatalf("listen failed: %v", err)
774 }
775 defer proxyListener.Close()
776 go func() {
777 c1, err := proxyListener.Accept()
778 if err != nil {
779 t.Errorf("proxy accept failed: %v", err)
780 return
781 }
782 defer c1.Close()
783
784 c1.SetDeadline(time.Now().Add(30 * time.Second))
785
786 buf := make([]byte, 32)
787 if _, err := io.ReadFull(c1, buf[:3]); err != nil {
788 t.Errorf("read failed: %v", err)
789 return
790 }
791 if want := []byte{5, 1, 0}; !bytes.Equal(want, buf[:len(want)]) {
792 t.Errorf("read %x, want %x", buf[:len(want)], want)
793 }
794 if _, err := c1.Write([]byte{5, 0}); err != nil {
795 t.Errorf("write failed: %v", err)
796 return
797 }
798 if _, err := io.ReadFull(c1, buf[:10]); err != nil {
799 t.Errorf("read failed: %v", err)
800 return
801 }
802 if want := []byte{5, 1, 0, 1}; !bytes.Equal(want, buf[:len(want)]) {
803 t.Errorf("read %x, want %x", buf[:len(want)], want)
804 return
805 }
806 buf[1] = 0
807 if _, err := c1.Write(buf[:10]); err != nil {
808 t.Errorf("write failed: %v", err)
809 return
810 }
811
812 ip := net.IP(buf[4:8])
813 port := binary.BigEndian.Uint16(buf[8:10])
814
815 c2, err := net.DialTCP("tcp", nil, &net.TCPAddr{IP: ip, Port: int(port)})
816 if err != nil {
817 t.Errorf("dial failed; %v", err)
818 return
819 }
820 defer c2.Close()
821 done := make(chan struct{})
822 go func() {
823 io.Copy(c1, c2)
824 close(done)

Callers

nothing calls this directly

Calls 7

newServerFunction · 0.85
sendRecvFunction · 0.85
StringMethod · 0.80
DialMethod · 0.65
CloseMethod · 0.45
SetDeadlineMethod · 0.45
WriteMethod · 0.45

Tested by

no test coverage detected